mips体系结构下的汇编指令
指令集是存储在CPU内部,对CPU运算进行指导和优化的硬程序。拥有这些指令集,CPU就可以更高效地运行。
Mips汇编语言的风格
汇编语言指令格式
[标签:] 操作符 [操作数] [#注释]
- 标签: (可选)
- 标记内存地址, 必须跟
冒号
- 通常在数据和代码段出现
- 操作符
- 定义操作 (比如 add, sub, 等)
- 操作数
- 指明操作需要的数据
- 操作数可以是寄存器,内存变量或常数
- 大多数指令有3个操作数
|
|
xxx:—— 定义代码的人口点和命名数据段的存储段
程序结构
汇编语言的程序结构,为数据声明+代码段+数据段(文件后缀为.s,或者.asm也行),数据声明在代码段之后(其实在其之前也没啥问题,也更符合高级程序设计的习惯)
数据声明
数据段以 .data为开始标志
声明变量后,即在主存(RAM)中分配空间。
|
|
代码段:
- 代码段以 .text为开始标志
- 其实就是各项指令操作
- 程序入口为main:标志(这个都一样啦)
- 程序结束标志(详见下文)
其他:
- .data //数据段
- .text //代码段
- .globl //全局符号声明
- .align 0 //关闭所有的自动对齐
- .asciiz //字符串(带终止符)
寄存器
32个通用寄存器:
MIPS的寄存器约定,一种32个寄存器
0 zero: 总返回0
1 at: (汇编暂存寄存器)为汇编保留
2-3 v0、v1:存放子函数调用返回结果,还可用于表达式求值
4-7 a0 - a3:存放向子函数传递的参数
8-15 t0- t7:存放临时运算结果,在发生函数调用时不必保存它们的内容
24,25 t8-t9:
16-23 s0 - s7:存放局部变量,在发生函数调用时一般要保存它们的内容
26,27 k0, k1:为中断/陷入处理保留,你也可以改变
28 gp:全局指针
29 sp: 栈(stack)指针
30 s8/fp: 帧(frame)指针
31 ra: