在数据段中输入后直接保存输出

时间:2012-02-26 20:38:45

标签: assembly mips mips32 mars-simulator mips64

这是我的代码:

.data  
.ascii "r", "o", "r", "y", "\n"
key: .word 2
.text
.globl main

main:   la  $t0, string
        move    $t5, $t0         # preserve original data
        la  $t1, key            # load cypher into t1 reg
        lw  $a1, 0($t1)      # key loaded into a1 reg   

Loop:   lb  $a0, 0($t5)      # ith element of array loaded into a0    
        beq $a0, 10, exit_all   # if ith character is \n, get out of loop
        jal sub1               # otherwise, call sub  

        addi    $t5, $t5,      # increment index of array   
        j   Loop

exit_all: syscall 

sub1:   
    some code
    move $v0, $t0              # what i want to return to main
    jr  $ra                 # exit iteration

我有一个带有子程序的循环。每次'jr $ ra'命令将流返回到我的main函数时,子返回(在$ v0 reg中)我想要保存的输出。我需要在输入数据段后直接保存这些输出。我该怎么做呢?如果它只是一个输出,我可以说:

sb $v0, 4($t1)

然后会直接保存。但是有多个输出,所以我如何以一般方式做到这一点?

1 个答案:

答案 0 :(得分:2)

您需要在数据部分为所有输出值保留空间,例如,对于32个输出值,请添加:

results: .byte 32

到您的数据部分。然后将寄存器设置为结果的地址,并在每次循环时递增寄存器:

        la  $t7, result
...
Loop:   ...
        jal sub1
        sb  $v0,0($t7)
        addiu $t7,1
        j loop

以上代码未经测试。