基础代码示例实验手册_第1页
基础代码示例实验手册_第2页
基础代码示例实验手册_第3页
基础代码示例实验手册_第4页
基础代码示例实验手册_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基础代码示例实验手册

目录

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论