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

Я использую mars 4.5 для имитации mips32. Я хотел сохранить строки (.asciiz), не смежные друг с другом, а сохранить их в разных местах памяти. По-прежнему рядом, но с разрывом.

Например:

.data 
string_1: .asciiz  "\nHello, world"
string_2: .asciiz "\n...assembly....\n"

В моем случае string_1 автоматически сохраняется по адресу 0x10010000 сегмента данных.

Я бы хотел, чтобы string_2 находился по адресу, например, 0x10010080, а не сразу после string1.

Могу ли я редактировать адреса сегментов данных?


person Alessandro Sassi    schedule 16.07.2016    source источник
comment
Спасибо за исправления, Питер, и извините за мой английский.   -  person Alessandro Sassi    schedule 18.07.2016


Ответы (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.


Чаще всего требуется выравнивание по некоторой границе степени двойки; используйте для этого .p2align.

Если вы хотите заполнить фиксированным количеством байтов, используйте .zero size. например .zero 1234 собирает до 1234 байтов нулей.

person Peter Cordes    schedule 16.07.2016