[英]MIPS ASCII code not in correct order
我在汇编中有以下代码:
.data
lab_n: .word 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x61, 0x6e, 0x64, 0x6f, 0x20, 0x6f, 0x20, 0x4d, 0x49, 0x50, 0x53, 0x0d
count: .word 19
msgtexto: .asciiz "SMP/AC "
separator: .asciiz "->"
.text
main:
la $a0,msgtexto # $a0 <- msgtexto
jal print_string # print it
la $a0,count
lw $t0,0($a0)
li $a0,0x0A # $a0 <- '\n'
jal print_char # print it
li $t1,0 # to be used as a counter
la $a1, lab_n
loop:
move $a0,$t2
jal print_char # print corresponding char
lw $t2, 0($a1)
move $a0,$t2 # $a0 <- lab_n[i] , i.e. offset=4*i
addi $t1,$t1,1 # decrement counter
addi $a1,$a1,4
blt $t1,$t0,loop
finish:
li $v0, 10 # Exit the program
syscall
# funções com chamadas ao sistema para imprimir inteiros, caracteres e strings
# (o argumento de entrada é colocado em $a0 antes da chamada da função)
# print_int(int), $4 = $a0 = integer
print_int:
li $v0,1
syscall
jr $ra
# print_char(char), $4 = $a0 = char
print_char:
li $v0,11
syscall
jr $ra
# print_string(char *), $4 = $a0 = string
print_string:
li $v0,4
syscall
jr $ra
该代码的最终结果应为:SMP / AC程序和MIPS
但是,我在Progamando一词后面有一个小方块。
我的老师告诉我,这是因为字母的ASCII码顺序不正确。 “ P”在“ r”位置,“ r”在“ o”位置,依此类推。
我明白他的意思,但是找不到该程序中的错误。 有人能帮我吗?
在循环的第一次迭代中,您将打印进入循环之前在$t2
发生的任何事情:
move $a0,$t2 # <- $t2 hasn't been loaded with a value from lab_n yet
jal print_char # ..but you still print it
lw $t2, 0($a1) # ..and here you finally load a value from lab_n
move $a0,$t2
这些行应更改为:
lw $a0, 0($a1) # load character
jal print_char # print it
另外,此行的注释不正确:
addi $t1,$t1,1 # decrement counter
您正在增加计数器。
如果输出确实应该是“ SMP / AC Programando o MIPS”(即一行),则不应在循环之前输出换行符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.