




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
基礎(chǔ)代碼示例實驗手冊
目錄
1課程介紹........................................................................3
1.1簡介........................................................................................3
1.2內(nèi)容描述....................................................................................3
1.3讀者知識背景................................................................................3
1.4實驗環(huán)境說明................................................................................3
2實驗1:hello-world示例程序...................................................4
2.1實驗介紹...................................................................................4
2.1.1關(guān)于本實驗................................................................................4
2.1.2教學(xué)目標..................................................................................4
2.1.3實驗內(nèi)容介紹..............................................................................4
2.2實驗任務(wù)操作指導(dǎo)...........................................................................4
2.2.1創(chuàng)建示例程序源碼..........................................................................4
2.2.2思考題及答案..............................................................................6
3實驗士使用C語言代碼調(diào)用匯編程序.............................................6
3-1實驗介紹.....................................................................................6
3.11關(guān)于本實驗...............................................................................6
3.1.2教學(xué)目標.................................................................................6
3.1.3實驗內(nèi)容介紹.............................................................................6
3-2實驗任務(wù)操作指導(dǎo)............................................................................7
3.2.1創(chuàng)建示例程序源碼..........................................................................7
322進行編譯運行...............................................................................8
3.3思考題及答案................................................................................9
4實驗3:使用C語言代碼內(nèi)嵌匯編程序.............................................9
4.1實驗介紹...................................................................................9
4.1.1關(guān)于本實驗................................................................................9
4.1.2教學(xué)目標..................................................................................9
4-1-3內(nèi)容介紹...................................................................................9
4.2實驗任務(wù)操作指導(dǎo)...........................................................................9
4-2.1創(chuàng)建示例程序源碼..........................................................................9
4.2.2進行編譯..................................................................................11
4.2-3進行運行..................................................................................11
4-2.4思考題及答案..............................................................................11
X課程介紹
工.1簡介
本手冊適用于學(xué)習(xí)ARM平臺匯編課程的學(xué)生進行實驗練習(xí),完成本實驗手冊后,您將能更加
充分理解GNUARM匯編代碼運行環(huán)境的搭建、配置及編譯運行,掌握在華為鯨鵬云服務(wù)器上
進行環(huán)境配置°
1.2內(nèi)容描述
本實驗指導(dǎo)書通過在華為鯨鵬云服務(wù)器上,編譯運行3個不同功能的示例程序。完成實驗操作
后,讀者會掌握基本的匯編程序編寫,ARMv8開發(fā)編譯環(huán)境的配置以及加深對ARM平臺的了
解。
1.3讀者知識背景
本課程為ARM平臺匯編基礎(chǔ)課程,為了更好地掌握本書內(nèi)容,閱讀本書的讀者應(yīng)首先具備以
下基本條件:
?具備基本的Linux命令能力。
14實驗環(huán)境說明
?華為鯉鵬云主機、0penEuler20.03操作系統(tǒng);
?安裝gcc7.3+版本;
?每套實驗環(huán)境可供1名學(xué)員上機操作。
mkdirhello
cdhello
步驟2創(chuàng)建示例程序源碼hello.s
執(zhí)行以下命令,創(chuàng)建示例程序源碼hello.s0
vimhello.s
代碼內(nèi)容如下:
.(cx(
.globaltartl
tart1!
movx0.#0
Idrxl.=msg
movx2,len
movx8,64
svc#0
movxO.I23
movx8,93
svc#0
.data
msg:
.ascii"HelloWorld!\n"
len=.-msg
.text
.globaltart1
tart1:X0
mov
X1
Idr
X21en
movX
X84
mov
SVC
mov
mov
svc
data
isg:
.ascii'HelloWorld
)en=.-msg
步驟3進行編譯運行
保存示例源碼文件,然后退出vim編輯器。在當前目錄中依次執(zhí)行以下命令,進行代碼編譯運
行。
ashello.s-ohello.o
Idhello.o-ohello
./hello
[root@ecs-huaweihello]#Is
hello,s
[root@ecs-huaweihello]#ashello,s-ohello,o
[root@ecs-huaweihello]#Is
hello,ohello,s
[root@ecs-huaweihello]#Idhello,o-ohello
Id:warning:cannotfindentrysymbol_start;defaultingto00000000004000b0
[root@ecs-huaweihello]#Is
hellohello,ohello,s
Lroot@ecs-huaweihelloj#./hello
HelloWorld!.
[root@ecs-huaweihello]#.
通過上述代碼運行,可以看出,編寫的hello-wolrd示例程序已經(jīng)在華為鯨鵬云服務(wù)器上通過
編譯和運行,并成功輸出結(jié)果。
222思考題及答案
?思考下同樣的代碼在X86平臺能否運行,為什么?
參考答案:
不能,因為X86平臺使用的是復(fù)雜指令集(CISC),而我們實驗中使用到的華為鯨鵬云服務(wù)器是
基于ARM平臺的,使用的是精簡指令集(RISC),二者的匯編指令差異較大。
3實驗2:使用C語言代碼調(diào)用匯編程序
3」實驗介紹
3.1.1關(guān)于本實驗
實現(xiàn)ARM平臺上通過C語言源碼來調(diào)用匯編源碼中的代碼。
3.1.2教學(xué)目標
掌握在ARM平臺上使用C語言源碼來調(diào)用匯編源碼的方法。
3.1.3實驗內(nèi)容介紹
該匯編代碼是針對Aarch64架構(gòu)的。在匯編程序中,用.global定義一個全局函數(shù)strcpyi,然
后該函數(shù)就可以在C代碼中用extern關(guān)鍵字加以聲明,然后直接調(diào)用。
3.2實驗任務(wù)操作指導(dǎo)
321創(chuàng)建示例程序源碼
以下步驟以在華為鯨鵬云服務(wù)器上執(zhí)行為例。
步驟1創(chuàng)建目錄
執(zhí)行以下命令,創(chuàng)建called目錄存放該程序的所有文件,并進入called目錄。
rnkdircalled
cdcalled
步驟2創(chuàng)建globalCalling.c源代碼
執(zhí)行以下命令,創(chuàng)建示例調(diào)用C語言程序源碼globalCalling.c。
vimglobalCalling.c
代碼內(nèi)容如下:
/*globalCalling.c*/
"include<stdio.h>
externvoidstrcpy1(char*(Lconstchar*s);
intmain()
(
constchar*srcstring="Sourcestring";
chardststringf]="Dest:nationstring";
prinlf("OriginalStatus:%s%s\n".srcslring,dststring);
strcpy1(dststring,srcsiring);
printf("ModifiedStatus:%s%s\n",srcstring,dststring);
return0;
}
^include<stdio.h>
axternvoidstrcpy1(char*d,constchar*s);
intmainO
(
constchar*srcstring=ii'ce;
chardststring[]=;
printf(式tu:,srestring,dststring);
strepyl(dststring,srestring);
arintf('rodi:ie-t.ws'「n,srestring,dststring);
return0:
步驟3創(chuàng)建globalCalled.S源代碼
執(zhí)行以下代碼命令,創(chuàng)建被調(diào)用的匯編語言程序源碼globalCalled.So
vimglobalCalled.S
代碼內(nèi)容如下:
/*globalCalled.S*/
.globalstrcpy1
#Startthefunction:strcpyI
strcpy1:
LDRBw2,[Xl],#l
STRw2,[X0],#1
CMPw2.#0//asciicode"NUL"isthelastcharacterofastring,
BNEstrcpy1
RET
.globalstrcpyl
strcpyl:
LDRBw2,[XI],
STRw2,[XO],
CMPw2,
BNEstrcpyl
322進行編譯運行
保存示例源碼文件,然后退出vim編輯器。在當前目錄中依次執(zhí)行以下命令,進行代碼編譯運
行。
gccglobalCalling.cglobalCalled.S-ocalled
./called
[root@ecs-huaweicalled]#pwd
/root/called
[rootdecs-huaweicalled]#Is
globalCalled.SglobalCalling.c
[root@ecs-huaweicalled]#gccglobalCalling.cglobalCalled.S-ocalled
[root@ecs-huaweicalled]#Is
calledglobalCalled.SglobalCalling.c
[root@ecs-huaweicalled]#./called
OriginalStatus:SourcestringDestinationstring
ModifiedStatus:SourcestringSourcestring
[root@ecs-huaweicalled]#.
通過上述代碼運行,可以看出,編寫的使用C語言代碼調(diào)用匯編程序已經(jīng)在華為鯨鵬云服務(wù)
器上通過編譯和運行,并成功輸出結(jié)果:
OriginalStatus:SourcestringDestinationstring
ModifiedStatus:SourcestringSourcestring
33思考題及答案
?除了使用調(diào)用匯編腳本的方式,還有哪些方法可以使用c語言調(diào)用匯編代碼?
參考答案:
可以使用C語言中的asm關(guān)鍵字來在C語言源碼中嵌入?yún)R編代碼。
實驗3:使用C語言代碼內(nèi)嵌匯編程序
4.工實驗介紹
4.1,關(guān)于本實驗
實現(xiàn)在ARM平臺上通過C語言代碼內(nèi)嵌匯編代碼的方式,將一個整數(shù)類型值,以字節(jié)為單位
從小尾端轉(zhuǎn)到大尾端或者相反的功能。
4.1.2教學(xué)目標
掌握在ARM平臺上實現(xiàn)C語言代碼中內(nèi)嵌匯編代碼的方法。
4.1.3內(nèi)容介紹
通過(:語言代碼內(nèi)嵌匯編代碼,將一個整數(shù)類型值,以字節(jié)為單位從小尾端轉(zhuǎn)到大尾端或者
相反的功能。例如小尾端時32bit整數(shù)值用進制表示為。X12345678,將其以字節(jié)為單位轉(zhuǎn)
換為大尾端存儲后,該值為0x78563422。
4.2實驗任務(wù)操作指導(dǎo)
421倉IJ建示例程序源碼
以下步驟以在華為魚昆鵬云服務(wù)器上執(zhí)行為例。
步驟1創(chuàng)建目錄
執(zhí)行以下命令,創(chuàng)建builtin目錄存放該程序的所有文件,并進入bulitin目錄。
mkdirbuiltin
cdbuiltin
步驟2創(chuàng)建C語言內(nèi)嵌匯編程序源代碼
執(zhí)行以下命令,創(chuàng)建C語言內(nèi)嵌匯編程序源碼globalBuiltin.ee
vimglobalBuiltin.c
代碼內(nèi)容如下:
/?globalBuiltin.c*/
#include<stdio.h>
intmain()
(
intval=0x12345678;
_asm____volatile_(
"movx3,%l\n"
"movw3.w3,ror#8\n"
"bicw3,w3,M)x00nWff\n"
"movx4,%l\n"
"movw4,w4.ror#24\n"
"bicw4.w4,#OxfR)OffUO\n"
"addw3,w4,w3'n"
"mov%0,x3\n"
:"0"(val)
:"w3","w4","cc"
);
printf("outis%x\n",val);
return0;
)
'include<stdio.h>
ntmain。
intval=0xl2:-l";
—asm____volatile—(
/z
IOVx3,%l\n
“movw3,w3,ror#8'n'
“bicw3,w3,#OxOOffOOff\n,z
“movx4,%l\n,z
“movw4,w4,ror#24\n”
“bicw4,w4,#OxffOOffOO\n"?
“addw3,w4,w3'n”
“mov%0,x3\nz,
:(val)
:,z0(val)
);
printf(outis\n,val);
return「1
422進行編譯
保存示例源碼文件,然后退出vim編輯器。在當前目錄中依次執(zhí)行以下命令,進行代碼編譯。
步驟1預(yù)處理
gcc-EglobalBuiltin.c-oglobalBuiltin.i
步驟2編譯
gcc-SglobalBuiltin.i-oglobalBuiltin.s
步驟3匯編
gcc-cglobalBuiltin.s-ogio
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 西安石油大學(xué)《檢驗診斷學(xué)實驗》2023-2024學(xué)年第二學(xué)期期末試卷
- 教科版必修二第三章萬有引力定律同步測試題2024-2025學(xué)年高中畢業(yè)班綜合測試(二)歷史試題含解析
- 四川外國語大學(xué)《普通植物病理學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 重慶經(jīng)貿(mào)職業(yè)學(xué)院《建筑透視》2023-2024學(xué)年第二學(xué)期期末試卷
- 江蘇省南通市崇川區(qū)2025屆六年級下學(xué)期調(diào)研數(shù)學(xué)試卷含解析
- 某地產(chǎn)項目營銷方案
- 房地產(chǎn)營銷模擬訓(xùn)練
- 堅果種植的有機認證流程考核試卷
- 豬的飼養(yǎng)常見疾病識別考核試卷
- 汽車舊車銷售市場調(diào)研數(shù)據(jù)分析考核試卷
- 跨太平洋伙伴關(guān)系協(xié)議(TPP)
- 流浪動物救助中心犬糧公開招投標書范本
- 初中數(shù)學(xué)人教九年級上冊第二十一章 一元二次方程 解一元二次方程-配方法PPT
- 《氣象災(zāi)害預(yù)警信號》課件
- 無機保溫砂漿外墻外保溫系統(tǒng)施工工藝課件
- 高三二輪復(fù)習(xí):產(chǎn)業(yè)轉(zhuǎn)移以富士康的企業(yè)轉(zhuǎn)移為例課件
- 礦井維修電工技能鑒定考試題(高級工)
- 高中語文《祝?!贰罢l是兇手”系列之祥林嫂死亡事件《祝?!诽骄渴綄W(xué)習(xí)(教學(xué)課件) 課件
- 電子商務(wù)稅收法律問題
- 水平泵房水泵聯(lián)合試運轉(zhuǎn)方案及安全技術(shù)措施
- 中國政法大學(xué)社會主義市場經(jīng)濟概論重點歸納及復(fù)習(xí)試題(楊干忠版)
評論
0/150
提交評論