我在单周期MIPS处理器上做了一个任务,我对addiu指令有点困惑。
On this website,作为我的参考文献,作者声明即时符号将被扩展
Description:
Adds a register and a sign-extended immediate value and stores the result
in a register
Operation:
$t = $s + imm; advance_pc (4);
Syntax:
addiu $t, $s, imm
Encoding:
0010 01ss ssst tttt iiii iiii iiii iiii
如果我有以下说明
lui $3,0x1001
addiu $3,$3,0x8010
然后我创建了我的数据路径,标志扩展了addiu,我会得到
$3 := 0x1001_0000
$3 := 0x1001_0000 + 0x1111_8010 = 0x1000_8010
但根据PCSpim它是不正确的,我应该
$3 := 0x1001_8010
我很困惑,为什么我需要签署扩展addiu,根据我的理解,如果我执行类似addiu $1, $1, -10
的操作,则应将其视为addiu $1, $1, 10
,因为它是无符号的。
那么为什么我说应该签署 - 扩大直接价值呢?
答案 0 :(得分:1)
在spim
中:
addiu $3,$3,0x8010
是一个伪操作,并且被认为是无符号添加[凭借0x
],addiu
指令可以不要[因为符号扩展]。
因此,spim
生成:
ori $1,$0,0x8010
addu $3,$3,$1
在mars
中,序列为:
lui $1,0
ori $1,$1,0x8010
addu $3,$3,$1