繁体   English   中英

如何使用mips将ascii值存储在数组中?

[英]How to store ascii values in array using mips?

我正在编写一个带有三个参数的函数。 $a0是正int值和$a1是一个数组, $a3是数组大小。 我必须将第一个参数转换为ascii十进制数字。 然后将该数字存储到数组中。 我一直这样做直到没有更多的数字可以转换。 我必须返回我存储的最后一个数组地址和最后的ascii值(将它们放在$v0$v1 )。 我究竟做错了什么 ?

uitoa:

li $t0 , 0   
li $t1 , 10
li $t4 , 48
li $t8 , 0
for :
beq $a0,$t8,finished
div $a0,$t1
mfhi $t2 #remainder
mflo $a0
add $t3,$t2,$t4 # +48 to ascii
add $t6 , $t6 , $a1  #address of array?
sb $t3, 0($t6)
addi $t6,$t6,1 # increment array ?
addi $t0, $t0 ,1
j for

finished:

la $v0 , ($t6)
la $v1 , ($t3)

add $t6 , $t6 , $a1t6 = t6 + a1 ,但这是第一次使用t6 ,因此它的值是不确定的(幸运的是,当您尝试在其中写入字节时会导致“超出范围” ,如果它意外地以某个可写的内存结尾,您将收到错误的结果,加上一些被覆盖的随机内存,这很可能导致其他地方发生各种奇怪的行为)。

同样,您会在循环中add每个循环(将a1地址添加到先前设置的t6 ),因此,即使您将t6提前设置为零,也将在第二个循环中退出。

对于零输入,您只是跳到完成,但是您没有将单个'0'字符存储到数组中,并且t6t3都未初始化(但已使用)。

在完成la v1,(t3)将读取内存吗? 我认为您打算将t3复制到v1 因此,请使用来自寄存器的加载(不确定mips助记符,我从没学过mips asm)。

您可以使用t0白白。

通过将数字除以10循环,可以得到数字倒数,但看起来好像是逐渐填充了数组。

总体来说,您似乎已经掌握了应该做的事情,但立即开始发出说明。 停一会儿,将算法分成几行简单的步骤,以整行注释的形式写在代码中,然后遍历它们进行各种棘手的输入(0、1、10,max_positive_int),并确保逻辑正常( 橡皮鸭编程 )。 在步骤下记下所需的其他注释,以简化操作,在必须初始化的地方做注释,并为其分配寄存器。

然后其余的内容仅意味着编写这些步骤的说明,然后在调试器中对其进行调试,以验证所有功能均按预期工作。

顺便说一句,从您的问题来看,您似乎甚至没有费心在调试器中运行它。 那不是汇编编程的工作原理,特别是如果您只是在学习。 这也使您有资格投票否决问题(在问之前没有表现出足够的努力),尽管我不在乎,我宁愿投票给没有表现出理解答案的人的人..:D

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM