Нужно ли мне начинать строку с нулевого значения, если я резервирую ее пространство как .пробел в сборке MIPS32?

#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