指数函数汇编语言

问题描述 投票:0回答:1

我正在尝试调试采用2整数的汇编语言代码:x和y并将其放入函数x ^ y。但是当我输入超过2的y值时似乎有问题。当我输入X = 3,Y = 3的例子时,我得到的结果是9,这是不正确的(3 ^ 3 = 27)

我正在使用带有恩智浦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
assembly arm exponential
1个回答
1
投票

我认为这将解决您的问题。你必须运行循环y - 1次,所以我用一个初始化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
© www.soinside.com 2019 - 2024. All rights reserved.