Оставить отступ между строками в сегменте
Я использую Марс 4.5 для симуляции Mips32. Я хотел сохранить строки (.asciiz) не один, смежный с другим, а сохранив их в отдельных местах памяти. Все еще рядом, но с разрывом.
Например:
.data
string_1: .asciiz "\nHello, world"
string_2: .asciiz "\n...assembly....\n"
В моем случае string_1
сохраняется автоматически по адресу 0x10010000 сегмента данных.
мне бы хотелось string_2
быть, например, по адресу 0x10010080, а не сразу после string1
,
Могу ли я редактировать адреса сегмента данных?
1 ответ
Это похоже на синтаксис GNU, поэтому я предполагаю, что MARS просто использует газ.
Используйте .org
директива для увеличения текущей выходной позиции до заданного абсолютного значения. (Прочтите руководство, чтобы убедиться, что вы понимаете его ограничения, например, только в пределах раздела, и вы не можете вернуться назад.)
.data
string_1: .asciiz "\nHello, world"
.org 0x10010080 # fill with zeros until this address
string_2: .asciiz "\n...assembly....\n"
Также обратите внимание, что если вы не собираетесь писать строковые константы, вы должны обычно помещать их в .rodata
,
Чаще всего требуется выравнивание по некоторой границе степени 2; использование .p2align
для этого.
Если вы хотите заполнить фиксированное количество байтов, используйте .zero size
, например .zero 1234
собирает до 1234 байтов нулей.