【发布时间】:2009-09-05 19:43:44
【问题描述】:
我的编译器无法与我拥有的程序集文件一起使用,而我的其他编译器也无法与我拥有的 c 文件一起使用。我不懂组装。我需要把它移过来,但我没有快速到达任何地方。有没有人可以提供帮助?我不敢相信没有可用的翻译。这是文件的开头:
list p=18F4480
#include <p18F4480.inc>
#define _Z STATUS,2
#define _C STATUS,0
GLOBAL AARGB0,AARGB1,AARGB2,AARGB3
GLOBAL BARGB0,BARGB1,BARGB2,BARGB3
GLOBAL ZARGB0,ZARGB1,ZARGB2
GLOBAL REMB0,REMB1
GLOBAL TEMP,TEMPB0,TEMPB1,TEMPB2,TEMPB3
GLOBAL LOOPCOUNT,AEXP,CARGB2
LSB equ 0
MSB equ 7
math_data UDATA
AARGB0 RES 1
AARGB1 RES 1
AARGB2 RES 1
AARGB3 RES 1
BARGB0 RES 1
BARGB1 RES 1
BARGB2 RES 1
BARGB3 RES 1
REMB0 RES 1
REMB1 RES 1
REMB2 RES 1
REMB3 RES 1
TEMP RES 1
TEMPB0 RES 1
TEMPB1 RES 1
TEMPB2 RES 1
TEMPB3 RES 1
ZARGB0 RES 1
ZARGB1 RES 1
ZARGB2 RES 1
CARGB2 RES 1
AEXP RES 1
LOOPCOUNT RES 1
math_code CODE
;---------------------------------------------------------------------
; 24-BIT ADDITION
_24_BitAdd
GLOBAL _24_BitAdd
movf BARGB2,w
addwf AARGB2,f
movf BARGB1,w
btfsc _C
incfsz BARGB1,w
addwf AARGB1,f
movf BARGB0,w
btfsc _C
incfsz BARGB0,w
addwf AARGB0,f
return
我知道我可以排除前两行,因为设备定义无论如何都在我的 main.c 中。这两个#defines 就是这样,但最简单的方法(我认为)是相应地用 STATUS,2 和 STATUS,0 替换 _Z 和 _C 的实例。接下来的几行(GLOBAL)只是我正在收集的变量声明。与 LSB 和 MSB 相同,除了它们也分配值。下一个块我想我只是声明了一堆具有这些名称(AARGB0 等)的整数,然后后面的块是一个函数。
我什至懒得翻译那个函数,因为我的编译器有 #asm/#end asm 指令,所以我可以把它放在原始状态(只要它包含在一个函数中)。
我想我已经拥有了一切......直到我构建并且我的编译器尖叫着说 STATUS 没有被定义。当然不是。但它是什么?我在网上看到 STATUS 寄存器很特别,但我真的不明白它是如何工作的。
如果你没有注意到,我什至不确定我真正要问的是什么。我只是想让这该死的东西起作用。
【问题讨论】:
-
这里是翻译:
return AARGB + BARGB; -
如果你知道你问的东西不清楚,你就不应该问。尝试按以下形式构建问题:这就是我所做的 - 这就是发生的事情 - 这就是我想要发生的事情。
-
您真正想做什么?我猜这是从一组汇编例程中摘录的,用于执行 24 位算术。如果那是你真正想做的(执行 24 位算术),那么也许这就是你应该问的问题。
-
我猜你的问题是“我的 C 程序中需要一个数学包,但我拥有的那个是用汇编程序编写的”。
-
不,你们俩都对“为什么”不正确。我知道我不清楚,你是对的——也许我不应该问。连续三天无处可去,我感到非常沮丧。事实上,上面的特定摘录只是我试图使用的代码的一部分。数学部分非常微不足道,它只是处理的最简单的摘录。我只是在寻找有关如何进行的提示。不过还是算了吧。我只是从头开始编写所有代码,并说“去他妈的”不要重新发明轮子。
标签: c++ assembly translation pic status-register