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