【问题标题】:MIPS ADDIU confusionMIPS ADDIU 混乱
【发布时间】: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,因为它是未签名的。

那么为什么它说我应该对立即值进行符号扩展?

【问题讨论】:

  • ADDIU definitely sign-extends the imm16。当您编写一个不能用符号扩展的 imm16 表示的常量时,您确定您的汇编程序没有做一些魔术吗? (即addiu $3,$3,0x8010 应该警告它实际上会像addiu $3,$3,0xFFFF8010 那样组装,而不是addiu $3,$3,0x00008010
  • 另外addiu $1, $1, -10addiu $1, $1, 10 不同。 -10 的2's complement 16 位表示是2^16 - 10 = 0xfff6

标签: mips processor instruction-set pcspim


【解决方案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

【讨论】:

  • @PeterCordes 是的。无论如何,我打算通过mars 运行序列[spim 更挑剔],但我确实看到了你的评论,所以......信用到期......仅供参考,我打算给你发评论在顶部,但我想你还是会注意到的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-06
  • 2010-12-04
  • 2011-05-05
相关资源
最近更新 更多