【发布时间】:2016-07-19 06:38:12
【问题描述】:
我正在对单周期 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
我创建了我的数据路径,该路径扩展了我会得到的附加值
$3 := 0x1001_0000
$3 := 0x1001_0000 + 0x1111_8010 = 0x1000_8010
但根据 PCSpim 是不正确的,我应该得到 p>
$3 := 0x1001_8010
我很困惑为什么我需要签署extend addiu,据我了解,如果我执行addiu $1, $1, -10 之类的操作,它应该被视为addiu $1, $1, 10,因为它是未签名的。
那么为什么它说我应该对立即值进行符号扩展?
【问题讨论】:
-
ADDIUdefinitely sign-extends the imm16。当您编写一个不能用符号扩展的 imm16 表示的常量时,您确定您的汇编程序没有做一些魔术吗? (即addiu $3,$3,0x8010应该警告它实际上会像addiu $3,$3,0xFFFF8010那样组装,而不是addiu $3,$3,0x00008010 -
另外
addiu $1, $1, -10与addiu $1, $1, 10不同。 -10 的2's complement 16 位表示是2^16 - 10 = 0xfff6
标签: mips processor instruction-set pcspim