la和li的顺序是否重要

时间:2018-04-10 17:41:08

标签: assembly mips

所以今天我开始学习MIPS汇编语言,就像其他编程语言一样,你从一个hello世界开始。 我看了一些教程并注意到有些人在la之前写过li而在li之前写了一些la。序列是否重要?

这有效:

.data
message: .asciiz "Hello World"
.text
li $v0, 4
la $a0, message
syscall

这也有效:

.data
message: .asciiz "Hello World"
.text
la $a0, message
li $v0, 4
syscall

那么我应该先写一个?

1 个答案:

答案 0 :(得分:1)

您写入寄存器的顺序并不重要。这两个指令对机器的架构状态(即寄存器值)具有完全独立的影响,因此您可以自由地重新排序它们,仅受写入或读取$v0$a0的其他指令的限制。

请记住,在汇编语言中,您需要为计算机执行编程步骤。没有什么魔力,线条的组合意味着特别的东西;每个源代码行都是一个独立的指令,它只关心机器运行时的状态,而不是它如何到达那里。它不能回顾过去并告诉一个寄存器是在另一个寄存器之前写的。 (即使是无序/流水线CPU也会产生按程序顺序逐个执行指令的错觉。)

在使用前初始化寄存器超过1条指令的任何性能影响可以忽略不计(或在有序管道中不存在。lali是ALU指令的伪操作,而不是从内存常量加载,因此寄存器可供下一条指令使用。)