第七章 算术操作指令的实现

本章将实现MIPS32指令集架构定义的所有算数指令,共有21条,按照OpenMIPS实现这些指令的方式,可以分为三类,分别介绍如下:

(1)简单算数操作指令
共有15条,包括加法、减法、比较、乘法等指令,这些指令在流水线执行阶段都只需要一个时钟周期,而且实现思路很直观,与第4章添加逻辑操作指令类似,只需修改译码阶段的ID模块,执行阶段的EX模块,即可实现。
(2)乘累加、乘累减治令
共有4条:乘累加(madd)、无符号乘累加(maddu)、乘累减(msub)、无符号乘累减(msubu)。其中madd、maddu要求操作数相乘后,再与HI、LO寄存器的值相加,msub、msubu指令要求操作数相乘后,再与HI、LO寄存器的值相减。也就是说,这4条指令都要做两次运算,一次乘法,一次加(减)法,如果将这两次运算放在流水线执行阶段的一个时钟周期中完成,那么会使流水线的执行阶段所需要的时间明显增加,从而降低OpenMIPS工作时钟的频率,因此,OpenMIPS设计在流水线执行阶段使用两个时钟周期完成这类指令,一个时钟周期进行乘法,下一个时钟周期进行加(减)法。

(3)除法指令
共有2条:有符号除法(div)、无符号除法(divu)。OpenMIPS计划采用试商法运算,对于32位的除法,流水线执行阶段至少需要32个时钟周期。也就是说,除法指令需要多个时钟周期才能完成,所以单独作为一类。

7.1简单算数操作指令说明

简单算数操作指令一共有15条,具体包括add、addi、addiu、addu、sub、subu、clo、clz,slt,sltu,mul,mult,multu,各指令的格式及作用说明如下:

1.add,addu,sub,subu,slt,sltu指令
这6条指令的格式如图所示,这6条指令都是R类型指令,并且指令码都是6’b000000,即SPECIAL类。另外,第6-10bit都为0,需要依据指令中第0-5bit功能码的值进一步判断是哪一种指令。
在这里插入图片描述

  • 当功能码是6’b100000,表示add指令,加法运算
    指令用法为:add rd,rs,rt。
    指令作用为:rd <- rs + rt。将地址为rs的通用寄存器的值与地址为rt的通用寄存器的值进行加法运算,结果保存到地址为rd的通用寄存器中,但是有一

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值