2016-02-15 3 views
0

Я пытаюсь выяснить следующий код:Загрузка нескольких адресов/немедленно в сборку 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?

+0

Строковый ввод помещается в память на 'strInput', на него не влияет перезапись' $ a0', если вы позже получите доступ к ней правильно, например, перезагрузив адрес в '$ a0' или где-нибудь еще. Syscall # 8 ожидает, что длина буфера будет вторым аргументом, поэтому '50' загружается в' $ a1'. – Jester

+0

так: la $ a0, strInput - мы помещаем нашу строку в память strInput. then, li $ a1, 50 - мы помещаем нашу длину буфера в $ a1 then, la $ a0, strFOO - что это делает? Я думал, он загрузил адрес strFOO в $ a0, перезаписав, когда мы сохранили strInput в $ a0? – yokow

ответ

3

$a0 не содержит введенную строку; он содержит адрес, на который строка записывается системным вызовом. И, как заметил @Jester, 50 - это длина пространства, выделенного для этой строки.

+0

Как строка, которую мы ввели, затем переместилась в наше пространство памяти strInput? – yokow

+0

@yokow: Вот что делает 'syscall' (с 8 в' $ a0'). –

+0

OH Я понимаю. Видите, ла $ a0, strFOO Li $ a1, 50 и затем: ла $ a0, strInput ла $ a1, strFOO ---- смущало меня. Я не понял, почему strFOO нужно будет загружать так. Но теперь я понимаю, что .data уже имеет strFoo в памяти (включая его буфер), и нам нужно только загрузить его. Если strInput, наш вход/буфер помещается в это пространство в памяти через syscall! – yokow

Смежные вопросы