MIPS ADDIU混淆

时间:2016-07-19 06:38:12

标签: mips processor isa pcspim

我在单周期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,因为它是无符号的。

那么为什么我说应该签署 - 扩大直接价值呢?

1 个答案:

答案 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