简单入门 MIPS


title: 简单入门 MIPS
date: 2020-05-27 09:20:42


0. 前言

long long ago,接到一个 x86-64 转 MIPS64 的项目,最近开始。

先简单学习一下 MIPS32 。

参考:bilibili - 计算机组成原理(MIPS汇编语言) 袁春风 | 南京大学

1. 指令

1.1. MIPS指令概览

  • 所有指令都是4字节,指令的地址都是4的倍数。

  • 只有3种指令格式。

1

1.2. 3种指令中各字段的含义

2

1.3. 各指令的 OP 字段的编码/解码表

  • op=000000: R-Type
  • op=000010/000011: J-Type
  • op=others: I-Type

3

1.4. R-Type 指令中,func 字段的编码/解码表

4

1.5. MIPS 寻址方式

  • I-Type
    • 基址或变址
    • 相对寻址
  • J-Type
    • 伪直接寻址

MIPS 寻址方式由 op 字段确定。

5

1.6. 二进制与汇编间的转换举例

举例:指令二进制码转汇编形式:

7

举例:汇编形式转成二进制码:

8

1.7. 运算指令

MIPS没有标志位。

12

运算指令举例(若立即数大于16位,会有专门的指令去处理):

13

1.8. 数据传送指令

14

数据传送指令举例:

15

16

1.9. 跳转指令

  • MIPS中 jr 相当于 call 指令,jal 相当于 ret 指令。

  • MIPS中只有等于和不等于两种分支跳转指令。

17

举例:

18

19

20

2. 寄存器

32个已编号的寄存器,3个特殊寄存器HILOPC

10

32个寄存器的功能定义:

6

3. 存储器

11

4. 过程调用

示例与问题:

21

4.1. MIPS的过程调用

  • jr 相当于 call 指令,jal 相当于 ret 指令。
  • 参数放在 $a0~$a3 寄存器中,返回值放在 $v0~$v1 寄存器中,多余的放在栈上。
  • 返回地址放在 $ra 即31号寄存器中。

22

4.2. MIPS的栈

  • 没有 pushpop 指令。

23

4.3. MIPS过程调用中寄存器的约定

被调用者需要保存的寄存器:

  • $ra 返回地址寄存器
  • $s0~$s7 保存寄存器

调用者需要保存的寄存器:

  • $a0~$a3 参数寄存器
  • $fp 帧指针寄存器(栈底寄存器)
  • $t0~$t9 临时寄存器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OOyeZZLX-1611829543235)(简单入门-MIPS/24.png)]

25

示例一:

26

27

示例二:

28

29

30

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dounineli

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值