常用的ARM彙編指令集與彙編呼叫C語言
阿新 • • 發佈:2018-12-21
***指令與偽指令:
指令:CPU機器指令的助記符,經過編譯後得到一串10組成的機器碼,可以被CPU直接讀取執行。
偽指令:編譯器環境提供,用來指導編譯過程,最終不會生成機器碼。
***LDR/STR架構:
CPU不能直接對記憶體的內容進行操作,必須藉助CPU的特殊暫存器對記憶體進行載入處理。
ldr指令將記憶體內容載入到通用暫存器,str將暫存器的內容載入至記憶體。
***指令字尾: 常用的字尾名: B 功能不變,操作長度變為8位; H 功能不變,操作長度變為16位; S 功能不變,運算元變為有符號; S(S標誌) 功能不變,影響CPSR標誌位。
***跳轉指令: b:直接跳轉; bl:跳轉前將返回的地址放入lr之中,以便於返回,函式的呼叫; ***C語言的呼叫: C語言的執行需要一定的條件,這些條件由彙編來完成。 C語言的區域性變數設定在棧上,如果C語言的區域性變數落空,則程式就會跑空。
在微控制器程式之中,硬體為其提供了一個預設可用的棧,
在編譯器gcc中,在連結時自動會新增一個頭,這個頭由彙編編寫,引導C語言的實現。
ARM 之中有37個暫存器,每一個模式之下都有自己獨立的sp暫存器。
找到自己模式下的棧,系統在復位後預設進入SVC模式,先把模式設定為SVC,再直接操作SVC。
復位之後,外部的DRAM尚未初始化,目前可用的只有內部的SRAM,因此我們從SRAM設定棧。
棧:滿減棧, 滿增棧 空減棧 空增棧