1-3-数据传输指令

MIPS算数运算只对寄存器操作,因此必须将存储器中的值取出到寄存器(取字),并将运算结果存回存储器(存字)。

程序中使用的变量数远大于寄存器的个数,因此编译器会将不常用的变量存储在存储器,需要时再通过数据传输指令从存储器取出,计算后存回存储器。

取字

MIPS

// $s1 = Memory[$s2 + 20]
lw $s1, 20 ($s2)

指令:

100011 10010 10001 0000000000010100

偏移量 20 相当于取下标 5(4 * 5 = 20)

例:

// C语言
g = h + A[8]

// MIPS
lw $t0, 32 ($s3)
add $s1, $s2, $t0

存字

MIPS

// Memory[$s2 + 20] = $s1
sw $s1, 20 ($s2)

指令:

101011 10010 10001 0000000000010100

例:

// C语言
A[12] = h + A[8]

// MIPS
lw $t0, 32 ($s3)
add $t0, $s2, $t0
sw $t0, 48 ($s3)