美文网首页
简单入门 MIPS

简单入门 MIPS

作者: dounine | 来源:发表于2020-07-28 19:52 被阅读0次

    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.png

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

    2.png

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

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

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

    4.png

    1.5. MIPS 寻址方式

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

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

    5.png

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

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

    7.png

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

    8.png

    1.7. 运算指令

    MIPS没有标志位。

    12.png

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

    13.png

    1.8. 数据传送指令

    14.png

    数据传送指令举例:

    15.png 16.png

    1.9. 跳转指令

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

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

    17.png

    举例:

    18.png 19.png 20.png

    2. 寄存器

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

    10.png

    32个寄存器的功能定义:

    6.png

    3. 存储器

    11.png

    4. 过程调用

    示例与问题:

    21.png

    4.1. MIPS的过程调用

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

    4.2. MIPS的栈

    • 没有 pushpop 指令。
    23.png

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

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

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

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

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

    示例一:

    26.png 27.png

    示例二:

    28.png 29.png 30.png

    相关文章

      网友评论

          本文标题:简单入门 MIPS

          本文链接:https://www.haomeiwen.com/subject/xkeqrktx.html