gpt4 book ai didi

assembly - 使用 ARM 汇编语言编写计算整数阶乘的程序

转载 作者:行者123 更新时间:2023-12-02 20:56:48 25 4
gpt4 key购买 nike

给定一个整数,我必须编写一个返回其阶乘值的函数。

这是我的阶乘函数代码:

bl getnum

move r3, r0

mov r1, #1 -- counter

mov r4, r0


loop:
sub r0, r0, #1

mul r3, r0, r3

add r1, r1, #1

subs r1, r4 -- check if counter = the initial r0
beg loop

mov r0, r3

bl printnum

但是,此代码会产生错误的结果。例如,当我输入 5 时,它给出 20 而不是 120。有人可以帮我找出哪里出了问题吗?我的逻辑推理似乎可行,但我不知道我是否犯了语法错误,导致程序以不同的方式运行

最佳答案

sub 将减法结果写回到目标操作数。这不是您想要的 - 您只想进行比较,因此您应该使用 cmp:

cmp r1, r4  -- cmp always updates the flags, so you don't need to write cmps
bne loop

但是,您的代码无法处理 n 为 0 或 1 的情况。此外,当您r0 中已经有一个非常合适的计数器。所以你可以将其重写为如下内容:

mov r3, #1  -- default value
loop:
cmp r0, #1
-- if (n > 1) { r3 *= n; n--; goto loop; }
mulgt r3, r0, r3
subgt r0, r0, #1
bgt loop

关于assembly - 使用 ARM 汇编语言编写计算整数阶乘的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39969925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com