2021 buaa 计组上机P3和P4 单周期CPU 3道课上考试题

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

描述:若rsrt寄存器所存值的后缀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] VAddrGPR[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 PCPC31...28target02

同类题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) VAddrGPR[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) AddrGPR[base]+signextend(offset)

m e m w o r d ← M e m o r y [ A d d r ] memword ← Memory[Addr] memwordMemory[Addr]

b y t e ← A d d r 1...0 byte ← Addr_{1...0} byteAddr1...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} tempmemword7+8byte+memword7+8byte1+...+memword8byte

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+8byte...8byte)

e l s e    G P R [ r t ] ← 0 else\ \ GPR[rt] ← 0 else  GPR[rt]0

同类题2
lb指令

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值