Изменение lw на la не имеет значения.
То есть программа все еще работает.
... но это не значит, что инструкции имеют тот же эффект.
Если вы замените 100
на 10000
в следующей инструкции C: fgets(fl,buffer,100)
, программа также будет работать с большой вероятностью!
Итак, в чем разница между lw
и la
в этой программе сборки MIPS?
ЛМ
lw
загружает значение, которое хранится по определенному адресу. Таким образом, lw $a1, input_sz
загрузит значение 80 в регистр a1
, поскольку значение 80 хранится по адресу, указанному в метке input_sz
.
ла
la
загружает адрес самой метки в регистр. Пример: если метка input_sz
расположена по адресу 100, значение 100 будет загружено в регистр a1
по инструкции la $a1, input_sz
.
Неважно, что хранится по этому адресу. Процессор его не читает.