[英]Mixing C and Assembly xcode - constants
在處理常量時,我在混合使用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
這個問題使我走上正軌。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.