版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rè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é)目標(biāo)..................................................................................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é)目標(biāo).................................................................................6
3.1.3實驗內(nèi)容介紹.............................................................................6
3-2實驗任務(wù)操作指導(dǎo)............................................................................7
3.2.1創(chuàng)建示例程序源碼..........................................................................7
322進(jìn)行編譯運行...............................................................................8
3.3思考題及答案................................................................................9
4實驗3:使用C語言代碼內(nèi)嵌匯編程序.............................................9
4.1實驗介紹...................................................................................9
4.1.1關(guān)于本實驗................................................................................9
4.1.2教學(xué)目標(biāo)..................................................................................9
4-1-3內(nèi)容介紹...................................................................................9
4.2實驗任務(wù)操作指導(dǎo)...........................................................................9
4-2.1創(chuàng)建示例程序源碼..........................................................................9
4.2.2進(jìn)行編譯..................................................................................11
4.2-3進(jìn)行運行..................................................................................11
4-2.4思考題及答案..............................................................................11
X課程介紹
工.1簡介
本手冊適用于學(xué)習(xí)ARM平臺匯編課程的學(xué)生進(jìn)行實驗練習(xí),完成本實驗手冊后,您將能更加
充分理解GNUARM匯編代碼運行環(huán)境的搭建、配置及編譯運行,掌握在華為鯨鵬云服務(wù)器上
進(jìn)行環(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)境說明
?華為鯉鵬云主機(jī)、0penEuler20.03操作系統(tǒng);
?安裝gcc7.3+版本;
?每套實驗環(huán)境可供1名學(xué)員上機(jī)操作。
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進(jìn)行編譯運行
保存示例源碼文件,然后退出vim編輯器。在當(dāng)前目錄中依次執(zhí)行以下命令,進(jìn)行代碼編譯運
行。
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é)目標(biāo)
掌握在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目錄存放該程序的所有文件,并進(jìn)入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進(jìn)行編譯運行
保存示例源碼文件,然后退出vim編輯器。在當(dāng)前目錄中依次執(zhí)行以下命令,進(jìn)行代碼編譯運
行。
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é)目標(biāo)
掌握在ARM平臺上實現(xiàn)C語言代碼中內(nèi)嵌匯編代碼的方法。
4.1.3內(nèi)容介紹
通過(:語言代碼內(nèi)嵌匯編代碼,將一個整數(shù)類型值,以字節(jié)為單位從小尾端轉(zhuǎn)到大尾端或者
相反的功能。例如小尾端時32bit整數(shù)值用進(jìn)制表示為。X12345678,將其以字節(jié)為單位轉(zhuǎn)
換為大尾端存儲后,該值為0x78563422。
4.2實驗任務(wù)操作指導(dǎo)
421倉IJ建示例程序源碼
以下步驟以在華為魚昆鵬云服務(wù)器上執(zhí)行為例。
步驟1創(chuàng)建目錄
執(zhí)行以下命令,創(chuàng)建builtin目錄存放該程序的所有文件,并進(jìn)入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進(jìn)行編譯
保存示例源碼文件,然后退出vim編輯器。在當(dāng)前目錄中依次執(zhí)行以下命令,進(jìn)行代碼編譯。
步驟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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中考激勵發(fā)言稿(9篇)
- 公司銷售年度工作總結(jié)15篇
- 快遞站實習(xí)報告
- 標(biāo)志課程設(shè)計說明
- 活板課程設(shè)計
- 小學(xué)教育教學(xué)工作計劃范文合集6篇
- 舊車買賣合同的法律問題3篇
- 機(jī)構(gòu)人民幣外幣活期存款協(xié)議3篇
- 景區(qū)攤位出租合同3篇
- 標(biāo)準(zhǔn)采購委托書格式模板3篇
- 2024-2025學(xué)年寒假致學(xué)生家長的一封信(安全版)
- 人才引進(jìn)政策購房合同模板
- 《兩用物項證》課件
- 《電梯維保規(guī)則》課件
- DB54T 0425.1-2024 公共數(shù)據(jù) 數(shù)據(jù)元規(guī)范 第一部分:總則
- 2024年高考政治選必二《法律與生活》重要知識問題梳理總結(jié)
- 孕早期nt檢查課件
- 期末復(fù)習(xí)(試題)-2024-2025學(xué)年三年級上冊數(shù)學(xué)蘇教版
- 檢驗科新進(jìn)人員崗前培訓(xùn)
- 小紅書種草營銷師模擬題及答案(單選+多選+判斷)
- 浙江省杭州市2023-2024學(xué)年高一上學(xué)期1月期末英語試題 含解析
評論
0/150
提交評論