2012-03-01 2 views
0

테스트를 위해 검토 중이므로 왜이 질문에 대한 답이 12가 아닌 0x605040c인지, 아니면 하나의 이유가 123보다 12330인지 알 수 없습니다. 아래에 있습니다. 나는 QtSPIM에서 그것을 실행했고, 나는 여전히 그것을 이해할 수 없다! 질문에 대한값이 12가 아닌 0x605040c 레지스터에 저장되는 이유는 무엇입니까?

data 
var1: .byte 12 
var2: .byte 4,5,6 
var3: .word 1,2,3,4,5,6,7,8,9 
    .globl main 
.text 
main: 
la $t1, var1 
la $t2, var2 
la $t3, var3 
lb $a1,1($t2) #$a1= 0x5 
lw $a1, 0($t1) #$a1= 0x605040c 
lui $a1,0x123 #$a1= 0x
lw $a1, 0($t3) #$a1= 0x1 
sll $a1,$a1,3 #$a1= 0x8 

답변

2

대답 은 일반적으로 사용하는 각 MIPS 명령에 대해 reference document를 읽고 응답 할 수 있습니다.

귀하의 MIPS 기계가 little-endian이라고 가정합니다. (

lw $a1, 0($t1) 

이 ^이 의미 로드 32 비트 4- :

Address:  0  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ... 36 37 38 39 
Value (hex): 0C 04 05 06 01 00 00 00 02 00 00 00 03 00 00 00 ... 09 00 00 00 
Label:  ^var1 ^var2  ^var3 

이제 우리는 코드의 까다로운 부분을 분석 할 수 있습니다 :

첫째, 당신의 기억을 살펴 보자 바이트) 주소는 리틀 엔디안에서 주소 t1에서 시작하여입니다. t1 = var1에서 4 바이트는 0C 04 05 06입니다. 32 비트 정수로 해석하면 0605040C입니다.

lui $a1,0x123 #$a1= 0x

^는이 상위 16 비트에 즉시 16 비트 상수 부하를 의미하고, 하부 16 비트가 모두 0을. (the reference을 참조하십시오. LUI로 건너 뜁니다.)

+0

오오오! 알 겠어! – Lucas

+0

투표 해 주셔서 감사합니다. – Nayuki

관련 문제