Я протестировал функцию, которая переключает все символы нижнего регистра в верхний регистр отдельно.При возврате функции на мой 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
Iдолжен возвращать содержимое, а не адрес строки, которую я изменил?Любая помощь с благодарностью.
результат:
********* toUpper *********
Input: Computer
Result: