版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
主要內(nèi)容:C語言的編譯過程C語言程序→匯編語言程序→目標(biāo)可執(zhí)行程序匯編語言的函數(shù)調(diào)用過程參數(shù)準(zhǔn)備函數(shù)返回匯編函數(shù)間調(diào)用函數(shù)調(diào)用舉例C語言調(diào)用匯編函數(shù)匯編語言調(diào)用C語言函數(shù)命令 文件和 文件20132C和匯編語言混合編程C語言程序→匯編語言程序→目標(biāo)可執(zhí)行程序C程序先要轉(zhuǎn)化為匯編程序,意味著C和匯編語言混合編程時,最終可以從匯編語言之間的相用過程著眼C程序匯編程序匯編程序目標(biāo)程序編譯轉(zhuǎn)化C程序匯編程序匯編程序如何轉(zhuǎn)化如何調(diào)用C程序匯編程序如何調(diào)用20133C語言函數(shù)→匯編函數(shù)inttest_fun(paras...){[處理過程]}test_fun:mov ip,spstmdb
sp!,
{fp,ip,
lr,
pc}sub fp,ip,
#4 ;
0x4[處理過程]ldmdb fp,
{fp,
sp,pc}函數(shù)名轉(zhuǎn)化為標(biāo)號?;厮萁Y(jié)構(gòu)退出fpipsplrpc(r11):
Frame
Pointer(r12):(r13):
Stack
Pointer(r14):
Link
Register(r15):
Program
Counterip
→外層函數(shù)的棧頂fp
→當(dāng)前函數(shù)的棧底20134參數(shù)個數(shù)≤4時-輸入?yún)?shù)20135在函數(shù)體內(nèi)使用參數(shù)(4個參數(shù)見下表)別名寄存器說明a1r0參數(shù)1a2r1參數(shù)2a3r2參數(shù)3a4r3參數(shù)4參數(shù)個數(shù)≤4時-返回值20136函數(shù)結(jié)束時,應(yīng)將返回值存放到r0中用匯編語言編寫函數(shù)舉例(參數(shù)個數(shù)≤4)20137C語言函數(shù)total_fun(int
p1,int
p2,int
p3),返回三數(shù)之和,用匯編語言實(shí)現(xiàn)total_fun:/*
函數(shù)名由標(biāo)號替代*/movip,
sp/*
?;厮萁Y(jié)構(gòu)*/stmdbsp!,
{fp,
ip,
lr,
pc}subfp,
ip,
#4adda1,a1,a2/*
實(shí)現(xiàn)p1+p2,存放在r0中*/adda1,a1,a3/*
實(shí)現(xiàn)p1+p2+p3,存放在r0中*/ldmdbfp,
{fp,
sp,
pc}/*
返回*/匯編語言調(diào)用函數(shù)(參數(shù)個數(shù)≤4)如何準(zhǔn)備函數(shù)參數(shù)將參數(shù)依次直接存入R0-R3如何獲得函數(shù)返回值從寄存器R0中舉例:mov
r0,#1/*
準(zhǔn)備參數(shù)1*/mov
r1,#2/*
準(zhǔn)備參數(shù)2*/mov
r2,#3/*
準(zhǔn)備參數(shù)3*/bl
total_fun /*
調(diào)用剛編寫的求和函數(shù)*//*
此時,r0中的值應(yīng)該是6
*/20138參數(shù)個數(shù)>4時-輸入?yún)?shù)test_fun:mov ip,
spstmdb
sp!,
{fp,ip,
lr,pc}sub fp,ip,
#4 ;
0x4sub sp,
sp,
#32[處理過程]ldmdb fp,
{fp,
sp,
pc}ip
→外層函數(shù)體的棧頂fp
→當(dāng)前函數(shù)體的棧底20139sp→當(dāng)前函數(shù)體的棧頂
#32→當(dāng)前函數(shù)所用棧容量當(dāng)前函數(shù)所用棧容量201310臨時變量個數(shù)+函數(shù)參數(shù)個數(shù)多于4個的部分例如:int
foo(int
x1,int
x2){int
a,b,c; /*
3個臨時變量*/}其使用的棧容量=3int
foo(int
x1,int
x2,
int
x3,
int
x4,
intx5){int
a,b,c; /*
3個臨時變量*/...}其使用的棧容量=3+(5-4)=4當(dāng)前函數(shù)內(nèi)存布局外層函數(shù)棧頂當(dāng)前函數(shù)棧頂子函數(shù)參數(shù):由頂開始依次存放現(xiàn)場信息函數(shù)中的臨時變量:由底開始依次存放子函數(shù)參數(shù)5子函數(shù)參數(shù)6子函數(shù)參數(shù)函數(shù)變量函數(shù)變量2函數(shù)變量1fpiplrpcfpipip
→外層函數(shù)體的棧頂fp
→當(dāng)前函數(shù)體的棧底201311當(dāng)前函數(shù)內(nèi)存布局-思考題如果當(dāng)前函數(shù)有多個子函數(shù),那么它的內(nèi)存布局是如何的?例如:– int
foo(){int
x1,x2,x3,x4,x5,x6;foo1(x1,x2);foo2(x1,x2,x3,x4);foo3(x1,x2,x3,x4,x5,x6);}子函數(shù)參數(shù)5子函數(shù)參數(shù)6子函數(shù)參數(shù)函數(shù)變量函數(shù)變量2函數(shù)變量1fpiplrpc201312C語言調(diào)用匯編函數(shù).global
total_fun.texttotal_fun:4movip,
sp5stmdbsp!,
{fp,
ip,
lr,pc}6subfp,
ip,
#47adda1,a1,a28adda1,a1,a39ldmdbfp,
{fp,sp,
pc}10.endtest.cextern
int
unsignedtotal_fun(int
p1,int
p2,
int
p3);int
test(){inty;y
=
total_fun(1,2,3);return
y;7
}201313total_fun.s匯編語言調(diào)用C語言函數(shù)1
.extern
total_fun1
unsigned
int
total_fun(.texttest:mov ip,spint
p1,
int
p2,
int
p3)
{return
p1+p2+p3;4
}5
stmdb sp!,
{fp,ip,
lr,
pc}6
sub fp,
ip,
#47
mov r0,#18
mov r1,#29
mov r2,#310bl
total_fun11ldmdb fp,
{fp,
sp,
pc}12.endtest.s201314total_fun.c命令文件命令 文件IDE與目標(biāo)板連接時調(diào)試過程中復(fù)位目標(biāo)板后需要集成環(huán)境自動完成一些特定的功能:復(fù)位目標(biāo)板、清除看門狗、
中斷寄存器,等等這些功能可以由一組命令序列完成,該命令序列保存在文件中。該文件稱為命令 文件。文件后綴一般為.cs201315文件命令命令–
GO執(zhí)行程序:從當(dāng)前PC開始執(zhí)行程序MEMWRITE
區(qū)寫向地址0x1000寫入值0x5Amemwrite
0x1000
0x5A–
REFRESH刷新窗口REGWRITE
寄存器寫向寄存器PC寫入值0x3840regwrite
pc
0x3840RESET
復(fù)位目標(biāo)設(shè)備–
STOP停止執(zhí)行程序201316文件命令命令 文件舉例(page
122):–stopregwrite
sp
0x1000命令 文件;一般目標(biāo)板都會處于運(yùn)行狀態(tài);程序剛執(zhí)行時未初始化堆棧地址–
類似于Windows操作系統(tǒng)中的autoexec.bat
自動執(zhí)行批處理文件201317命令文件的設(shè)置什么也不做,這時,IDE只是和目標(biāo)板連接而已,但映像文件并不 到目標(biāo)板IDE和目標(biāo)板連接以后,自動把映像文件 到目標(biāo)板IDE和目標(biāo)板連接以后,執(zhí)行
文件,但并不將映像文件 到目標(biāo)板201318文件在程序編譯時起作用。該文件描述代碼
定位的有關(guān)信息,包括代碼段,數(shù)據(jù)段,地址段等, 器必須使用該文件對整個系統(tǒng)的代碼做正確的定位。在IDE開發(fā)環(huán)境中使用擴(kuò)展名*.ld201319文件SECTIONS{3
.=0X10000;.text:{*(.text)}.=0x80000000;.data:{*(.data)}.bss:{*(.bss)}8
}SECTIONS{.text:{*(.text)}.data:{*(.data)}.bss:
{*(.bss)}6
}目標(biāo)輸入文件1目標(biāo)輸入文件2目標(biāo)輸入文件n目標(biāo)輸出文件目標(biāo)輸入文件1:代碼段初始化的數(shù)據(jù)段未初始化的數(shù)據(jù)段目標(biāo)輸入文件2:代碼段初始化的數(shù)據(jù)段未初始化的數(shù)據(jù)段目標(biāo)輸出文件:代碼段初始化的數(shù)據(jù)段未初始化的數(shù)據(jù)段201320文件點(diǎn)"."表示當(dāng)前位置SECTIONS{.text:{*(.text)}.data:{*(.data)}.bss:
{*(.bss)}6
}SECTIONS{3
.=0X10000;.text:{*(.text)}.=0x80000000;.data:{*(.data)}.bss:{*(.bss)}8
}201321代碼的執(zhí)行過程起始點(diǎn):代碼段起始處(地址)程序入口地址查找程序 地址默認(rèn)為標(biāo)號:_start從程序地址開始執(zhí)行是否找到入口地址?從代碼段起始處開始執(zhí)行否是從程序地址開始?否
是201322程序 地址的設(shè)置默認(rèn)是global
_start
標(biāo)號處也可以人工指定程序
地址所在文件程序
標(biāo)號名稱201323連接后代碼段的組織(默認(rèn)情況下)單個文件的情況按源程序編寫順序多個文件的情況文件放在最前面,其余文件按字母順序組織SECTIONS{.text:{*(.text)}.data:{*(.data)}.bss:
{*(.bss)}6
}目標(biāo)輸入文件1:代碼段初始化的數(shù)據(jù)段未初始化的數(shù)據(jù)段目標(biāo)輸入文件2:代碼段初始化的數(shù)據(jù)段未初始化的數(shù)據(jù)段目標(biāo)輸出文件:代碼段初始化的數(shù)據(jù)段未初始化的數(shù)據(jù)段201324連接后代碼段的組織(默認(rèn)情況下)如何查看連接后的代碼–
編譯連接后可使用Tool>Disassemble
all命令,會在工程的Debug生成一個objdum文件下201325作業(yè)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版冷鏈物流車輛租賃合作協(xié)議2篇
- 安徽事業(yè)單位二零二五年度聘用合同范本3篇
- 2025年度個人股權(quán)質(zhì)押股權(quán)分割合同(公平版)4篇
- 2025版房地產(chǎn)開發(fā)商逾期交房違約責(zé)任擔(dān)保合同4篇
- 二零二五版綠色家居墻面涂料采購與應(yīng)用合同3篇
- 二零二五版毛竹林資源承包與加工利用合同2篇
- 2025年度宅基地使用權(quán)流轉(zhuǎn)糾紛處理服務(wù)合同4篇
- 2025年度電子商務(wù)平臺運(yùn)營維護(hù)外包服務(wù)合同協(xié)議2篇
- 2025年度別墅銅門定制與市場推廣活動合同3篇
- 2025年度輪胎銷售區(qū)域保護(hù)與市場壟斷協(xié)議4篇
- 定額〔2025〕1號文-關(guān)于發(fā)布2018版電力建設(shè)工程概預(yù)算定額2024年度價格水平調(diào)整的通知
- 2024年城市軌道交通設(shè)備維保及安全檢查合同3篇
- 【教案】+同一直線上二力的合成(教學(xué)設(shè)計(jì))(人教版2024)八年級物理下冊
- 湖北省武漢市青山區(qū)2023-2024學(xué)年七年級上學(xué)期期末質(zhì)量檢測數(shù)學(xué)試卷(含解析)
- 單位往個人轉(zhuǎn)賬的合同(2篇)
- 科研倫理審查與違規(guī)處理考核試卷
- GB/T 44101-2024中國式摔跤課程學(xué)生運(yùn)動能力測評規(guī)范
- 高危妊娠的評估和護(hù)理
- 2024年山東鐵投集團(tuán)招聘筆試參考題庫含答案解析
- 2023年高考全國甲卷數(shù)學(xué)(理)試卷【含答案】
- 數(shù)獨(dú)題目A4打印版無答案
評論
0/150
提交評論