Оставить отступ между строками в сегменте

Я использую Марс 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 байтов нулей.

Другие вопросы по тегам