指数函数汇编语言

时间:2019-03-05 13:28:45

标签: assembly arm exponential

我正在尝试调试采用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

1 个答案:

答案 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