0

我已经测试了将所有小写字符分别切换为大写的功能。当将函数返回给我的main.asm(通过 附加.include)时,它什么也不打印。Main.asm 是由我的导师预先编写的,并且在打印.asciiz类型标签时会打印。

这是将修改后的字符串返回给主程序的函数:

toUpper:

move $t0, $a0

#li $t0, 0

loop:
 lb $t1, 0($t0)
     beq $t1, 0x00, exit
 blt $t1, 'a', case
 bgt $t1, 'z', case
 sub $t1, $t1, 32
 sb $t1, 0($t0)

case: 
  addi $t0, $t0, 1
 j loop

exit:

la  $v0, 0($t0)

jr $ra

这是返回值后调用打印函数的代码:

la $a0, toUpper_CSisFun
jal toUpper

move $t0, $v0
print_string(str_result)    
print_string_reg($t0) 
print_newline

这是打印宏本身

.macro print_string_reg(%reg)
li $v0, PRINT_STRING
la $a0, 0(%reg)
syscall 
.end_macro

我必须返回内容而不是我修改的字符串的地址?非常感谢任何帮助。

结果:

********* toUpper *********
Input: Computer
Result: 
4

0 回答 0