Assembly 汇编程序代码不工作

Assembly 汇编程序代码不工作,assembly,arm,Assembly,Arm,最近几天我在这里的一些人的帮助下做了一个软件,现在代码已经完成了,但似乎有一些错误,因为它不符合预期 代码如下: add r3,#1 b .loop_ini .add_row: add r2,#1 mov r3,#0 b .loop_ini LDR r2,=0x0019660D umull r4,r5,r1

最近几天我在这里的一些人的帮助下做了一个软件,现在代码已经完成了,但似乎有一些错误,因为它不符合预期

代码如下:

            add r3,#1
            b .loop_ini

        .add_row:
            add r2,#1
            mov r3,#0
            b .loop_ini



            LDR r2,=0x0019660D
            umull r4,r5,r1,r2   @;RLo,RHi,N,M; r5 contains 32low bits from 
        .while_end:
            mov r0,r2           @;Movemos el resultado del modulo a r0
            pop {r1-r2,pc}          @;restores modified registers and returns

.end
有人发现任何错误吗?我想,但不确定错误可能是在将随机值插入矩阵时


谢谢

好吧,由于您没有提供太多关于代码预期功能的信息,我不得不猜测一下,但首先引起我注意的是:

str r6, [r0]
就我所能理解的代码而言,r0应该是随机值,r6应该是它应该保存到的地址

您必须在
str
中交换这两个,因为r0现在用作地址,r6用作要存储的值

您还必须使用strb而不是str,至少看起来您希望使用的是字节,而不是完整的32位字


我没有进一步调查,可能会有更多的问题。总的来说,代码似乎不是由有ARM组装经验的人编写的,它有很大的优化空间。TBH,除非你有充分的理由使用程序集,否则你应该考虑切换到C或其他高级语言。一个合适的编译器可以生成更好的代码,而不会给您带来太多麻烦。

如果您能告诉我们它应该做什么,它应该做什么,那就容易多了。“它不应该做它应该做的。”-它应该做什么?它实际上是做什么的?您好,它可以生成一个介于0和r0-1之间的随机数。该数字首先以随机方式创建,然后以mod_random方式处理,使其成为介于0和r0-1之间的数字,然后该数字应重新运行到主数字,并插入到矩阵0x0的第一个位置,然后程序应运行,直到没有要填充的行或列为止。我遇到的主要问题是如何将数字插入矩阵,以及如何更改.data中定义的seed32;谢谢你,我刚刚有了去年的经验。不幸的是,这是我必须做的作业,但他们没有提供任何信息,只是告诉我们该做什么,我正在尽我最大的努力。谢谢你现在的帮助,如果我明白了,我会测试你的答案:str r6,[r0]应该变成strb r0,[r6]??谢谢你的努力,我很快就会回来告诉你是否成功。顺便说一句,我正在使用devkitpro和insight调试器(如果没有错误的话)。您的响应确实纠正了矩阵填充,但我仍然有一些奇怪的问题,因为矩阵不是填充10x8而是5x15:-|并且它是由1填充的,而不是0和r0-1之间的随机排序,在本例中,我将其设置为r0=2,因此值应该在0-1之间。对不起,但是你的代码在很多方面都被严重破坏了。例如,在random中,您没有加载种子,而是加载指向种子值的指针,那么您永远不会保存种子。随机中的
str
也被破坏。mod_random也不做它应该做的事情(而且速度会非常慢)。哦,你知道如何解决这个问题吗??我很抱歉打扰你这么多,只是我不知道该如何做,如何做得更好。谢谢现在,我添加了代码,但您告诉我的更正很少,我知道如何修复。该程序仍不起作用(谢谢。现在我想我发现了问题,问题是:种子没有更新,所以矩阵的每个位置都有相同的随机数。