使用ads編寫arm7程式步步學

來源:互聯網
上載者:User

首先建立工程開始開啟ads->codeWarrior
File->New->Project->ARM Executable Image 選擇工程目錄建立的是*.mcp工程檔案
接下和vc一樣建立檔案這裡檔案 .s(asm彙編檔案).c(標準c).cpp(c++檔案)
注意不同檔案調用的編譯器不同所以注意檔案尾碼名
建一個Init.s入口初始檔案所有調用將從這個檔案入口
File->New->File->TextFile 選擇目錄建立檔案init.s
下面是代碼(我做了精簡)

  IMPORT Main //注意命令列是不能頂格的否則編譯不認作業碼 倒入函數類似include概念 
  AREA Init,CODE,READONLY //這是宏彙編文法表示程式碼片段名稱及屬性READONLY 
  ENTRY     //入口宏 
  
  LDR R13, =0x8000  //定義SP
  
  B Main     //跳轉到Main開始正式的c檔案下操作 

  END      //結束宏
  
  
再同樣建立一個testlib.s測試lib的庫 書寫一個strcpy函數

 EXPORT strcpy     //匯出lib中的函數名類似於extern或者public功能
 
   AREA TESTLIB,CODE,READONLY //同上
 
   
strcpy       //標號定義必須頂格
   LDRB r2, [r1, #0]   //下面是實現strcpy過程 
   CMP  r2, #0
 BEQ cpy_end
   add r1, r1, #1
   STRB r2, [r0], #1
   B strcpy     
   
cpy_end
 mov r0, #1
 mov pc, r14      //實現結束 
   
  END

同樣建立main.c的主c檔案
書寫代碼 
int Main()      //看到Main了麼,與標準c不同可以自己定義入口 
{ 
 char buf[10] = {0};   //同標準c下書寫一樣不過所有庫函數要自己實現當然不是指strcpy這些
        //是對於printf,串口之類硬體的
 char *pstr = "123456789";   
 strcpy( buf, pstr);   //調用 
    
 return 1;
 
}

整個就完成了可以編譯然後運行使用AXD進入調試階段自己搞  

介紹一下ACPS
APCS,ARM 程序呼叫標準(ARM Procedure Call Standard),提供了緊湊的編寫常式的一種機制,定義的常式可以與其他常式交織在一起。最顯著的一點是對這些常式來自哪裡沒有明確的限制。它們可以編譯自 C、 Pascal、也可以是用組合語言寫成的。
APCS 定義了:

對寄存器使用的限制。
使用棧的慣例。
在函數調用之間傳遞/返回參數。
可以被‘回溯’的基於棧的結構的格式,用來提供從失敗點到程式入口的函數(和給予的參數)的列表。
APCS 標準
總的來說,有多個版本的 APCS (實際上是 16 個)。我們只關心在 RISC OS 上可能遇到的。
APCS-A
就是 APCS-Arthur;由早期的 Arthur 所定義。它已經被廢棄,原因是它有不同的寄存器定義(對於熟練的 RISC OS 程式員它是某種異類)。它用於在 USR 模式下啟動並執行 Arthur 應用程式。不應該使用它。

sl = R13, fp = R10, ip = R11, sp = R12, lr = R14, pc = R15。
PRM (p4-411) 中說“用 r12 作為 sp,而不是在體繫上更自然的 r13,是曆史性的並先於 Arthur 和 RISC OS 二者。”
棧是分段的並可按需要來擴充。
26-bit 程式計數器。
不在 FP 寄存器中傳遞浮點實參。
不可重新進入。標誌必須被恢複。
APCS-R
就是 APCS-RISC OS。用於 RISC OS 應用程式在 USR 模式下進行操作;或在 SVC 模式下的模組/處理常式。

sl = R10, fp = R11, ip = R12, sp = R13, lr = R14, pc = R15。
它是唯一的最通用的 APCS 版本。因為所有編譯的 C 程式都使用 APCS-R。
顯式的棧限制檢查。
26-bit 程式計數器。
不在 FP 寄存器中傳遞浮點實參。
不可重新進入。標誌必須被恢複。
APCS-U
就是 APCS-Unix,Acorn 的 RISCiX 使用它。它用於 RISCiX 應用程式(USR 模式)或核心(SVC 模式)。

sl = R10, fp = R11, ip = R12, sp = R13, lr = R14, pc = R15。
隱式的棧限制檢查(使用 sl)。
26-bit 程式計數器。
不在 FP 寄存器中傳遞浮點實參。
不可重新進入。標誌必須被恢複。
APCS-32
它是 APCS-2(-R 和 -U)的一個擴充,允許 32-bit 程式計數器,並且從執行在 USR 模式下的一個函數中退出時,允許標誌不被恢複。其他事情同於 APCS-R。
Acorn C 版本 5 支援產生 32-bit 代碼;在用於廣域調試的 32 位工具中,它是最完整的開發發行。一個簡單的測試是要求你的編譯器匯出彙編源碼(而不是製作目標代碼)。你不應該找到:
MOVS PC, R14
或者
LDMFD R13!, {Rx-x, PC}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.