#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
有什么区别?
将lw改为la不会有任何区别。 即该计划仍然有效。
......但这并不意味着说明具有相同的效果。
如果你在下面的C指令中用100
替换10000
:fgets(fl,buffer,100)
,程序仍然很有可能工作!
那么,在这个MIPS汇编程序中,
lw
和la
有什么区别?
如果
lw
加载存储在某个地址的值。所以lw $a1, input_sz
会将值80加载到寄存器a1
中,因为值80存储在由标签input_sz
指定的地址处。
该
la
将标签本身的地址加载到寄存器中。示例:如果标签input_sz
位于地址100,则值100将通过指令a1
加载到la $a1, input_sz
寄存器中。
存储在此地址的内容无关紧要。 CPU不会读它。