나는 약간의 문제가있어 주위를 둘러 볼 수 없습니다. 다음과 같은 방식으로 스택에 여러 개의 숫자가 저장되어 있습니다.주소를 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에서로드하려고 할 때마다 구문 오류가 발생합니다. 내가 도대체 뭘 잘못하고있는 겁니까?
'la'는 MIPS 명령어가 아닙니다. (라인 2) – paislee
이 경우 addiu t4, sp, 4로 바뀌는 의사 명령어입니다. –
사람들이 계속 질문에 대답하기를 원하면 정답을 수락하십시오. – m0skit0