#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
没什么区别。
即该程序仍然有效。
那么,在此MIPS汇编程序中,lw
和la
有什么区别?
答案 0 :(得分:2)
将lw更改为la没有区别。
即该程序仍然有效。
...但是这并不意味着这些指令具有相同的效果。
如果在以下C指令100
中将10000
替换为fgets(fl,buffer,100)
,该程序仍然很有可能正常工作!
那么,在此MIPS汇编程序中,
lw
和la
有什么区别?
lw
lw
加载存储在特定地址的值。因此lw $a1, input_sz
会将值80加载到寄存器a1
中,因为值80存储在标签input_sz
指定的地址上。
la
la
将标签本身的地址加载到寄存器中。示例:如果标签input_sz
位于地址100,则值100将通过指令a1
加载到la $a1, input_sz
寄存器中。
此地址存储的内容无关紧要。 CPU无法读取它。