混合C和汇编xcode - 常量

时间:2014-11-09 12:18:25

标签: ios c xcode assembly

在处理常量时,我​​遇到了一些混合C和汇编的问题。我正在使用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中访问。这有可能吗?

1 个答案:

答案 0 :(得分:0)

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

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

question让我走上正轨。