我正在测试一些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"
答案 0 :(得分:1)
您正在进行系统调用的服务($ v0 = 1 = print_integer)仅打印$ a0中的值。对$ a1的任何更改都不会影响结果,因为它与服务完全无关。
有关每项服务的功能及其使用的参数的详细信息,请参阅:https://courses.missouristate.edu/KenVollmar/mars/Help/SyscallHelp.html