2011-03-27 88 views
0

我给那有一个问题,使用堆栈可能无法正常工作的代码..我不知道如何使用堆栈在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返回后调用后立即但不执行的地方nop指令jal后。它也存在于jr指令中。