2011-03-27 4 views
0

내가 문제와 작동하지 않을 수 있습니다 스택의 사용을 가진 코드를 제공에 스택을 사용하는 방법을 몰라?나는</p>이 <p>사람이이 문제를 해결하기 위해 나를 호 말할 수 .. MIPS (조립)

.data 
.align 2 
array:.space 100 
.text 
.globl main 

main: 
    li $t0,10 


    addi $sp,$sp,-12  #stack 
    sw $ra,0($sp) 
    sw $s0,4($sp) 
    sw $s1,8($sp) 
    jal function 
    addi $sp,$sp,12 
    lw $ra,0($sp) #hello stack 
    lw $s0,4($sp) 
    lw $s1,8($sp) 
    li $v0,1 
    add $a0,$t6,$0 
    syscall 
    li $v0,10 
    syscall 

function: 
    move $s0,$a2 
    move $s1,$a1  
    li $s0,10101 # s0,s1 dont change itsvalues NEVER 
    li $s1,20202 
    li $t6,777 
    move $v0,$t6 
    jr $ra 

답변

1

MIPS 프로세서의 "지연 슬롯"에 대해 들었습니까? "분기"명령어 다음의 명령어는 "지연 슬롯"에 배치됩니다. 이것은 비록 지부가 수행되었다 할지라도이 명령이 어쨌든 실행된다는 것을 의미합니다. 코드의 다음 조각 그래서 :

jal function 
    addi $sp,$sp,12 

당신은 addifunction에서 돌아온 후 바로 전화 후가 아니라 실행되기 때문에 jalnop 명령을 배치해야합니다. 또한 jr 명령에 상주합니다.

관련 문제