因為PlayBook使用的是ARM的CPU所以使用的匯編也就是ARM的匯編了。
之前在學習BeagleBoard上的QNX編程時也做過類似的實驗,在c程序中嵌入使用ARM匯編語句。總結出來的結果是將ARM匯編獨立到一個.S文件中會比較方便,更多的細節請參考。(http://www.linuxidc.com/Linux/2011-09/43471.htm 與http://www.linuxidc.com/Linux/2011-09/43472.htm)
為了測試ARM匯編,在測試過程中就不能使用模擬器了,因為PlayBook 模擬器其實使用的是X86架構,不是ARM架構。
啟動PlayBook NDK 開發環境,連接好PlayBook真機,就可以開始測試了。
在PlayBook NDK中新建一個BlackBerry Tablet OS c/c++項目,語言選擇c,類型選擇“Empty Application”,就是一個空的c項目。
然後在src目錄中創建一個main.c源文件,將以下代碼拷貝到main.c文件中:
然後在src目錄下創建一個匯編文件,以.S為後綴,文件名沒有要求,我使用的是MyASM.S
然後將以下代碼拷貝到MyASM.S文件中:
完成之後就可以編譯測試應用了,該應用是一個控制台應用,啟動後馬上關閉,控制台會輸出以下內容:
t is: 10 now
t is: 30 now
t is: 32 now
測試成功後回過頭看看代碼的細節,理解其中的關鍵部分才能在以後的現實編程中可以在c代碼中靈活調用ARM匯編。
首先看看main.c,首先是有關damonfunction的定義很重要,表明方法damonfunction是一個需要從外部鏈接進來的方法,該方法有一個參數
對應的,在MyASM.S中,就有對damonfunction這個標簽的定義:
這就意味著在main.c的main函數中通過damonfunction(&t);調用damonfunction時就會調用MyASM.S中從damonfunction這個標簽開始的程序。