![](/img/trans.png)
[英]What is the difference between lw and la in this program of MIPS assembly?
[英]What is the difference between la and li in opcodes in MIPS?
例如在这段代码中:
#display message
li $v0, 4
la $a0, Message
#promt user to enter name
li $v0, 8
la $10, username
li $a1, 20
syscall
#display the name
li $v0, 4
la $a0, userName
syscall
我对li
(立即加载)和la
(加载地址)的真正含义感到非常困惑。
它们非常相似,因为两者(大部分)都用于加载即时值。 它们都是伪指令,因此真正由支持它们的每个汇编程序来确定它们应该如何运行。
li
代表立即加载,是加载最大 32 位大小的立即数的便捷方式。 addi
和ori
等指令只能编码 16 位立即数,因此汇编程序可能会将li
翻译成多条指令。
例如, li $t0,0x12345678
可能会变成:
lui $at, 0x1234
ori $t0, $at, 0x5678
因此,这只是一种避免您编写这两条指令的方法,而是让汇编程序为您解决这个问题。
真的没有理由不支持例如li $t0, Message
,因为标签也是立即数,但一些汇编程序可能不接受li
标签。
la
代表加载地址。 它可以像li
一样用于加载整数常量,例如la $t0,0x1234678
。 但它也适用于标签: la $t0, Message # t0 = address of Message
。
一些汇编程序可能还允许您执行诸如la $t0, 8($t1) # t0 = t1 + 8
。
何时使用li
何时使用la
取决于上下文。 如果您要加载的值将用作地址,您通常会使用la
加载它,否则您通常会使用li
。 由于它们是部分可互换的,这完全取决于您,但是如果您一直使用la
加载整数常量,其他人可能会发现您的代码看起来很奇怪。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.