我正在尝试调试采用2整数(x和y)的汇编语言代码,并将其放入函数x ^ y中。但是,当我将y的值设置为大于2时,似乎有问题。当我输入X = 3,Y = 3的示例时,我得到的结果是9,这是不正确的(3 ^ 3 = 27)
我正在使用带有NXP LPC2833开发板的Keli uVision 5
我是这个社区的新手。因此,如果我犯了一个菜鸟错误,对所有高级程序员表示歉意。
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
答案 0 :(得分:1)
我认为这可以解决您的问题。您必须运行y-1次,所以我用a初始化了a2,它将一直运行直到a2等于或大于y(在您的情况下为3)
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, #1
MOV v1, a1
while
CMP a3, a2
BGE BREAK
ADD 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