Перемещение набора команд MIPS против add / addi 0 для хранения значений? - PullRequest
7 голосов
/ 02 февраля 2012

В настоящее время я прохожу курс обучения компьютерной организации и языку ассемблера, который в основном использует набор инструкций MIPS для обучения языку ассемблера.

Я заметил, что во многих примерах, которые профессор опубликовал в Интернете, для добавления значений в регистр аргумента $ a0 для вызова служб печати, как показано ниже, используется add или addi ...

# store the first integer in $a0 and print
add $a0, $zero, $t0
li $v0, 1
syscall

или ...

# store the first integer in $a0 and print
addi $a0, $t0, 0
li $v0, 1
syscall

Я также заметил несколько примеров в Интернете, где другие просто используют инструкцию перемещения для выполнения того же действия, как показано ниже ...

# store the first integer in $a0 and print
move $a0, $t0
li $v0, 1
syscall

Является ли использование инструкции add или addi предпочтительным по сравнению с простым использованием move в этом сценарии? Если так, то почему? Есть ли разница в производительности или это просто вопрос вкуса?

1 Ответ

11 голосов
/ 02 февраля 2012

Инструкция move не является реальной инструкцией - это псевдо-инструкция , которая переводится ассемблером в инструкцию add.

Существует целый ряд этих псевдоинструкций, см., Например, https://en.wikipedia.org/wiki/MIPS_architecture#Pseudo_instructions

Этот тип вещей очень распространен на процессорах RISC, где требуется минимальный набор команд, и конкретная команда может использоваться для более чем одной цели.

...