Строка в сборке - PullRequest
       11

Строка в сборке

3 голосов
/ 04 октября 2011

Что делает .string в сборке?

При встроенном вызове asm на языке c, я написал

.string \"Hello World\"

1) Может кто-нибудь дать мне обзоркак работает .string?

2) Каким-то образом это значение сохраняется в% esi.Почему?

3) Как добавить в конец возвратную каретку?\ n не работает

Ответы [ 2 ]

3 голосов
/ 04 октября 2011

.string - это директива ассемблера в GAS, аналогичная .long, .int или .byte.Все, что он делает, это создает и инициализирует память для использования в вашей программе.Директива .string автоматически завершит строку нулем с [\0] для вас.В этом случае ассемблер выделяет пространство для 14 символов в 14 смежных байтах памяти.Если бы вы посмотрели на память, вы бы увидели это:

["][H][e][l][l][o][ ][W][o][r][l][d]["][\0]

За исключением шестнадцатеричных, а не символов.Я не уверен, как или почему %esi указывает на строку (это либо параметр ассемблера, с которым я не знаком, либо он был задан таким образом в строке кода, которую вы нам не показываете).Это означает, что %esi «указывает» на первый байт строки - в данном случае первый ["].Вы можете использовать регистр %esi для циклического прохождения байтов с использованием смещения (%esi + 5 будет [o]) или путем увеличения самого регистра.

Чтобы добавить новую строку, вы можете попробовать \x0D\x0A вместо \n.

1 голос
/ 05 октября 2011
  1. Просто выдает последовательность символов в соответствующий раздел кода / данных.См. это и это (хотя они используют .ascii).
  2. Покажите нам код.
  3. Попробуйте \\ n или \ 12или \ xa.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...