Как отмечали другие ответы, ascii, содержащаяся в директиве .ascii "string"
, кодируется в необработанном двоичном формате в сегменте данных объектного файла. Что от того, что происходит от этого, зависит от двоичного формата, в который ассемблер кодирует. Обычно данные не кодируются в машинный код, однако GNU as
с радостью соберет это:
.text
start:
.ascii "Hello, world"
addi $t1, $zero, 0x1
end:
Если вы разберете вывод в objdump
(я использую здесь цепочку инструментов mips-img-elf), вы увидите это:
Disassembly of section .text:
00000000 <message>:
0: 48656c6c 0x48656c6c
4: 6f2c2077 0x6f2c2077
8: 6f726c64 0x6f726c64
c: 20090001 addi t1,zero,1
В шестнадцатеричной последовательности 48 65 6c 6c 6f 2c 20 77 6f 72 6c 64
написано "Привет, мир".
Я пришел сюда в поисках ответа на вопрос, почему ГАЗ ведет себя так. Марс не будет собирать вышеупомянутую программу, из-за ошибки, что директивы данных не могут быть использованы в текстовом сегменте
У кого-нибудь есть понимание?