2016-07-19 11 views
0

단일 사이클 MIPS 프로세서에 대한 작업을 수행하고 있는데 addiu 명령에 대해 약간 혼란 스럽습니다. 나는 다음과 같은 지침MIPS ADDIU 혼동

lui  $3,0x1001 
    addiu $3,$3,0x8010 

을 가지고 내 데이터 경로를 만드는 경우

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 

그 기호 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에서

+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,0x00008010'가 아니라'addiu $ 3, $ 3,0xFFFF8010'처럼 실제로 어셈블 될 것이라는 경고를 주어야합니다. –

+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 

는 의사 연산하고 addiu명령는 [때문에 할 수 없다 [0x의 덕분으로] 부호 첨가하는 욕구로 인정 부호 연장의].

그래서 spim가 생성

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

mars에서, 시퀀스는 다음과

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

아하, 내 어셈블러 - 마술 이론이 맞았 어. :) –

+0

@PeterCordes 예. 어쨌든'화성 '을 통해 시퀀스를 실행하려고했는데''스핌은 더 까다 롭습니다.' '하지만 당신의 의견을 보았습니다 ... 신용이 만기가 된 신용 ...' '나는 당신에게 의견을 보냈습니다. 정상 에선,하지만 어쨌든 당신이 알아 차릴 것이라고 생각했습니다. –