c语言汇编混编,c语言与汇编混编写法
R13 (stack pointer)
R14 (Link Register)
R15 (program counter)
c語言中內嵌匯編的規則:
內嵌匯編器與armasm的區別:
訪問全局變量:
unsigned char????????????? LDRB/ STRB
unsigned short??????????? LDRH/STRH
unsigned int??????????????? LDR/STR
char???????????????????????????????LDRB/STRB
short???????????????????????????? LDRH/STRH
B 字節操作
H 雙字節操作
c語言調用匯編程序
在匯編中使用EXPORT 偽指令聲明本子程序,使其他程序可以調用該子程序
在c語言中使用extern來聲明外部函數
匯編程序
特別注意其中R0,R1 為默認的第一個參數和第二個參數
函數名稱只是一個標號而已,而其中的參數通過R0,R1來傳輸。
匯編中調用c語言
其中一個存在4個參數
匯編中調用方法
首先有一個import
然后將參數通過r0,r1,r2,r3,以及堆棧來傳遞數據
STR R3, [SP, #-4]!
滿遞增:
通過增大寄存器的地址向上增長, 堆棧指針指向內含有效數據項的最高地址
LDMFA/STRFA
空遞增
通過增大寄存器的地址向上增長,堆棧指針直線堆棧上的第一個空位置
LDMED/STRED
空遞減和空遞增與上面的意思相對。
以入棧后SP的值是增加還是減少為依據,可將堆棧類型劃分為遞增堆棧(向上生長)和遞減堆棧(向下生長);
STMFD SP!, {R1-R7, LR};將R1-R7以及LR,入棧滿遞減堆棧(FA?代表滿),至于為何叫做遞減???...疑問...
數據塊傳送
堆棧操作
說明
存儲
壓棧
STMDA
STMED
空遞減
STMIA
STMEA
空遞增
STMDB
STMFD
滿遞減
STMIB
STMFA
滿遞增
數據塊傳送
堆棧操作
說明
加載
出棧
LDMDA
LDMFA
滿遞增
LDMIA
LDMFD
滿遞減
LDMDB
LDMEA
空遞增
LDMIB
LDMED
空遞減
第二列中的ED、EA、FD、FA分別表示empty descend(空遞減)、 empty ascend(空遞增)、 full descend(滿遞減)、 full ascend(滿遞增),其含義是說,如果你采用的是空遞減(空遞增、滿遞減、滿遞增)堆棧的話,入棧操作則使用指令STMED(STMEA、STMFD、STMFA),出棧操作則使用指令LDMED(LDMEA、LDMFD、LDMFA)。從此你再也不會為你應該使用ia、ib、da還是db來實現出、入棧操作而苦惱了。
參考該文獲得
總結
以上是生活随笔為你收集整理的c语言汇编混编,c语言与汇编混编写法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: emule.exe是什么文件产生的进程
- 下一篇: enbiei.exe是什么病毒程序吗 e