2016-07-19 6 views
0

Я выполняю назначение на однопроцессорном MIPS-процессоре, и я немного запутался в инструкции addiu.MIPS ADDIU confusion

On this website, как моя ссылка автор заявляет, что незамедлительное будет знак extened

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 I будет получать

$3 := 0x1001_0000 
$3 := 0x1001_0000 + 0x1111_8010 = 0x1000_8010 

Но это неверно в соответствии с t о PCSpim и я должен получить

$3 := 0x1001_8010 

Я смущен, почему я должен подписать продлить addiu, от того, что я понимаю, если я что-то вроде addiu $1, $1, -10 его следует рассматривать в качестве addiu $1, $1, 10, потому что без знака.

Так почему же он говорит, что я должен подписывать-продлить ближайшее значение?

+1

[ 'ADDIU' определенно входа расширяет imm16] (http://stackoverflow.com/questions/6835724/MIPS-стек каркасно-addiu-инструкций спутанность # comment8125193_6836242). Вы уверены, что ваш ассемблер не делает какой-либо магии, когда вы пишете константу, которая не может быть представлена ​​расширенным знаком imm16? (т. е. 'addiu $ 3, $ 3,0x8010' должен дать предупреждение, что он будет собираться как' addiu $ 3, $ 3,0xFFFF8010', а не 'addiu $ 3, $ 3,0x00008010' –

+1

Также' addiu $ 1, $ 1, -10' isn 't то же, что и 'addiu $ 1, $ 1, 10'. [дополнение 2] (https://en.wikipedia.org/wiki/Two%27s_complement) 16-разрядное представление -10 -' 2^16 - 10 = 0xfff6' –

ответ

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 
+0

Ага, поэтому моя теория ассемблер-магия была правильной. :) –

+0

@PeterCordes Да. Я собирался запустить последовательность через «mars» в любом случае ['spim' более тонкий], но я видел ваш комментарий, так что ... Кредит, где кредит должен ... FYI, я собирался отправить вам комментарий наверху, но я решил, что вы все равно заметите. –