【问题标题】:Exponential Function Assembly Language指数函数汇编语言
【发布时间】: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,#1BGE BREAK。当然,循环内的SUB 必须是ADD
  • 哇。我尝试将其更改为您的建议值,运行一些数字测试。一切似乎都按预期工作。谢谢!我会更仔细地检查我的代码。 @迈克尔

标签: assembly arm exponential


【解决方案1】:

我认为这将解决您的问题。您必须循环运行 y - 1 次,所以我已经用 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

【讨论】:

    猜你喜欢
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    • 2013-04-21
    相关资源
    最近更新 更多