Я пытаюсь выяснить следующий код:Загрузка нескольких адресов/немедленно в сборку MIPS?
.data
strInput: .space 50
strFOO: .asciiz "foo\n"
strAskInput: .asciiz "input your testable string: "
.text
li $v0, 4
la $a0, strAskInput
syscall
li $v0, 8
la $a0, strInput
li $a1, 50
syscall
la $a0, strFOO
li $a1, 50
la $a0, strInput
la $a1, strFOO
....rest of code
В принципе, пользователь вводит строку, а затем это будет проверяться со строкой Foo в остальной части кода.
Что я не понимаю, так это то, что этот код перезаписывает $ a0 (строку, которую мы вводим) со строкой foo, но затем возвращает ее позже (весь код работает) и правильно ее проверяет!
Кроме того, что такое использование загрузки 50 сразу в $ a1?
Строковый ввод помещается в память на 'strInput', на него не влияет перезапись' $ a0', если вы позже получите доступ к ней правильно, например, перезагрузив адрес в '$ a0' или где-нибудь еще. Syscall # 8 ожидает, что длина буфера будет вторым аргументом, поэтому '50' загружается в' $ a1'. – Jester
так: la $ a0, strInput - мы помещаем нашу строку в память strInput. then, li $ a1, 50 - мы помещаем нашу длину буфера в $ a1 then, la $ a0, strFOO - что это делает? Я думал, он загрузил адрес strFOO в $ a0, перезаписав, когда мы сохранили strInput в $ a0? – yokow