




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
基礎代碼示例實驗手冊
目錄
1課程介紹........................................................................3
1.1簡介........................................................................................3
1.2內容描述....................................................................................3
1.3讀者知識背景................................................................................3
1.4實驗環(huán)境說明................................................................................3
2實驗1:hello-world示例程序...................................................4
2.1實驗介紹...................................................................................4
2.1.1關于本實驗................................................................................4
2.1.2教學目標..................................................................................4
2.1.3實驗內容介紹..............................................................................4
2.2實驗任務操作指導...........................................................................4
2.2.1創(chuàng)建示例程序源碼..........................................................................4
2.2.2思考題及答案..............................................................................6
3實驗士使用C語言代碼調用匯編程序.............................................6
3-1實驗介紹.....................................................................................6
3.11關于本實驗...............................................................................6
3.1.2教學目標.................................................................................6
3.1.3實驗內容介紹.............................................................................6
3-2實驗任務操作指導............................................................................7
3.2.1創(chuàng)建示例程序源碼..........................................................................7
322進行編譯運行...............................................................................8
3.3思考題及答案................................................................................9
4實驗3:使用C語言代碼內嵌匯編程序.............................................9
4.1實驗介紹...................................................................................9
4.1.1關于本實驗................................................................................9
4.1.2教學目標..................................................................................9
4-1-3內容介紹...................................................................................9
4.2實驗任務操作指導...........................................................................9
4-2.1創(chuàng)建示例程序源碼..........................................................................9
4.2.2進行編譯..................................................................................11
4.2-3進行運行..................................................................................11
4-2.4思考題及答案..............................................................................11
X課程介紹
工.1簡介
本手冊適用于學習ARM平臺匯編課程的學生進行實驗練習,完成本實驗手冊后,您將能更加
充分理解GNUARM匯編代碼運行環(huán)境的搭建、配置及編譯運行,掌握在華為鯨鵬云服務器上
進行環(huán)境配置°
1.2內容描述
本實驗指導書通過在華為鯨鵬云服務器上,編譯運行3個不同功能的示例程序。完成實驗操作
后,讀者會掌握基本的匯編程序編寫,ARMv8開發(fā)編譯環(huán)境的配置以及加深對ARM平臺的了
解。
1.3讀者知識背景
本課程為ARM平臺匯編基礎課程,為了更好地掌握本書內容,閱讀本書的讀者應首先具備以
下基本條件:
?具備基本的Linux命令能力。
14實驗環(huán)境說明
?華為鯉鵬云主機、0penEuler20.03操作系統(tǒng);
?安裝gcc7.3+版本;
?每套實驗環(huán)境可供1名學員上機操作。
mkdirhello
cdhello
步驟2創(chuàng)建示例程序源碼hello.s
執(zhí)行以下命令,創(chuàng)建示例程序源碼hello.s0
vimhello.s
代碼內容如下:
.(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)在華為鯨鵬云服務器上通過
編譯和運行,并成功輸出結果。
222思考題及答案
?思考下同樣的代碼在X86平臺能否運行,為什么?
參考答案:
不能,因為X86平臺使用的是復雜指令集(CISC),而我們實驗中使用到的華為鯨鵬云服務器是
基于ARM平臺的,使用的是精簡指令集(RISC),二者的匯編指令差異較大。
3實驗2:使用C語言代碼調用匯編程序
3」實驗介紹
3.1.1關于本實驗
實現(xiàn)ARM平臺上通過C語言源碼來調用匯編源碼中的代碼。
3.1.2教學目標
掌握在ARM平臺上使用C語言源碼來調用匯編源碼的方法。
3.1.3實驗內容介紹
該匯編代碼是針對Aarch64架構的。在匯編程序中,用.global定義一個全局函數(shù)strcpyi,然
后該函數(shù)就可以在C代碼中用extern關鍵字加以聲明,然后直接調用。
3.2實驗任務操作指導
321創(chuàng)建示例程序源碼
以下步驟以在華為鯨鵬云服務器上執(zhí)行為例。
步驟1創(chuàng)建目錄
執(zhí)行以下命令,創(chuàng)建called目錄存放該程序的所有文件,并進入called目錄。
rnkdircalled
cdcalled
步驟2創(chuàng)建globalCalling.c源代碼
執(zhí)行以下命令,創(chuàng)建示例調用C語言程序源碼globalCalling.c。
vimglobalCalling.c
代碼內容如下:
/*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)建被調用的匯編語言程序源碼globalCalled.So
vimglobalCalled.S
代碼內容如下:
/*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語言代碼調用匯編程序已經(jīng)在華為鯨鵬云服務
器上通過編譯和運行,并成功輸出結果:
OriginalStatus:SourcestringDestinationstring
ModifiedStatus:SourcestringSourcestring
33思考題及答案
?除了使用調用匯編腳本的方式,還有哪些方法可以使用c語言調用匯編代碼?
參考答案:
可以使用C語言中的asm關鍵字來在C語言源碼中嵌入?yún)R編代碼。
實驗3:使用C語言代碼內嵌匯編程序
4.工實驗介紹
4.1,關于本實驗
實現(xiàn)在ARM平臺上通過C語言代碼內嵌匯編代碼的方式,將一個整數(shù)類型值,以字節(jié)為單位
從小尾端轉到大尾端或者相反的功能。
4.1.2教學目標
掌握在ARM平臺上實現(xiàn)C語言代碼中內嵌匯編代碼的方法。
4.1.3內容介紹
通過(:語言代碼內嵌匯編代碼,將一個整數(shù)類型值,以字節(jié)為單位從小尾端轉到大尾端或者
相反的功能。例如小尾端時32bit整數(shù)值用進制表示為。X12345678,將其以字節(jié)為單位轉
換為大尾端存儲后,該值為0x78563422。
4.2實驗任務操作指導
421倉IJ建示例程序源碼
以下步驟以在華為魚昆鵬云服務器上執(zhí)行為例。
步驟1創(chuàng)建目錄
執(zhí)行以下命令,創(chuàng)建builtin目錄存放該程序的所有文件,并進入bulitin目錄。
mkdirbuiltin
cdbuiltin
步驟2創(chuàng)建C語言內嵌匯編程序源代碼
執(zhí)行以下命令,創(chuàng)建C語言內嵌匯編程序源碼globalBuiltin.ee
vimglobalBuiltin.c
代碼內容如下:
/?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預處理
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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 餐飲業(yè)食品安全管理體系認證合同
- 小米c面試題及答案
- 市容環(huán)衛(wèi)外包方案
- 輕工產品倉儲倉單質押擔保協(xié)議
- 汽車售后服務網(wǎng)點車輛訂購及維修服務合同
- 社區(qū)改造設計建筑方案
- 生態(tài)造林工程投標方案
- 黨章知識課件
- 數(shù)學小升初面試題及答案
- 體育協(xié)會換屆方案
- 廠房圍墻承包協(xié)議書
- 國際壓力性損傷-潰瘍預防和治療臨床指南(2025年版)解讀
- 熊貓旅居簽署協(xié)議書
- 心衰藥物治療進展課件
- 化工儀表管理與維護
- 2024年“藍橋杯”科學素養(yǎng)競賽考試題庫(含答案)
- 風力發(fā)電運維值班員(技師)職業(yè)技能鑒定考試題(附答案)
- 2025年上半年潛江市城市建設發(fā)展集團招聘工作人員【52人】易考易錯模擬試題(共500題)試卷后附參考答案
- 廣東省惠州市惠城區(qū)2024-2025 學年度第一學期期末教學質量檢測八年級道德與法治試卷及答案(含答案)
- 血站生物安全培訓課件
- 現(xiàn)場外傷急救技術
評論
0/150
提交評論