原视频课
国外最火MIPS汇编语言学习视频,有翻译字幕,方便学习_哔哩哔哩_bilibili
代码
space数据类型:#.space 12 代表给变量分配12个字节空间,即12字节。如果我们想存储三个整数,一个整数占用4字节,那么一共就需要4 x 3 = 12个字节空间。
.data
Array: .space 12 # 一个整数4字节,共三个整数
.text
main:
# save to register
addi $s0, $zero, 2
addi $s1, $zero, 4
addi $s2, $zero, 6
# register to memory
addi $t0, $zero, 0
sw $s0, Array($t0)
addi $t0, $t0, 4
sw $s1, Array($t0)
addi $t0, $t0, 4
sw $s2, Array($t0)
讲解:
前几步都是常规操作,将立即数2 4 6分别存入CPU的s0 s1 s2寄存器中。
接下来执行sw指令,其中会被拆分为lui addu sw指令
- lui指令将Array的内存地址取出,放置在1号寄存器的高16位上,现在1号寄存器的值为0x10010000。
- 将1号寄存器与8号寄存器的值相加,存入到1 号寄存器当中。
- 将16号寄存器(即s0寄存器)中的值存入基地址(0x00000000)偏移0x10010000后的值为地址的内存中。
如图:
后面,我们将t0寄存器的值每次+4,就可以以4字节为刻度,循环挨个读取三个整数并存取到内存中了。
关于数组在内存中的存储可以参考这篇文章:结构体名是不是结构体的首地址? - 高志远的个人主页
最终效果: