在处理常量时,我​​在混合使用C和Assembly时遇到了一些问题。我正在使用XCode 6.1。

例如,我有以下程序集文件:

    .section __DATA,__data,regular
    .globl  _memLoc
    .globl  _myData

    _myData = 0x01234567  // <--- my constant

    .align  2

_memLoc:

    .long _myData


在这里,我正在生成一个4字节的值,该值存储在标记为_memLoc的存储位置中。我可以从C引用此内存位置:

extern uint32_t memLoc;
uint32_t *ptr = &memLoc;


检查* ptr会产生预期的结果。现在,我也想从C引用_myData,但是得到一个EXC_BAD_ACCESS。我没有运气尝试过这个:

extern uint32_t myData;
uint32_t value = myData;


_memLoc和_myData之间的实际区别是什么?这两个符号都是在组装时创建的,并使其成为全局符号,但是对_myData的引用会导致程序失败。

我实际上在这里试图做的是只定义一个常量,并使它可以从C和Assembly中访问。这有可能吗?

最佳答案

原来答案比我想象的要简单。汇编程序确实可以识别预处理程序指令,因此我要做的就是将常量放入常规的.h文件中,并将其导入.s文件中:

#include "Myconstants.h"
...
_memLoc:
    .long MYCONSTANT


question使我偏离了正确的轨道。

10-08 05:47