版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基础代码示例实验手册
目录
1课程介绍........................................................................3
1.1简介........................................................................................3
1.2内容描述....................................................................................3
1.3读者知识背景................................................................................3
1.4实验环境说明................................................................................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创建示例程序源码..........................................................................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创建示例程序源码..........................................................................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创建示例程序源码..........................................................................9
4.2.2进行编译..................................................................................11
4.2-3进行运行..................................................................................11
4-2.4思考题及答案..............................................................................11
X课程介绍
工.1简介
本手册适用于学习ARM平台汇编课程的学生进行实验练习,完成本实验手册后,您将能更加
充分理解GNUARM汇编代码运行环境的搭建、配置及编译运行,掌握在华为鲸鹏云服务器上
进行环境配置°
1.2内容描述
本实验指导书通过在华为鲸鹏云服务器上,编译运行3个不同功能的示例程序。完成实验操作
后,读者会掌握基本的汇编程序编写,ARMv8开发编译环境的配置以及加深对ARM平台的了
解。
1.3读者知识背景
本课程为ARM平台汇编基础课程,为了更好地掌握本书内容,阅读本书的读者应首先具备以
下基本条件:
•具备基本的Linux命令能力。
14实验环境说明
•华为鲤鹏云主机、0penEuler20.03操作系统;
•安装gcc7.3+版本;
•每套实验环境可供1名学员上机操作。
mkdirhello
cdhello
步骤2创建示例程序源码hello.s
执行以下命令,创建示例程序源码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编辑器。在当前目录中依次执行以下命令,进行代码编译运
行。
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示例程序已经在华为鲸鹏云服务器上通过
编译和运行,并成功输出结果。
222思考题及答案
•思考下同样的代码在X86平台能否运行,为什么?
参考答案:
不能,因为X86平台使用的是复杂指令集(CISC),而我们实验中使用到的华为鲸鹏云服务器是
基于ARM平台的,使用的是精简指令集(RISC),二者的汇编指令差异较大。
3实验2:使用C语言代码调用汇编程序
3」实验介绍
3.1.1关于本实验
实现ARM平台上通过C语言源码来调用汇编源码中的代码。
3.1.2教学目标
掌握在ARM平台上使用C语言源码来调用汇编源码的方法。
3.1.3实验内容介绍
该汇编代码是针对Aarch64架构的。在汇编程序中,用.global定义一个全局函数strcpyi,然
后该函数就可以在C代码中用extern关键字加以声明,然后直接调用。
3.2实验任务操作指导
321创建示例程序源码
以下步骤以在华为鲸鹏云服务器上执行为例。
步骤1创建目录
执行以下命令,创建called目录存放该程序的所有文件,并进入called目录。
rnkdircalled
cdcalled
步骤2创建globalCalling.c源代码
执行以下命令,创建示例调用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创建globalCalled.S源代码
执行以下代码命令,创建被调用的汇编语言程序源码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编辑器。在当前目录中依次执行以下命令,进行代码编译运
行。
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语言代码调用汇编程序已经在华为鲸鹏云服务
器上通过编译和运行,并成功输出结果:
OriginalStatus:SourcestringDestinationstring
ModifiedStatus:SourcestringSourcestring
33思考题及答案
•除了使用调用汇编脚本的方式,还有哪些方法可以使用c语言调用汇编代码?
参考答案:
可以使用C语言中的asm关键字来在C语言源码中嵌入汇编代码。
实验3:使用C语言代码内嵌汇编程序
4.工实验介绍
4.1,关于本实验
实现在ARM平台上通过C语言代码内嵌汇编代码的方式,将一个整数类型值,以字节为单位
从小尾端转到大尾端或者相反的功能。
4.1.2教学目标
掌握在ARM平台上实现C语言代码中内嵌汇编代码的方法。
4.1.3内容介绍
通过(:语言代码内嵌汇编代码,将一个整数类型值,以字节为单位从小尾端转到大尾端或者
相反的功能。例如小尾端时32bit整数值用进制表示为。X12345678,将其以字节为单位转
换为大尾端存储后,该值为0x78563422。
4.2实验任务操作指导
421仓IJ建示例程序源码
以下步骤以在华为鱼昆鹏云服务器上执行为例。
步骤1创建目录
执行以下命令,创建builtin目录存放该程序的所有文件,并进入bulitin目录。
mkdirbuiltin
cdbuiltin
步骤2创建C语言内嵌汇编程序源代码
执行以下命令,创建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编辑器。在当前目录中依次执行以下命令,进行代码编译。
步骤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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 信阳师范大学《数据仓库实验》2023-2024学年第一学期期末试卷
- 信阳师范大学《量子力学》2022-2023学年第一学期期末试卷
- 用绘画描绘时代风貌计划
- 《机械零件加工》课件第二篇模块一项目二任务一
- 幼儿园用品租赁合同三篇
- 西南医科大学《数据库原理及应用》2021-2022学年第一学期期末试卷
- 西南医科大学《C语言程序设计》2023-2024学年第一学期期末试卷
- 西南交通大学《数据结构原理》2021-2022学年第一学期期末试卷
- 西南交通大学《嵌入式系统》2022-2023学年第一学期期末试卷
- 西京学院《计算机视觉技术》2022-2023学年第一学期期末试卷
- 电动汽车充电基础设施建设实施方案
- 2024中小学校园食品安全和膳食经费管理工作指引
- 2024年世界职业院校技能大赛中职组“法律实务组”赛项考试题库(含答案)
- 开放英语(1)期末考试模拟试题(及答案)
- 智慧医院综合管理解决方案(医院综合监控中心)
- 2024-2030年中国水利工程行业发展规划投资战略分析报告
- 常见消防安全隐患图解精美
- 2024年5月26日河南省事业单位联考《公共基础知识》试题
- 生物化学习题库+参考答案
- 企业劳动人事合规的法律咨询与服务行业市场调研分析报告
- 【申报书】高职院校高水平专业群建设项目申报书
评论
0/150
提交评论