단일 사이클 MIPS 프로세서에 대한 작업을 수행하고 있는데 addiu 명령에 대해 약간 혼란 스럽습니다. 나는 다음과 같은 지침MIPS ADDIU 혼동
lui $3,0x1001
addiu $3,$3,0x8010
을 가지고 내 데이터 경로를 만드는 경우
, 내 기준으로 저자는 바로이 기호는 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
그 기호 addiu의 I를 확장 얻을 것이다
$3 := 0x1001_0000
$3 := 0x1001_0000 + 0x1111_8010 = 0x1000_8010
그러나 t 오 PCSpim 나는
$3 := 0x1001_8010
나는 그것이 서명이기 때문에이 addiu $1, $1, 10
로 처리해야 addiu $1, $1, -10
그런 짓을하면 내가 이해에서, addiu을 확장 로그인해야 내가 왜 혼란 스러워요 얻어야한다.
그렇다면 즉각적인 가치를 부호 확장해야한다고 말하는 이유는 무엇입니까? 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,0x00008010'가 아니라'addiu $ 3, $ 3,0xFFFF8010'처럼 실제로 어셈블 될 것이라는 경고를 주어야합니다. –
또한'addiu $ 1, $ 1, -10' isn 'addiu $ 1, $ 1, 10'과 동일합니다. [2의 보수] (https://en.wikipedia.org/wiki/Two%27s_complement) -10의 16 비트 표현은'2^16 - 10입니다 = 0xfff6' –