В чем разница между lw и la в этой программе сборки MIPS? - PullRequest
0 голосов
/ 23 марта 2019
#enter a string and show it 

.data 
prompt: .asciiz "enter a string >"
input_str: .space 81
input_sz: .word 80

.text

main:

# display the prompt
li $v0, 4
la $a0, prompt
syscall

# type a string, and save the input
li $v0, 8 # store the string in $v0
la $a0, input_str
lw $a1, input_sz 
syscall

# display the inputted string
li $v0, 4
la $a0, input_str
syscall

#terminate the program
li $v0, 10  
syscall

Видимо, вышеприведенная программа работает нормально.
Изменение lw на la не имеет значения.
То есть программа все еще работает.

Итак, в чем разница между lw и la в этой программе сборки MIPS?

1 Ответ

2 голосов
/ 23 марта 2019

Изменение 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.

Неважно, что хранится по этому адресу. Процессор его не читает.

...