私はシングルサイクルMIPSプロセッサの割り当てを行っていますが、私はaddiu命令で少し混乱しています。私のリファレンスとして、著者は、私は、次の手順MIPS ADDIUの混乱
lui $3,0x1001
addiu $3,$3,0x8010
を持っていると私はサインがADDIU Iを拡張するというのが私のデータ・パスを作成した場合はすぐにはサインが
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
をextenedされると述べて
On this website、得るでしょう
$3 := 0x1001_0000
$3 := 0x1001_0000 + 0x1111_8010 = 0x1000_8010
しかし、それは間違っていますO PCSpimと私は私が私がaddiu $1, $1, -10
ような何かを行う場合には、符号なしですので、それはaddiu $1, $1, 10
として扱われるべきで理解するものから、ADDIUを符号拡張する必要がある理由私は混乱しています
$3 := 0x1001_8010
を取得する必要があります。
なぜ、私は即値をサイン拡張する必要があると言いますか? spim
で
[ 'ADDIU'は間違い符号拡張IMM16を(http://stackoverflow.com/questions/6835724/mips-stack-frame-and-addiu-instruction-confusion#comment8125193_6836242)。 sign-extended imm16で表現できない定数を書くとき、あなたのアセンブラが魔法をやっていないと確信していますか? (つまり 'addiu $ 3、$ 3,0x8010'は' addiu $ 3、$ 3,0xFFFF8010'のように 'addiu $ 3、$ 3,0x00008010'のように実際にアセンブルされるという警告を与えるべきです –
また' addiu $ 1、$ 1、-10' isn addiu $ 1、$ 1、10'と同じです。[2の補数](https://en.wikipedia.org/wiki/Two%27s_complement)の-10ビットの16ビット表現は '2^16 - 10 = 0xfff6' –