首页 > IT职业 > IT职场 > 计算机组成与设计 读书笔记——第二章
$s0-$s7 $t0-$t9 $a0-$a3 $v0-v1 $zero(恒为零) $gp $fp $sp $ra $at(为构造32位立即数保留)
Memory[0] Memory[4] Memory[8] ... Memory[4294967292]在MIPS架构中,指令被分为三种类型:R型、I型和J型。三种类型的指令的最高6位均为6位的操作码。从25位往下,
三种类型的指令图示如下:

其中 rs是操作数1的寄存器 rt是操作数2的寄存器 rd是存放结果的寄存器 shamt是位移量 funct是功能码 immediate是立即数 address是地址
以下是指令表



bne $S3,$S4,Else
add $S0,$S1,$S2
j Exit
Else : sub $S0,$S1,$S2
Exit while (A[i] == B) {
i++;
}
Loop: sll $t1,$s3,2 # 临时变量 $t1 = i*4 这是为了计算A[i]的地址
add $t1,$t1,$s6 # s6是&A[0] t1是&A[i]
lw $t0,0($t1) # $t0 = A[i]
bne $t0,$s5,Exit # 不相等时跳出
addi $s3,$s3,1 # i++
j Loop
Exit $a0 ~ $a3 用于存放四个参数$v0 ~ $v1 用于存放两个返回值$ra 用于存放返回地址 即调用地址的PC+4jal 后面跟地址表示调用该地址的函数 用 jr $ra返回$sp是栈指针。压栈$sp -= 4 * n 出栈$sp += 4 * n
$t0 ~ $t9 是存放临时值的 不需要被调用者保存$s0 ~ $s7 被调用者要负责保存和恢复现场的寄存器$ra 和参数寄存器之类可能互相覆盖,因此所有可能被覆盖的寄存器压栈,有必要的话,调用者会保存的会包括调用后还需要的$a0 ~ $a3和$t0 ~ $t9,被调用者会保存的包括$ra和被调用者使用的$s0 ~ $s7 (因此迭代比递归性能高很多)

$at寄存器,来作为临时的寄存器。汇编器会将伪指令翻译为正式指令
move $t0, $t1 转译为 add $t0, $zero, $t1
blt 转译为 slt bne (其他同样的例子:bgt bge ble )la 是 load address 比如 la``$t0, var1
li 是 load immediate 比如 li $1, 0x3BF20
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/3265/viewspace-2807406/ ,如需转载,请注明出处,否则将追究法律责任。