




版權(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)境說明
?華為鯉鵬云主機、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進(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 8 網(wǎng)絡(luò)新世界 (教學(xué)設(shè)計) -部編版道德與法治四年級上冊
- 荊州學(xué)院《專項技能與實踐1》2023-2024學(xué)年第二學(xué)期期末試卷
- 東華大學(xué)《線性系統(tǒng)理論》2023-2024學(xué)年第二學(xué)期期末試卷
- 煙臺科技學(xué)院《信息技術(shù)學(xué)科課程與教學(xué)論》2023-2024學(xué)年第二學(xué)期期末試卷
- 燕山大學(xué)《環(huán)境評價與工業(yè)環(huán)境管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 西安工商學(xué)院《翻譯技術(shù)實踐》2023-2024學(xué)年第二學(xué)期期末試卷
- 長春健康職業(yè)學(xué)院《中國寫意畫》2023-2024學(xué)年第二學(xué)期期末試卷
- 重慶海聯(lián)職業(yè)技術(shù)學(xué)院《高等流體力學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 韶關(guān)學(xué)院《班主任工作方法與藝術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 內(nèi)蒙古鴻德文理學(xué)院《地下水動力學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 心水病的中醫(yī)護(hù)理方案
- 新錄用公務(wù)員任職定級審批表
- 成品油運輸 投標(biāo)方案(技術(shù)方案)
- 體育賽事直播服務(wù)投標(biāo)管理辦法
- 高三沖刺畢業(yè)家長會課件2024-2025學(xué)年
- 【申報書】高職院校高水平專業(yè)群建設(shè)項目申報書
- 《美特斯邦威公司財務(wù)現(xiàn)狀及其盈利能力問題探析(10000字論文)》
- 餐飲服務(wù)電子教案 學(xué)習(xí)任務(wù)4 擺臺技能(4)-西餐宴會餐臺擺臺
- 河南省公安基礎(chǔ)知識真題匯編1
- 2024年江蘇常州市教育基本建設(shè)與裝備管理中心招聘3人歷年高頻難、易錯點500題模擬試題附帶答案詳解
- 《護(hù)理交接班規(guī)范》課件
評論
0/150
提交評論