学习思考
🩹mips汇编
00 分钟
2023-4-19
2023-8-13
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

内存空间:

寻址方式:

  1. 立即数寻址 - I:操作数是位于指令自身中的常数
  1. 寄存器寻址 - R:操作数是寄存器
  1. 基寻址址或偏移寻址 - I:操作数在存储器中,其地址是指令中寄存器与常数的和
  1. PC相对寻址 - I:地址是PC+4与指令中常数的和
  1. 伪直接寻址 - 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.


评论
Loading...