1

我正在研究汇编和 MIPS 指令集。这是我正在学习的第一个基本程序:

.text
    .globl main
main:
    li  $t0, -10 #  $t0 = -10   ("load immediate")
    li  $t1, -31 #  $t1 = -31   ("load immediate")
    li  $t2, -10 #  $t2 = -10   ("load immediate")
    li  $t3, -31 #  $t3 = -31   ("load immediate")

    #swap

    xor $t0, $t0, $t1
    xor $t1, $t0, $t1
    xor $t0, $t0, $t1

    addu    $t2, $t2, $t3
    subu    $t3, $t2, $t3
    subu    $t2, $t2, $t3

    li  $v0, 10
    syscall

现在我想了解每条指令的作用,因为我可以在我的模拟器中运行这个程序,这让我更加想知道这个程序以及它的作用以及我如何改变它来学习更多的汇编。首先,您能否告诉我如何评论 xor、addu 和 subu 部分,以及 syscall 是什么意思以及第一部分 .text 和 .blobl main 是什么意思?

我是否让这比实际上更困难?您也可以向我提供 MIPS 汇编编程的教程。

4

1 回答 1

1

我将其分解:

li是所谓的伪指令,汇编器会将其拆分为lui(Load Upper Immediate) 和ori(OR Immediate),从 2 个 16 位立即数构造一个 32 位值。虽然lw可以使用,但它通常没有任何好处并且会破坏缓存线。

xor只计算 op1 = op2 XOR op3。在您的特殊情况下,它用于在 $t0 和 $t1 上进行寄存器交换。

addu并且subu只会添加/减去 op2 和 op3 并将结果存储到 op1 中。同样,您的代码中显示的内容将交换两个寄存器 $t2 和 $t3。

syscall将陷入您的操作系统并执行某些特定功能。函数号将存储在 $v0 中,因此您的示例运行函数号 10,这对于“退出”来说似乎很常见。

于 2012-07-25T11:18:19.173 回答