2014-02-20 2 views
0

Я не понимаю поведение этой части MIPS кода:Не понимаю программу MIPS

.data 

x: .word 12 
y: .word 14, -3 
z: .ascii "CSE2021" 
t: .byte 0x8a 
v: .word y 

.text 
main: 

addi $t0, $0, 0 
lw $s0, y($t0) 
lw $t0, v($0) 
lw $s0, -4($t0) 

jr $ra 

Есть несколько вещей давало мне покоя:

  1. Задача состоит в том, чтобы определить значение $ s0 в конце выполнения. Как вы можете это сделать?

  2. Что делает линия: v: .word y означает? Он объявляет символ, почему он не имеет котировки?

  3. Если я закомментировать все в .data, но v:, сегмент данных пользователя показывает:

    сегмент данных пользователя [10000000] .. [10040000] [10000000] .. [1003ffff] 00000000

    Нет данных в нем сейчас ?? Где же тогда?

Спасибо.

ответ

3

1) вы делаете это после того, что процессор будет делать:

addi $t0, $0, 0 # $t0 is now 0 
lw $s0, y($t0) # $s0 is now word from memory at address y+$t0 which is 14 
lw $t0, v($0) # $t0 is now word from memory at address v+$0 which is y 
lw $s0, -4($t0) # $s0 is now word from memory at address $t0-4=y-4=x which is 12 

2) y это метка, это означает использование y «s адрес

3) если вы только сохранить v его должен произвести ошибку компиляции, потому что y не определен (если ваш ассемблер автоматически не обрабатывает неопределенные символы как внешние)

+0

Большое спасибо! Это очень полезно. – user2963044

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