在汇编MIPS中的堆栈上的推送和弹出字符串值

时间:2018-06-10 15:23:10

标签: assembly stack mips

我需要从用户那里读取字符串,将它们存储在堆栈中并将它们从最后一个打印到第一个。 但问题是我只能打印最后一个String。例如:

INPUT:

3
a
b
c

输出:

c
c
c

当我使用数字而不是字符串时,程序工作正常。我想,我存储寄存器的地址,而不是值,但我不知道如何解决它。

这是代码:

.data
    text1: .asciiz "Enter the number of Strings.\n"
    newLine: .asciiz "\n"

.text
main:
    # Ask about number of Strings
    li $v0, 4
    la $a0, text1   
    syscall

    # Read number of Strings
    li $v0, 5
    syscall
    add $t0, $zero, $v0 
    add $t1, $t0, $zero

    if:
    beq $t0, 0, next
    add $zero, $zero, $zero

    push:
    # Read String
    li $v0, 8
    la $a1, 8
    syscall
    la $t2, ($a0)

    # Push on the stack
    addi $sp, $sp, -4   
    sw $t2, 0($sp)
    sub $t0, $t0, 1     # update counter

    jal if
    add $zero, $zero, $zero

    next:
    beq $t1, $t0, end

    pop:
    # Pop from the stack
    lw $t3, 0($sp)
    addiu $sp, $sp, 4
    # Print String
    li $v0, 4       
    move $a0, $t3
    syscall
    add $t0, $t0, 1     # update counter

    jal next
    add $zero, $zero, $zero

    end:

提前致谢。

0 个答案:

没有答案