zoukankan      html  css  js  c++  java
  • MIPS的寄存器、指令和寻址方式的分类

    MIPS的32个寄存器

    助记符 编号 作用
    zero 0 恒为0
    at 1 (assembly temporary)保留给汇编器使用
    v0,v1 2-3 (values)子程序返回,即函数调用时的返回值
    a0-a3 4-7 (arguments)子程序调用的前几个参数
    t0-t7 8-15 (temporaries)临时变量,子程序使用时无需保存
    t8-t9 24-25  
    s0-s7 16-23

    (saved)子程序寄存器变量:子程序写入时必须保存

    其值并在返回前恢复原值

    k0-k1 26-27 (Reserved for OS Kernel)保留给中断处理程序使用;其值可能在你眼皮子底下改变
    gp 28

    (globe pointer)全局指针;一些运行系统维护这个指针以便

    存取static和extern变量(全局变量)

    sp 29 (stack pointer)堆栈指针;指向栈顶的指针
    fp/s9 30 (frame pointer)第九个寄存器变量;需要的子程序可以用来做帧指针
    ra 31

    (return address)子程序的返回值

    MIPS的指令

     R型

    I型

    J型

    基本指令格式

    两点注意:

    1、移位指令是R型指令,但没有使用rs寄存器

    例如,sll  $t2,$s0,4   #reg $t2 = reg $s0 << 4 bits,其对应的机器语言是

    指令sll的opcode和funct字段都为0,rd为10(寄存器t2),rt为16(寄存器s0),shamt为4,rs字段没有使用,被置为0

    2、I型指令,rs为源寄存器,rt为目的寄存器

    机器码的解码

    比如,0Xaf8020这条机器指令对应的汇编语言是什么?

    1、转化成二进制

    0000 0000 1010 1111 1000 0000 0010 0000

    2、看opocde,即高6位,即26-31

    000 000,所以是R型指令

    清单一:opcode的含义表

    3、(只考虑基本指令格式,不考虑浮点指令格式)如果opcode=000000表示R型指令,还需要结合funct字段才能判断出指令类型。而I型、J型直接从opcode就能判断出来。

    清单二:R型的funct含义表

    MIPS寻址方式

    • 模式3是基址偏移量寻址,例如lw和sw,是将16位地址字段做符号扩展成32位与PC相加
    • 模式4是PC相对寻址,将16位地址左移2位与PC(已更新为PC+4)相加。为什么要左移2位?16位偏移量左移2位以指示以字为单位的偏移量,这样做将偏移量能表示的有效范围扩大了4倍。其次,16位地址看作有符号数,一般在流水线设计时,先将16位地址符号扩展成32位,然后左移2位,再与PC相加
    • 模式5是伪直接寻址,把26位地址左移2位与PC高4位相连。这里的26位地址是无符号的,PC是加4之后的,在流水线设计中,就是将PC+4的高4位、26位地址、末尾00拼接成32位跳转目标

    参考链接:

    1、http://www.cnblogs.com/junuh/archive/2009/06/12/1502030.html

    2、https://blog.csdn.net/qq_32146369/article/details/79006728

    3、https://zhuanlan.zhihu.com/p/38534417

  • 相关阅读:
    SpringMVC开发环境搭建
    SpringMVCRestful
    SpringMVC源码执行流程
    SpringMVC域对象数据输出
    SpringMVC请求参数
    Object类常用方法
    五大浏览器
    jinja2的学习之路
    嚣张过后之解决问题篇(无果)
    嚣张狂妄的经历之二(应聘infosys的teamleader)
  • 原文地址:https://www.cnblogs.com/lfri/p/10165353.html
Copyright © 2011-2022 走看看