2014-02-15 12 views
2

MIPS 명령어를 16 진수 기계 코드로 변환해야하는 과제가 있습니다. add, addi, lw 등의 명령어를 변환하는 법은 잘 알고 있지만, beq와 같은 명령어가 나오면 혼란 스럽습니다. 이 beq를 16 진수로 변환하려면 어떻게해야합니까?MIPS : BEQ을 16 진수로 변환 기계 코드

0x00400108 beq $t3, $t5, NEXT 
0x0040010C j END 

다음의 주소

0x0040011C 

어디?

나는 시도했다 :

BEQ 연산 코드 = 4

$의 T3는 = = 11

$의 T5를 등록 등록

NEXT = 0x0040011C 13 - 0x0040010C = 10 (16 진수) = 16 (십진수)

4 11 13 16 (decimal) 
000100 01011 01101 0000 0000 0000 1000 (convert to binary) 
0001 0001 0110 1101 0000 0000 0000 1000 (group into fours) 
1 1 6 D 0 0 0 8 (hexadecimal) 

하지만 그건 잘못된 것입니다 ...

+1

명령어에 저장된 오프셋은 분기 명령어 다음 명령어의 _ 워드 (32 비트 엔티티) 수입니다. MIPS 명령어 세트 참조를 참조하십시오. – Michael

+0

나는 노력했지만, 나는 그것을 정말로 이해하지 못한다. 32 비트이기 때문에 Bne과 NEXT 사이의 명령어 수를 세고 4로 곱하면된다는 의미입니까? :( – Aitalas

답변

5

오랫동안 멍청한 상태로 보낸 후에 나는 정확한 답을 발견했습니다.

요약 된 코드 :

beq $t3, $t5, NEXT 
[instruction 1] 
[instruction 2] 
[instruction 3] 
[instruction 4] 
NEXT: [instruction 5] 

마이클 상기 된 바와 같이, 분기 명령 다음의 명령으로부터 단어의 수가 오프셋. 명령 1은 beq 다음의 명령이므로 거기에서부터 NEXT까지 계산을 시작합니다. 이 명령 1 NEXT 4 명령은, 그래서 BEQ의 형식은 지금 : RS에 $ T3가

op  | rs | rd | 16-bit constant or address 
000100 | 01011 | 01101 | 0000 0000 0001 0000 

인 경우와 번째는 $ T5입니다.

재 그룹화 진수로 변환 :

0001 | 0001 | 0110 | 1101 | 0000 0000 0001 0000 
    1 | 1 | 6 | D | 0 0 1  0 

그래서 16 진수 표현이 116D0010입니다. 건배. 편집 : 명령어는 4 명령어 * 4 바이트 = 16 바이트