2012-01-28 10 views
0

나는 약간의 문제가있어 주위를 둘러 볼 수 없습니다. 다음과 같은 방식으로 스택에 여러 개의 숫자가 저장되어 있습니다.주소를 MIPS 레지스터에 저장합니다.

|5| 0($sp) 
|4| 4($sp) 
|3| 
|8| 

한 번에 두 숫자를 비교하여 스택을 탐색하려고합니다. 이것에 의해, 0 ($ sp)과 4 ($ sp) 그리고 0 ($ sp)와 8 ($ sp), ... 그리고 4 ($ sp)와 8 sp). 5 3 8 대, 4 ~ 8 대, 4 3 대, 5 ~ 8 대, 5 3 대, 4 대 그래서,

이 나의 시도는

lw $t3, 0($sp) ## 
la $t4, 4($sp) ## 
Sum2: 
    beq $t2, $zero, Exit 
    lw $t5, $t4 ## 

    add $a0, $t5, $zero 
    li $v0, 1 
    syscall 
    add $t4, $t4, 4 
    addi $t2, $t2, -1 
    j Sum2 

주로 1, 2, 그리고이다 5 라인. 스택의 맨 위에있는 정수를 $ t3에로드하고 스택의 다음 항목의 주소를 $ t4에로드하고 있습니다.

값을 $ t4에 저장된 주소에로드하려면 비교 (현재는 인쇄 할 수 있도록 0을 추가하고 있음)를 수행 한 다음 t4에 저장된 주소를 4 씩 증가시킵니다 스택의 세 번째 항목을 가져올 바이트. 레지스터 값이 0이 될 때까지이 작업을 계속합니다. 이 문제가 발생하면 $ sp를 4 씩 증가시키고 프로세스를 반복합니다.

PCSpim에서로드하려고 할 때마다 구문 오류가 발생합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

'la'는 MIPS 명령어가 아닙니다. (라인 2) – paislee

+1

이 경우 addiu t4, sp, 4로 바뀌는 의사 명령어입니다. –

+0

사람들이 계속 질문에 대답하기를 원하면 정답을 수락하십시오. – m0skit0

답변

2

내가 문제를 읽고 있어요 경우 제대로, 어디는 $ T4 점 저장된 값 (T5)을로드

lw $t5, 0($t4) 

를 원한다.

+0

그리고 $ a0의 기억 주소를 얻으려면? – Favolas