汇编bne指令_常⽤指令的执⾏流⽔线
常⽤五类指令:运算指令、LOAD指令、STORE指令、条件转移指令、⽆条件转移指令。
⼀、运算类指令
注:Rs指源操作数(source);Rd指⽬的操作数(destination)。
运算类指令指令的汇编格式功能说明
加法指令(两个寄存器相加)ADD  Rs,Rd(Rs)+(Rd)→Rd
加法指令(寄存器与⽴即数相加)ADD  #1,Rd1+(Rd)→Rd
算术左移SHL  Rd(Rd)<<<2→Rd
IF:根据PC从指令Cache取指令⾄IF段的锁存器。
ID:取出操作数⾄ID段锁存器。
EX:运算,将结果存⼊EX段锁存器。
M:空段
WB:将结果写回寄存器
对于RSIC来说,只有LOAD和STORE指令可以访存,所有运算类指令的操作数只能来⾃寄存器或⽴即数。运算得到的结果也是存回寄存器中。所以对于RISC在访存阶段运算类指令是不需要做任何操作,但时间必须要消耗,为了⽅便流⽔线的安排,会让所有指令都经历相同的阶段,即使某个阶段空闲。
⼆、LOAD指令
指令的汇编格式功能说明
LOAD  Rd,1(Rs)(1+(Rs))→Rd
或LOAD  Rd,mem(mem)→Rd
IF:根据PC从指令Cache取指令⾄IF段的锁存器。
ID:将基址寄存器的值(Rs)放到锁存器A,将偏移量的值(指令中指明的⽴即数,如1)放到Imm锁存器中。
EX:运算,将偏移量和基址相加(1+(Rs))得到有效地址EA。
M:根据EA从数据Cache中取数并放⼊锁存器。
WB:将取出的数写回寄存器。
三、STORE指令
指令的汇编格式功能说明
STORE  Rs,1(Rs)Rs→(1+(Rd))
或STORE  Rs,mem Rs→(mem)
IF:根据PC从指令Cache取指令⾄IF段的锁存器。
ID:将基址寄存器的值(Rd)放到锁存器A,将偏移量的值(指令中指明的⽴即数,如1)放到Imm锁存器中。将要存的数放到锁存器B。EX:运算,将偏移量和基址相加(1+(Rs))得到有效地址EA。并将锁存器B的内容放到锁存器Store。
M:根据EA将锁存器Store中的数据写⼊Cache。
WB:空段。
四、条件转移类指令
注:转移类指令通常采⽤相对寻址。
指令的汇编格式功能说明
beq  Rs,Rt,#偏移量若(Rs)==(Rt),则(PC)+指令字长+(偏移量*指令字长)→PC;否则(PC)+指令字长→PC
bne  Rs,Rt,#偏移量若(Rs)!=(Rt),则(PC)+指令字长+(偏移量*指令字长)→PC;否则(PC)+指令字长→PC
IF:根据PC从指令Cache取指令⾄IF段的锁存器。
ID:将进⾏⽐较的两个数放⼊锁存器A和B;偏移量放⼊Imm。
EX:通过ALU的计算得到A和B的⽐较结果,将⽐较结果放⼊EX段的锁存器中。
M:将⽬标PC值写回PC。
经过EX的处理后就能知道条件是否满⾜,根据条件是否满⾜来决定PC的值,对于条件转移类指令来说在访存阶段不会访存,⽽是直接修改寄存器PC的值,也就是说修改PC的值并不是在写回阶段,写回阶段通常是写回通⽤寄存器。
WB:空段。
很多教材把写回PC的功能段称为“WrPC段”,其耗时⽐M段更短,因此可以安排在M段时间内完成。
五、⽆条件转移指令
注:转移类指令通常采⽤相对寻址
指令的汇编格式功能说明
jmp  #偏移量(PC)+指令字长+(偏移量*指令字长)→PC
IF:根据PC从指令Cache取指令⾄IF段的锁存器。
ID:将偏移量放⼊Imm。
EX:
由于⽆条件转移指令不⽤判断转移条件,所以⽤不到运算器ALU。⽽是会直接根据偏移量把⽬标的PC值直接写回PC中,直接进⾏转移。WrPC功能段也⽐EX段执⾏时间短,所以将WrPC段安排在EX段执
⾏。
注:WrPC段越早执⾏就能越早判断出PC的值,进⽽越能避免控制冲突。
M:空段。
WB:空段。
相关真题
【2012】某16位计算机中,有符号整数⽤补码表⽰,数据Cache和指令Cache分离。下表给出了指令系统中的部分指令格式,其中Rs和Rd表⽰寄存器,mem表⽰存储单元地址,(x)表⽰寄存器x或存储单元x的内容。
该计算机采⽤5段流⽔⽅式执⾏指令,各流⽔段分别是IF、ID、EX、M和WB,流⽔线采⽤“按序发射,按序完成”⽅式,未采⽤转发技术处理数据相关,且同⼀寄存器的读和写操作不能在同⼀个时钟周期内进⾏。请回答下列问题:
(1)若int型变量x的值为-513,存放在寄存器R1中,则执⾏“SHR R1”后,R1中的内容是多少(⽤⼗六进制表⽰)?
(2)若在某个时间段中,有连续的4条指令进⼊流⽔线,在其执⾏过程中未发⽣任何阻塞,则执⾏这4条指令所需的时钟周期数为多少?
(3)若⾼级语⾔程序中某赋值语句为x=a+b,x、a和b均为int型变量,它们的存储单元地址分别表⽰为[x]、[a]和[b]。该语句对应的指令序列及其在指令流中的执⾏过程如下所⽰。
则这4条指令执⾏过程中I3的ID段和I4的IF段被阻塞的原因是什么?
(4)若⾼级语⾔程序中某赋值语句为x = x*2 + a,x和a均为unsigned int类型的变量,它们的存储单元地址分别表⽰为[x]、[a],则执⾏这条语句⾄少需要多少时钟周期?要求模仿上图画出这条语句对应的指令序列及其在流⽔线中的执⾏过程⽰意图。
⾸先(1)考查的是第⼆章数据的表⽰:
x的机器码为[x]补=1111  1101  1111  1111B,即指令执⾏前(R1)=FDFFH,右移1位后为1111  1110  1111  1111B,即指令执⾏后(R1)=FEFFH。
(2)考查的是流⽔线时间的计算,T=(n+k-1)*时钟周期。其中n为指令总数,k为指令执⾏阶段个数。因此,⾄少需要4+5-1=8个时钟周期。
(3)
①I3的ID段被阻塞的原因:因为I3与I1和I2都存在数据相关,需要等到I1和I2将结果写回寄存器后,I3才能读寄存器内容,所以I3的ID段被阻塞。汇编指令有多少个
②I4的IF段被阻塞的原因:因为I4的前⼀条指令I3在ID段被阻塞,此时I3还占⽤这IF段的锁存器,I4⽆法进⼊IF段的锁存器,需要等到I3释放IF段的锁存器后,I4的IF段才能顺利执⾏。
(4)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。