У меня есть два вопроса:MIPS «ли» инструкция псевдо загружает адрес литерала
1)> Что происходит в инструкции псевда линейный 2.The «La» ссылается загрузить адрес, а не буквальный «3444 «Должна была быть ярлык. Как он может загрузить адрес литера.
2)> если вы замените строку 3 на« li $ a0 3444 », которая загружает 3444 в регистр # a0 вместо адреса. вывод все тот же. Что я хочу спросить, так это то, как syscall знает, что в # a0 является адресом переменной или самой переменной. Как могла бы подпрограмма для печати целого работала правильно, сохранялся ли аргумент в # a0 - адрес или целочисленное значение itse низкая частота
.text
li $v0 1
>>2 la $a0 3444 # When i replace 3444 literal with the label 'anint' it makes sense and the output of course is the same
syscall
.data
anint: .word 3444
Выход:
3444
UPDATE # 2: Я could'nt разместить код в комментариях так ...
IF-ли (адрес загрузки) и литий (нагрузка немедленная) оба переводят на ту же инструкцию, то есть загружают литерал в # a0, а затем объясняют строку 3 из сегмента кода ниже.
.text
li #v0 4
>>3 la #a0 msg #This loads the address of the label 'msg in #a0' not the label itself
syscall
.data
msg: .asciiz "This is a long string that can't be saved in the register!"
Вы не должны пытаться публиковать код в комментариях в любом случае. Редактирование разъяснений в вашем ответе - правильная вещь. –
Этикетки - это адреса. Они не «хранятся» в любом месте, они просто полезные способы писать адреса символически, а не с числовыми адресами. –