type
status
date
slug
summary
tags
category
icon
password
Property
Aug 13, 2023 04:21 AM
寄存器:
名称 | 寄存器号 | 用途 | 调用时是否保存 |
$zero | 0 | 常数0 | n.a |
$at | 1 | 保留给汇编器使用,或者作为临时寄存器 | 否 |
v0~v1 | 2~3 | 计算结果和表达式求值 | 否 |
a0~a3 | 4~7 | 参数 | 否 |
t0~t7 | 8~15 | 临时变量 | 否 |
s0~s8 | 16~23 | 保存的寄存器 | 是 |
t8~t9 | 24~25 | 更多临时变量 | 否 |
$gp | 28 | 全局指针 | 是 |
$sp | 29 | 栈指针 | 是 |
$fp | 30 | 帧指针 | 是 |
$ra | 31 | 返回地址 | 是 |
指令格式:
- op: 指令的基本操作,通常称为操作码(opcode)
- rs:第一个源操作数寄存器
- rt:第二个源操作数寄存器
- Rd:用于存放操作结果的目的寄存器
- shamt:位移量
- funct:功能
R-Format(Register)
Op-Code | Rs | Rt | Rd | shamt | Func |
6 | 5 | 5 | 5 | 5 | 6 |
I-Format(Immediate)
Op-Code | Rs | Rt | 16 - Bit Immediate Value |
6 | 5 | 5 | 16 |
J-Format(Jump)
Op-code | 26 Bit Current Segment Adress |
6 | 26 |
内存空间:
寻址方式:
- 立即数寻址 - I:操作数是位于指令自身中的常数
- 寄存器寻址 - R:操作数是寄存器
- 基寻址址或偏移寻址 - I:操作数在存储器中,其地址是指令中寄存器与常数的和
- PC相对寻址 - I:地址是PC+4与指令中常数的和
- 伪直接寻址 - J:跳转地址与指令中的26位字段和PC的高位拼接而成
数据定义:
- 在MIPS汇编语言中,数据定义是用来声明数据的类型和存储空间的指令。
- 可能会有选择的位数据分配名字(标签)
- 语法:
- 所有的初始值在内存中以二进制存储
- 可以类比数据类型
数据伪指令
伪指令 | 功能 |
.BYTE | 以八位字节存储数值表 |
.HALF | 以16位半字长存储数值表 |
.WORD w:n | 将32位树枝w存入n个边界对齐的连续的字中 |
.FLOAT | 以单精度浮点数存储数值表 |
.DOUBLE | 以双精度浮点数存储数值表 |
.ASCII | 为一个ASCII字符串分配字节序列 |
.ASCIIZ | 与.ASCII相似,字符串末尾增加NULL |
.SPACE n | 为数据段中n个未初始化的字节分配空间 |
如果初始值超过了值域上限汇编程序会报错
系统调用:
- 程序通过系统调用实现输入/输出
- mips提供一条特殊的syscall指令
- 从操作系统获取服务
- 使用syscall系统服务
- 从$v0寄存器中读取服务数
- 从$a0, $a1等寄存器中读取参数(如果有)
- 发送syscall指令
- 从结果寄存器中取回返回值(如果有)s
- syscall服务:
程序模板:
实例:
下边的例子一定要看懂
1.
2.
3.
- 作者:GJJ
- 链接:https://blog.gaojj.cn/article/blog-76
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。