工具/软件:WEBENCH设计工具
第一次来这里、我是一个新用户、我正在尝试编译一些汇编代码、但它不起作用。
我在 C/C++中执行了一个代码、该代码仅使用求和和和减法计算平方根、我尝试将其转换为汇编语言、这里是代码:
主:
MOV.w #36、R15;将我要计算的平方根值放在 R15中
调用 Square_Root;调用函数平方根
JMP 结束
平方根:
MOV.w #0、R14;R14是一个计数器'n'并且被设定为零
TST.w R15;如果 R15 = 0、则转至 END_2
JZ 结束_2
;;初始估算
MOV.w R15、R12; 这是除法算法的一部分,R12是分子
MOV.w #2、R11;R11是分母: R12/R11
调用 Division_1
MOV.w R13、R10;R13是除法的结果,将其放入 R10中
同时: ;计算平方根的算法基本上是: x (n+1)=(x (n)+ S/x (n))/2,在 n+1次迭代之后,S 是我要计算平方根的数字,在本例中为0x36d
CMP #16、R14;将 R14与0x16d 进行比较。 此处的目的是创建一个包含多达16个计数器的计数器
jeq end_2;如果 R14 = 16 ->跳转至 end_1
MOV.w R15、R12;这里再次采用除法算法,只是传递参数
MOV.w R10、R11;
调用 Division_1
MOV.w R13、R9;R9 = R13 (除法的结果)
ADD.w R10、R9;R9 = R9 + R10
MOV.w R9、R12;编号器
MOV.w #2、R11;分母
调用 Division_1;
Inc. w R14;将 R14 in 1.
MOV.w R13、R10;R10 = R13上一次除法的结果
JMP while
结束_1:
MOV.w R10、R15;将平方根的结果放在 R15中
结束_2:
可重置
除法1:
MOV.w #0、R13;将计数器取零
除法2:
CMP #0、R12;将 R12与0进行比较
JL end_Division;如果小于零->跳转到分部的最后一个
jeq end_Division;->如果等于零->跳转到分部的最后一个
sub.w R11、R12;R12 = R12 - R11 -> R12分子、R11分母
Inc.w R13;包括计数器
JMP 除法2
结束除法:
可重置
结束:
JMP $;无穷大循环
嗯、我不知道代码是否足够清楚、对此我深表歉意。
IAR Workbench 给我的错误是:
用户错误:在地址0x430E 上发现非法操作码
无法执行:驱动程序错误。 发生错误后、程序计数器(PC)为 。
感谢你的帮助。