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.2. 3种指令中各字段的含义

1.3. 各指令的 OP 字段的编码/解码表
op=000000:R-Typeop=000010/000011:J-Typeop=others:I-Type

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

1.5. MIPS 寻址方式
I-Type:- 基址或变址
- 相对寻址
J-Type:- 伪直接寻址
MIPS 寻址方式由 op 字段确定。

1.6. 二进制与汇编间的转换举例
举例:指令二进制码转汇编形式:

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

1.7. 运算指令
MIPS没有标志位。

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

1.8. 数据传送指令

数据传送指令举例:


1.9. 跳转指令
-
MIPS中
jr相当于call指令,jal相当于ret指令。 -
MIPS中只有等于和不等于两种分支跳转指令。

举例:



2. 寄存器
32个已编号的寄存器,3个特殊寄存器HI、LO、PC。

32个寄存器的功能定义:

3. 存储器

4. 过程调用
示例与问题:

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

4.2. MIPS的栈
- 没有
push和pop指令。

4.3. MIPS过程调用中寄存器的约定
被调用者需要保存的寄存器:
$ra返回地址寄存器$s0~$s7保存寄存器
调用者需要保存的寄存器:
$a0~$a3参数寄存器$fp帧指针寄存器(栈底寄存器)$t0~$t9临时寄存器
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OOyeZZLX-1611829543235)(简单入门-MIPS/24.png)]](https://i-blog.csdnimg.cn/blog_migrate/c3e0a332dc4fdef6c055f2ec36867a30.png#pic_center)

示例一:


示例二:



本文介绍了MIPS指令结构、OP字段编码、寻址方式、二进制与汇编转换、运算与数据传送指令,重点讲解了过程调用中的寄存器约定和栈使用。适合初学者快速理解MIPS架构。
1285

被折叠的 条评论
为什么被折叠?



