2014-11-30 5 views
0

상수 0x80000을 반환하는 지연 루프를 작성하는 데 문제가 있습니다. 출력은 Hello, world와 같아야합니다. 0 안녕하세요, 세상! 1 안녕하세요, 세계! 2 ... 하지만 내 프로그램을 실행하면 터미널이 아무런 표시도하지 않습니다. 나타나야합니다. 나는 코드를 디버깅함으로써 무엇이 잘못되었는지 알아 내려고 노력했지만, 그것이 나를 돕는 것 같지 않다. 이 문제를 해결하는 방법에 대한 제안 사항이 있으십니까?지연 루프 (MIPS 단위)

.ent getDelay 
.text 
.global getDelay 

getDelay: 
addi $sp, $sp, -1 
sw $ra, 0($sp) 
la $a0, helloStr 
lw $a1, counter 
jal printf 
nop 
lw $ra, 0($sp) 
addi $sp, $sp, -1 
lw $t0, ($a1) 
addiu $t0, $t0,1 
la $t1, counter 
sw $t1, ($a1) 
$v0 = 0x80000 
jr $ra 

.end getDelay 

.data 
helloStr: .asciiz "Hello, world %d\n" 
counter: .word 100 

답변

0
  1. 당신은 오직 4 (워드 사이즈)의 배수로 $sp을 조정해야합니다. addiu $sp, $sp, -4addiu $sp, $sp, 4을 사용해야합니다.
  2. $t0을 증가시키고 있지만 $t1을 저장 중입니다. la $t1, counter이 필요하지 않으며 sw $t1, ($a1) 대신 sw $t0, ($a1)을 사용해야합니다.
  3. $v0 = 0x80000은 명령어가 아니므로 li $v0, 0x80000이 필요합니다.
  4. 이 함수 자체가 약간 지연되는 것으로 가정하면 루프에 루프가 필요합니다.