【发布时间】:2016-02-20 02:36:53
【问题描述】:
我正在尝试在 Assembly 中构建一个 BMI 计算器。我一开始就很迷茫,所以如果这一切都没有任何意义,我提前道歉。我使用预定义的值来制作它,所以我什至不需要请求用户输入。
我使用的是 uVision5,旧设备是 NXP,LPC2104。如果有帮助,我认为这是 ARM。
这是我目前所拥有的,我正在尝试做这个等式:
BMI = (weightInPounds * conversionFactor) / (heightInInches * heightInInches)
规则是我必须有以下数据定义:
- weightInPounds DCD 150
- heightInInches DCD 64
- 转换因子 EQU 703
这是我目前所拥有的:
AREA File1, CODE, READONLY
ENTRY
LDR r1,weightInPounds ;loads weight into r1
LDR r2,heightInInches ;loads height into r2
LDR r3,=conversionFactor ;loads conversion into r3
MUL r4,r1,r3 ;mult weight by conv factor
MUL r5,r2,r2 ;square height
MOV r0,r5, LSR #r4 ;divide previous 2 and store in r0
stop B stop ;force infinite loop by branching to this line
weightInPounds DCD 150 ;defines weight
heightInInches DCD 64 ;defines height
conversionFactor EQU 703 ;defines conversion factor for BMI calc
END ;end of program
这是我的问题
- 行 LDR r3,conversionFactor ; 将转换加载到 r3 不起作用,因为 EQU 与 DCD 不同,但我不知道如何修复它,我到处寻找,无法弄清楚.
由于前面提到的错误,第一行 MUL 不起作用。
我不知道如何用寄存器除...
任何帮助将不胜感激。
【问题讨论】:
-
@ScottHunter 非常感谢您的回复,当我实现“UDIV”或“SDIV”时,我收到错误“A1854E:未知操作码“SDIV”,可能是错误的目标 CPU?”。
-
LPC2104 有一个 ARM7TDMI 内核;你没有除法指令。我建议实现一个迭代除法子例程(即循环中的减法) - 这不是最有效的方法,但它肯定是最直接的。