P3和P4上机2021试题
P3和P4一共三道题,分别是计算、跳转和存储相关指令
同场考试,P3和P4所用的题目一致
计算相关指令的扩展
格雷码指令
gray $t0, $t1
32位指令格式
000000 rs 00000 rd 00000 110001
描述
GPR[rd] ← GPR[rs] ^ (GPR[rs] >> 1)
>>应该是逻辑右移的意思
同类题1
ssze指令
000000 5位 5位 5位 00000 001111
ssze rd, rs, rt
描述:若rs
和rt
寄存器所存值的后缀0的个数相同,则给rd寄存器置1,否则
R
[
r
d
]
←
R
[
r
s
]
−
R
[
r
t
]
R[rd] ← R[rs] - R[rt]
R[rd]←R[rs]−R[rt]
同类题2
异或
G P R [ r d ] ← G P R [ r s ] X O R G P R [ r t ] GPR[rd] ← GPR[rs]\ \ XOR\ \ GPR[rt] GPR[rd]←GPR[rs] XOR GPR[rt]
跳转相关指令的扩展
jas指令
32位指令格式
110110 26位target
描述
指令地址从0x3000
开始,取值时PC对128取模(0~6位)
跳转并将PC写入栈顶
V A d d r ← G P R [ 29 ] VAddr ← GPR[29] VAddr←GPR[29]
M e m o r y [ V A d d r ] ← P C + 4 Memory[VAddr] ← PC+4 Memory[VAddr]←PC+4
P C ← P C 31...28 ∣ ∣ t a r g e t ∣ ∣ 0 2 PC ← PC_{31...28} || target || 0^2 PC←PC31...28∣∣target∣∣02
同类题1:
若GPR[rs]
为1的位数为奇数,则跳转
内存相关指令的扩展
MEMSET指令
32位指令格式
110100 5位base 5位rt 16位offset
memset rt, offset(base)
例子 memset $t1, 8($t0)
描述:
将GPR[rt]
的最后1个byte赋值给Memory[GPR[base]+offset]
的每一个byte
操作
V A d d r ← G P R [ b a s e ] + s i g n _ e x t ( o f f s e t ) VAddr ← GPR[base]+sign\_ext(offset) VAddr←GPR[base]+sign_ext(offset)
M e m o r y [ V A d d r ] ← G P R [ r t ] 7...0 ∣ G P R [ r t ] 7...0 ∣ G P R [ r t ] 7...0 ∣ G P R [ r t ] 7...0 Memory[VAddr] ← GPR[rt]_{7...0}\ |\ GPR[rt]_{7...0}\ |\ GPR[rt]_{7...0}\ |\ GPR[rt]_{7...0} Memory[VAddr]←GPR[rt]7...0 ∣ GPR[rt]7...0 ∣ GPR[rt]7...0 ∣ GPR[rt]7...0
同类题1
6位opcode 5位base 5位rt 16位offset
lboez rt, offset(base)
lboez $t0, 1($t1)
描述
若memory[Addr]
的对应字节数据的二进制1的个数等于0的个数,则将该字节符号扩展存入GPR[rt]
,否则将0存入GPR[rt]
A d d r ← G P R [ b a s e ] + s i g n e x t e n d ( o f f s e t ) Addr ← GPR[base] + sign_extend(offset) Addr←GPR[base]+signextend(offset)
m e m w o r d ← M e m o r y [ A d d r ] memword ← Memory[Addr] memword←Memory[Addr]
b y t e ← A d d r 1...0 byte ← Addr_{1...0} byte←Addr1...0
t e m p ← m e m w o r d 7 + 8 ∗ b y t e + m e m w o r d 7 + 8 ∗ b y t e − 1 + . . . + m e m w o r d 8 ∗ b y t e temp ← memword_{7+8*byte} + memword_{7+8*byte-1} +...+ memword_{8*byte} temp←memword7+8∗byte+memword7+8∗byte−1+...+memword8∗byte
i f t e m p = = 4 t h e n G P R [ r t ] ← s i g n _ e x t e n d ( m e m w o r d 7 + 8 ∗ b y t e . . . 8 ∗ b y t e ) if\ \ temp == 4\ \ then\ \ GPR[rt] ← sign\_extend(memword_{7+8*byte...8*byte}) if temp==4 then GPR[rt]←sign_extend(memword7+8∗byte...8∗byte)
e l s e G P R [ r t ] ← 0 else\ \ GPR[rt] ← 0 else GPR[rt]←0
同类题2
lb指令