为什么寄存器$ a1总是在Mips架构中打印0

时间:2018-04-04 22:11:49

标签: assembly architecture mips computer-science mips32

我正在测试一些mips程序集,然后我正在尝试检查字符串中的字符是否在字母表中。我想了一个让它工作的hacky方法,但我更愿意,如果有人可以向我解释为什么我的代码每次打印出来都是0。

.data
str1: .asciiz "allo"
str2: .asciiz "a1b2"
true: .word 1
false: .word 0

的.text

main:

    la $a0, str1
    move $t0, $a0

    loop:
        lb $a0, 0($t0)           # pointer on array
        beqz $a0, end            # Checks for end of array
        blt $a0, 97, non_alpha   # Is character in the alphabet
        bgt $a0, 122, non_alpha
        addi $t0, $t0, 1         # Increment pointer
        j loop      

    end:
        li $v0, 1
        lw $a1, true      # !!! This line is the issue, why $a1 print a 0
        syscall           # When I change it to $a0 it prints out 1 as it 
                          # should

        # end program
        li $v0, 10
        syscall

non_alpha: "Did not touch this yet, ignore this"

1 个答案:

答案 0 :(得分:1)

您正在进行系统调用的服务($ v0 = 1 = print_integer)仅打印$ a0中的值。对$ a1的任何更改都不会影响结果,因为它与服务完全无关。

有关每项服务的功能及其使用的参数的详细信息,请参阅:https://courses.missouristate.edu/KenVollmar/mars/Help/SyscallHelp.html