电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

MIPS指令集及汇编完全解析

22页
  • 卖家[上传人]:Baige****0346
  • 文档编号:266123112
  • 上传时间:2022-03-14
  • 文档格式:DOCX
  • 文档大小:2.52MB
  • / 22 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、 MIPS指令集及汇编完全解析 MIPS指令集及汇编由于本人最近在看底层操作系统与汇编的有关书籍,故写此博文总结,以便后续本人及感兴趣朋友阅读。如有错误恳请指出,一起学习,一起进步!目录MIPS指令集及汇编一、MIPS简介:二、MIPS体系结构1.寄存器特点:2.整数乘法单元和寄存器3.寻址方式4.存储器和寄存器中的数据类型三、MIPS指令与汇编1.指令格式2.寻址方式3.指令系统四、杂记(MIPS计算机硬件对函数调用(过程)的支持)1.为新数据分配空间2.MIPS 程序和数据的存储器空间使用约定一、MIPS简介:1.MIPS为美国芯片设计公司,它采用的是精简指令系统计算结构(RISC结构)(与之对应的:(复杂指令集)CISC结构)。MIPS架构的产品多见于工作站(索尼PS2的Emotion Engine处理器)。RISC比CISC的设计更加简单,由于其授权费用低,被INTEL外的大多数厂商使用。同时在设计理念上MIPS强调软硬件协同提高计算机性能,并简化硬件设计。2.MIPS 是最早的,最成功的RISC处理器之一,源于Stanford 大学的John Hennessy 教授的研究成果

      2、。(Hennessy 于1984年在硅谷创建了MIPS公司)。MIPS是(Microcomputer without interlocked pipeline stages)的缩写,含义是无互锁流水级微处理器。3.MIPS的指令系统经过通用处理器指令体系MIPS I、 MIPS II、MIPS III、MIPS IV到MIPS V,嵌入 式指令体系MIPS16、MIPS32到MIPS64的发展 已经十分成熟。应用广泛的32位MIPS CPU包括R2000,R3000 其ISA都是MIPS I,另一个广泛使用的、含有许多 重要改进的64位MIPS CPU R4000及其后续产 品,其ISA版本为MIPS III。龙芯2E微处理器是一款实现64位MIPS指令集的通用 RISC处理器,与X86指令架构互不兼容;芯片面积 6.8mm5.2mm;最高工作频率为1GHz;实测功耗5-7瓦。由于与X86指令的不 兼容,龙芯2E无法运 行现有的Windows 32/64位操作系统, 和基于Windows的 众多应用软件。 龙芯2E芯片二、MIPS体系结构1.寄存器特点:MIPS 包含32个通用寄存器

      3、($0-$31均为32 位), 硬件没有强制性的指定寄存器 使用规则,但是在实际使用 中,这些寄存器的用法都遵循 一系列约定,寄存器约定用法引入了一系列 的寄存器约定名。在使用寄存 器的时候,要尽量用这些约定名或助记符,而不直接引用寄 存器编号。(1)两个特殊寄存器:$0:不管你存放什么值,其返回值永远是零。$31:永远存放着正常函数调用指令(jal)的返回地址。(2)$at :由编译器生成的复合指令使用,(3)$v0, $v1:用来存放一个子程序 (函数) 的非浮点 运算的结果或返回值。如果这两个寄存器不够存放 需要返回的值,编译器将会通过内存来完成。(4)$ a0-a3:用来传递子函数调用时前4个非 浮点参数。(5)$ t0-t9:依照约定,一个子函数可以不用保 存并随便的使用这些寄存器。在作表达式计算时,这些寄存器是非常好的暂时变量。当调用一个子函数时,这些寄存器中的 值有可能被子函数破坏掉。所以也是最不安全的。(6)$ s0-s8:依照约定,子函数必须保证当函数返回时这些寄存器的内 容必须恢复到函数调用以前的值, 或者在子函数里不用这些寄存器或把它们保存 在堆栈上并在函数退出时

      4、恢复。 这种约定使得这些寄存器非常适合作为寄存器变量、 或存放一些在函数调用期间必须保存的原来的值。(类比:x86汇编中的函数序言和函数尾声)(7)$ k0, k1:被OS的异常或中断处理程序使 用。被使用后将不会恢复原来的值。因此它 们很少在别的地方被使用。(8)$gp:如果存在一个全局指针,它将指向运行时决定 的静态数据(static data)区域的一个位置。这意味 着,利用gp作基指针,在gp指针32K左右的数 据存取,系统只需要一条指令就可完成。该指令如图:如果没有全局指针,存取一个静态数据区域 的值需要两条指令:一条是获取有编译器和loader决定好的32位的地 址常量。另外一条是对数据的真正存取。为了使用$ gp, 编译器在编译时刻必须知道 一个数据是否在$ gp的64K(上下32k)范围之内。并不是所有的编译和运行系统支持gp的使用。(9)$ sp:堆栈指针的上下需要显 式的通过指令来实现。因此 MIPS通常只在子函数进入和 退出的时刻才调整堆栈的指针。 这通过被调用的子函数来实现。SP通常被调整到这个被调用 的子函数需要的堆栈的最低的 地方,从而编译器可以通过相 对於

      5、sp的偏移量来存取堆栈上 的堆栈变量。(10)$ fp(另外的约定名是s8):fp作为框架指针可以被函数用来记录堆栈的情况,在一 个过程中变量相对于函数指针的偏移量是不变的。(相对地址)一些 编程语言显示的支持这一点。汇编编程员经常会利用fp的 这个用法。C语言的库函数 alloca()就是利用了fp来动态 调整堆栈的。 注意:如果堆栈的底部 在编译时刻不能被决 定,你就不能通过$ sp 来存取堆栈变量,因此 $ fp被初始化为一个相 对于该函数堆栈的一个 常量的位置。 这种用法对其他函数可 以是不可见的。(11)$ ra:当调用任何一个子 函数时,返回地址存放 在ra寄存器中,因此通常 一个子程序的最后一个 指令是: jr ra .子函数如果还要调用其 他的子函数,必须保存ra 的值,通常通过堆栈。(12)其他方面:MIPS里没有状态码。CPU状态寄存器或内 部都不包含任何用户程序计算的结果状态信息。hi 和 lo 是与乘法运算器相关的两个寄存器,是用来存放结果的地方。 它们并不是通用寄存器,除了用在乘除法之 外,也不能有做其他用途。 MIPS里定义了一些指令可以往hi和lo里存入任

      6、 何值。浮点运算协处理器 (浮点加速器,FPA),如果存在的 话,有32个浮点寄存器。按汇编语言的简单约定讲, 是从$f0到$f31。实际上,对於MIPS I和MIPS II的机器,只有16个偶数号的寄存器可以用来做数学计算。当然,它们可以既 用来做单精度(32位)和双精度(64位)。当你做一个双精度的运算时,寄存器$f1存放$f0的余数。奇数号的寄存器只用来作为寄存器与FPA之间的数据传送。MIPS III CPU有32个FP寄存器。但是为了保持软件与 过去的兼容性,最好不要用奇数号的寄存器。对比一下x86寄存器结构:寄存器约定小结:2.整数乘法单元和寄存器MIPS体系结构认为乘法非常重要,应该用硬件实现乘法指令,这在RISC CPU中并不常见。乘法结果寄存器是互锁的:只有在整数乘法 运算完成,得到完整的结果后,才能读取结 果寄存器。牺牲速度以换取执行简单和节省芯片空间。3.寻址方式只有加载或存储指令可以访问存储器。存储器的寻址方式为 基址-偏移寻址(存储单元的地址是某个寄存 器与指令中的偏移量之和)。4.存储器和寄存器中的数据类型MIPS CPU的一次操作可读出或写入18个字节的数

      7、据,*MIPS编译器提供了64位指针,它把long解释成64位数 据,总之long不应该小于int 。三、MIPS指令与汇编1.指令格式对于一条汇编语言指令来说,有两个问题要解决:o 要指出进行什么操作o 要指出大多数指令涉及的 操作数 和 操作结果 放在何处操作数在MIPS中字(4个字节)的地址必须是4的倍数,存取数据时可以避免一个数据分两次存取。MIPS有三种指令格式:(所有指令都是32 位长) (1)R-型 指令:一条32位的MIPS R型指令按下表bit数划分为 6个字段:6 + 5 + 5 + 5 + 5 + 6 = 32bit6 5 5 5 5 6实例: add $8, $17, $18 # $8 = $17 + $18第一个操作数是寄存器$17,第二个寄存器是$18,目的寄存器结果是$8.该指令没有移位。因为,加法是运算指令,指令操作类型码op是0,funct是32。所以格式是:0$ 17$18$ 8032(2)I-型 指令一条32位的MIPS I型指令 按下表bit数划分为4 个字段: 6 + 5 + 5 + 1 6 = 32bit6 5 5 16I-型指令分类:装入/

      8、存储指令、分支指令和 立即数运算指令数据装入:Rt = MemRs + Address数据存储:MemRs + Address = Rt实例: lw $s1, 100($s2) # 暂时寄存器 $s1=Ai,并假设Astart= 100第一个操作数是寄存器 $s2 , 第二个操作数是寄存器$s1 ; 数组的起始地址是Astart, 称为表头地址.所以这条指令的格式是:35$s2$s1100分支指令: if (Rs Rt) goto (PC+4) + Address (PC 为程序计数器,指向当前执行的指令)分支指令采用的寻址方式为 PC相对寻址 分支 目标的地址是 (PC+4)(下一条指令的地址)与指令中的偏移量之和立即数运算指令 : addi $21, $22, -50 (立即数 可以为十进制) # 将 $22 与 -50 相加 ,并将结果保存在 $21 中。所以这条指令的格式是:8$22$21-50(3) J-型 指令:一条32位的MIPS J型指令 按下表bit数划分为 2 个字段: 6 + 26 = 32bit6 26操作码 目标地址2.寻址方式(1)寄存器寻址:MIPS算术运

      9、算指令的操作数必须从32个32位寄存器中选取实例:(2)立即数寻址:以常数作为操作数,无须访问存储器就可以使用常数。 因为常数操作数频繁出现,所以在算术指令中加入常数字段,比从存储器中读取常数快得多。实例:addi $sp, $sp, 4(常数) # $ sp =$ sp + 4小问题:怎么样将一个32 位的常数装入寄存器 $s0 中 呢?(分两次装入,先装入高16位,在装入低16 位) 如图:0000 0000 0011 1101(高16位) 0000 1001 0000 0000 (低16位)61 2304(3)基址或偏移寻址:操作数在存储器中,且存储器地址是某寄存器与指令中某常量的和。实例:Lw $t0, 8 ($ s0 ) # $s0 中装的是存储器中的地址(4)PC相对寻址实例:条件分支指令 bne $s0, $s1, Exit #如果 $s0不等于 $s1,则跳转到 ExitPC = PC + 分支地址问题1:为什么选PC寄存器?因为几乎所有的条件分支指令都是跳转到附近的地址。问题2:如何处理16位无法表达的远距离分支?插入一个无条件跳转到分支目标地址的指令,把分支 指令中的条件变反以决定是否跳过该指令。(5)伪直接寻址:跳转地址= PC中原高4位 + 指令中的26位 + 00 (32位地址)寻址方式总览:3.指令系统(1)数据传送指令

      《MIPS指令集及汇编完全解析》由会员Baige****0346分享,可在线阅读,更多相关《MIPS指令集及汇编完全解析》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    监控施工 信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.