#assembly #mips #mips32
#сборка #mips #mips32
Вопрос:
Я пытаюсь зарезервировать место для хранения в нем строки, используя .space:
.data
myString: .space 16
У меня есть пример кода от моего учителя, в котором говорится, что я должен начинать эту строку с нулевого значения (0), я не понимаю, почему, хотя, зачем это нужно?
Заранее спасибо!
Комментарии:
1. Для чего это нужно?
.space
уже заполняется нулями, на случай, если вы хотите прочитать байты из статического инициализированного значения вместо байтов, которые вы позже сохраните.2. @PeterCordes Мой учитель говорит, что первым символом в строке должно быть нулевое значение (0), однако я не вижу в этом логики.
3. Да, в этом нет логики, если только у вас нет кода, который хочет прочитать его перед сохранением строки, поэтому он читается как пустая строка. Но, как я уже сказал, вы уже удовлетворяете этому требованию
.space
..byte 0
;.space 15
в итоге в памяти останется те же 16 байт нулей.
Ответ №1:
Не имеет значения, что находится в буфере, если ваш код определенно записывает буфер до того, как он его прочитает. В противном случае имеет значение, что она начинается с 0, поэтому это пустая строка, если она читается как строка с неявной длиной, заканчивающаяся 0.
Но вы уже это делаете: .space
заполняете нулями. Следующее в конечном итоге будет содержать точно такие же 16 байт нулей в памяти:
myString:
.byte 0
.space 15
Если вы хотите, чтобы в исходном коде было явно указано, что в начале есть 0, это стоит рассмотреть. (например, если вы передаете этот адрес чему-то, что считывает его перед первой записью). Даже тогда, если вы знаете, что .space
делает, это все равно просто беспорядок. Комментарий к .space
будет достаточным.
Я не уверен, где вы найдете документацию для классических ассемблеров MIPS, таких как MARS, которая .space
заполняется нулем, но это явно относится к ассемблеру Unix, такому как GNU as
, который в основном совместим с классическими ассемблерами MIPS: https://sourceware.org/binutils/docs/as/Space.html