MIPS汇编基础
寄存器
- 共 32 个通用寄存器。
- 汇编语言中,寄存器总以美元符号
$
为前缀。 - 寄存器有 2 种寻址方式:
- 使用寄存器编号,例如
$ 0
到$ 31
; - 使用别名,例如
$ t1
,$ sp
。
- 使用寄存器编号,例如
- 特殊寄存器
Lo
和Hi
用于存储乘法和除法的结果,不能直接寻址,- 使用特殊指令
mfhi
(move from hi = 从 Hi 移动 )和mflo
( 从 Lo 移动 )访问内容。
- 使用特殊指令
- 栈从高到低生长。
程序结构
- 本质上就是带有数据声明的纯文本文件,文件后缀应为
.s
或者.asm
。 - 数据声明在前,代码在后。
数据声明
- 数据声明以
.data
为标号。 - 声明后即在主存中分配空间。
- 声明格式如下:
name:storage_type value(s)
value(s)
用于给出初值,.space
,给出空间大小(以字节为单位),例如:
var1:.word 3 # 创建一个初始值为 3 的整数变量.
array1:.byte'a','b' # 创建一个元素初始化为 a 和 b的 2 元字符数组.
array2:.space 40 # 分配 40 个连续字节, 未初始化的空间可以用作 40 个元素的字符数组,
# 或者是 10 个元素的整数数组.
代码
- 代码以
.text
为标号。 - 程序入口为
main
。
注释
#
表示单行注释。
模板
MIPS 汇编语言程序模板如下:
# Comment giving name of program and description of function
# Template.s
# Bare-bones outline of MIPS assembly language program
.data # variable declarations follow this line
# ...
.text # instructions follow this line
main: # indicates start of code (first instruction to execute)
# ...
# End of program, leave a blank line afterwards to make SPIM happy
指令
- MIPS指令是 4 字节定长。
- 1 字节 = 8 位,半字长 = 2 个字节,1 字长 = 4 个字节
- 1 个字符占 1 字节
- 1 个整型占 1 字长
- 常量
- 直接输入数字,例如 4;
- 单字符用单引号,例如:'b’;
- 字符串用双引号,例如:“string”。
Load/Store
- 只能使用 load/store 访问内存;
- 其他指令只能使用寄存器参数。
算术指令
- 最多有 3 个参数。
- 操作数只能是寄存器,不能是内存地址(因为只有 load/store 能访问内存)。
- 操作数大小为 1 个字。
参考链接:
https://www.cnblogs.com/thoupin/p/4018455.html
https://www.bookstack.cn/read/CTF-All-In-One/doc-1.5.2_assembly.md#3.6%20MIPS%E6%B1%87%E7%BC%96%E5%9F%BA%E7%A1%80