【发布时间】:2019-03-05 13:28:45
【问题描述】:
我正在尝试调试采用 2 个整数的汇编语言代码:x 和 y,并将其放入函数 x^y。但是当我输入超过2的y值时似乎有问题。当我输入X = 3,Y = 3示例时,我得到的结果是9,这是不正确的(3 ^ 3 = 27)
我使用的是 Keli uVision 5,搭配 NXP LPC2833 开发板
我是这个社区的新手。所以,如果我犯了菜鸟的错误,请向所有高级程序员道歉。
https://i.stack.imgur.com/rEi6S.png
AREA EXPONENT, CODE, READONLY
ENTRY
start
MOV a1, #3 ; X value
MOV a2, #3 ; Y value
BL X_POWER_Y ; Go to X_POWER_Y function
B loop
X_POWER_Y
CMP a2, #0 ;Checks if Y equals 0
BEQ ZERO_COND
CMP a2,#1 ;Checks if Y equals 1
BEQ POWER_1
MOV a3, a2
MOV v1, a1
while CMP a3, a2
BLT BREAK
SUB a3, a3, #1
MUL a4, a1, v1
MOV v1, a4
B while
POWER_1
MOV a4, a1
B BREAK
ZERO_COND
MOV a4, #1
B BREAK
BREAK
MOV a1, a4
loop B loop
END
【问题讨论】:
-
CMP a3, a2/BLT BREAK -
哦,对不起。我之前尝试过其他格式的代码。我一定是忘记重写那部分了。
-
更新:我已将那部分代码更改为
MOV a3, #0/MOV v1, a1/while CMP a3, a2/BGT BREAK/ADD a3, a3, #1再次尝试重新运行代码,现在结果是 0x000000F3,仍然不正确。 -
应该是
MOV a3,#1和BGE BREAK。当然,循环内的SUB必须是ADD。 -
哇。我尝试将其更改为您的建议值,运行一些数字测试。一切似乎都按预期工作。谢谢!我会更仔细地检查我的代码。 @迈克尔
标签: assembly arm exponential