2016-07-19 9 views
0

私はシングルサイクル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

+1

[ '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'のように実際にアセンブルされるという警告を与えるべきです –

+1

また' addiu $ 1、$ 1、-10' isn addiu $ 1、$ 1、10'と同じです。[2の補数](https://en.wikipedia.org/wiki/Two%27s_complement)の-10ビットの16ビット表現は '2^16 - 10 = 0xfff6' –

答えて

1

addiu $3,$3,0x8010 

擬似OPとaddiu命令ができない[0xのおかげで】符号なし添加の要望として認識されている[なぜなら符号拡張の]。

したがって、spimが生成する:mars

ori $1,$0,0x8010 
addu $3,$3,$1 

を、配列は以下のとおりである:

lui $1,0 
ori $1,$1,0x8010 
addu $3,$3,$1 
+0

ああなので、私のアセンブラーの魔法の理論は正しい。:) –

+0

@PeterCordesはい。とにかく、「火星」はもっと厄介ですが、私はあなたのコメントを見ました...クレジットが必要なクレジット...参考、私はあなたにコメントを送りますとにかく気づくだろうと思いました。 –