Registers 寄存器
1.一共有32个general register
2.有两种使用方法: 直接使用对应的编号或者是对应的寄存器名称
寄存器编号 | 寄存器名称 | 寄存器用途 |
---|---|---|
0 | zero | return 0 |
1 | $at | 汇编保留寄存器 |
2-3 | $v0-$v1 | (value)存储表达式或者是函数的返回值 |
4-7 | $a0-$a3 | (Argument) 存储子程序前四个参数,调用时不保存 |
8-15 | $t0-$t7 | 临时变量,调用时不保存,调用完成后要恢复 |
16-23 | $s0-$s7 | 函数调用的时候必须保存,调用完成后需要恢复 |
24-25 | $t8-$t9 | 属性和$t0-$t7一致 |
26-27 | $k0-$k1 | (kernel)中断函数返回值 |
28 | $gp | global pointer 指向64K大小的静态数据块的中间地址 |
29 | $sp | stack pointer |
30 | $fp/$s8 | frame pointer |
31 | $ra | return address |
Program Structure 程序结构
本质其实就只是数据声明+普通文本+程序编码(文件后缀为.s,或者.asm也行) 数据声明在代码段之后(其实在其之前也没啥问题,也更符合高级程序设计的习惯)
Data Declarations 数据声明
数据段以 .data为开始标志
声明变量后,即在主存中分配空间。
Code 代码
代码段以 .text为开始标志
其实就是各项指令操作
程序入口为main:标志
程序结束标志(详见下文)
模板
1 | .data # 数据变量声明 |
数据声明
example
var1: .word 3
array: .byte ‘a’,’b’ # 声明一个存储两个字符的数组array1,并赋值’a’,’b’
array1: .space 40 #为变量array2 分配40个未使用的连续空间
其他指令汇总
实战-冒泡排序
1 |
|