系统结构:不同地址数据指令的访存次数


1、写在前面的话

开门见山,这篇博客主要讲下不同地址数据指令的访存次数是怎么计算的,其实是计算机系统结构课的第三次homework。


2、三地址双操作数指令

三地址双操作数指令有3个显地址,其中,有两个源操作数地址,一个目标地址。指令执行后,不会破坏任一个操作数。

执行一条三地址的加法指令需要访问4次主存。第一次从主存中取指令,第二、三次从主存中取操作数,第四次将结果保存到主存单元中。

课本源码分析

MUL A, B, X
ADD X, C, X
SUB X, D, X
ADD E, F, Y
DIV X, Y, X

共有5条三地址指令,每条指令需要4次访存,执行此程序共需要访存20次。


3、二地址双操作数指令

二地址双操作数指令有两个显地址,第一个操作数地址同时兼作结果存放地址。

执行一条二地址的加法指令同样需要访问4次主存。第一次从主存地址中取指令,第二、三次从主存地址中取操作数,第四次将加法结果存放到主存单元中。

课本源码分析

MOV X, A
MUL X, B
ADD X, C
SUB X, D
MOV Y, E
ADD Y, F
DIV X, Y

共有7条二地址指令,MOV指令执行一次3次访存(读指令,读一次操作数,写一次操作数),算术运算指令4次访存,执行此程序共访存2 * 3 + 5 * 4 = 26次。


4、一地址双操作数指令

一地址双操作数指令只有一个显地址,参加运算的另一个操作数来自累加器寄存器Acc。

执行一条一地址的加法指令只需要访问两次主存,第一次从主存单元中取指令,第二次从主存单元中取操作数。由于第一操作数和运算结果都放在累加器寄存器中,所以读取第一操作数和存放加法的结果都不需要访问主存。

课本源码分析

LOAD E
ADD F

STORE X
LOAD A
MUL B
ADD C
SUB D
DIV X
STORE X

共需要9条一地址指令,每条指令2次访存,执行此程序共访存9 * 2 = 18次。


5、零地址双操作数指令

零地址双操作数指令中只有操作码字段,操作数地址都是隐含的。操作数在堆栈的栈顶位置和次栈顶位置,它们分别从堆栈中弹出,送到运算器中进行运算,运算的结果再压入堆栈。执行一条零地址的加法指令访问主存的次数取决于堆栈的结构。

课本源码分析

PUSH A
PUSH B
MUL
PUSH C
ADD
PUSH D
SUB
PUSH E
PUSH F
ADD
DIV
POP X

共需要12条执行,其中7条一地址的进、出栈指令,5条零地址的算术运算指令。
进、出栈指令3次访存,算术逻辑指令4次访存,执行程序共访存7 * 3 + 5 * 4 = 41次。


6、二地址R型指令

课本源码分析

MOVE R1, A  ; 2次
MUL R1, B   ; 2次
ADD R1, C   ; 2次
SUB R1, D   ; 2次
MOVE R2, E  ; 2次
ADD R2, F   ; 2次
DIV R1, R2  ; 0次
MOVE X, R1  ; 3次

6 * 2 + 3 = 15次。


  • 17
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
在RISC-V架构中,数据访存指令可以分为两类:访问字节(8位)、半字(16位)、字(32位)和双字(64位)的指令和访问原子操作的指令。 1. 访问字节、半字、字和双字的指令包括: - LB(Load Byte):将一个字节加载到寄存器中; - LH(Load Half-word):将一个半字(16位)加载到寄存器中; - LW(Load Word):将一个字(32位)加载到寄存器中; - LD(Load Double-word):将一个双字(64位)加载到寄存器中; - LBU(Load Byte Unsigned):将一个无符号字节加载到寄存器中; - LHU(Load Half-word Unsigned):将一个无符号半字(16位)加载到寄存器中; - LWU(Load Word Unsigned):将一个无符号字(32位)加载到寄存器中; - SB(Store Byte):将一个字节存储到存储器中; - SH(Store Half-word):将一个半字(16位)存储到存储器中; - SW(Store Word):将一个字(32位)存储到存储器中; - SD(Store Double-word):将一个双字(64位)存储到存储器中。 2. 访问原子操作的指令包括: - LR.W(Load-Reserved Word):将一个字(32位)加载到寄存器中,并将地址标记为已保留; - SC.W(Store-Conditional Word):如果地址未被修改,则将一个字(32位)存储到存储器中; - AMOADD.W(Atomic Memory Operation Add Word):原子地将一个字(32位)加到存储器中的值中,并将结果存储到寄存器中; - AMOSWAP.W(Atomic Memory Operation Swap Word):原子地将一个字(32位)存储到存储器中,并将存储器中原来的值存储到寄存器中; - AMOXOR.W(Atomic Memory Operation XOR Word):原子地将一个字(32位)与存储器中的值进行异或操作,并将结果存储到寄存器中; - AMOAND.W(Atomic Memory Operation AND Word):原子地将一个字(32位)与存储器中的值进行与操作,并将结果存储到寄存器中; - AMOOR.W(Atomic Memory Operation OR Word):原子地将一个字(32位)与存储器中的值进行或操作,并将结果存储到寄存器中; - AMOMIN.W(Atomic Memory Operation MIN Word):原子地将一个字(32位)与存储器中的值进行比较,存储较小的值到存储器中,并将结果存储到寄存器中; - AMOMAX.W(Atomic Memory Operation MAX Word):原子地将一个字(32位)与存储器中的值进行比较,存储较大的值到存储器中,并将结果存储到寄存器中; - AMOMINU.W(Atomic Memory Operation MINU Word):原子地将一个无符号字(32位)与存储器中的值进行比较,存储较小的值到存储器中,并将结果存储到寄存器中; - AMOMAXU.W(Atomic Memory Operation MAXU Word):原子地将一个无符号字(32位)与存储器中的值进行比较,存储较大的值到存储器中,并将结果存储到寄存器中。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学不懂啊阿田

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值