.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
.