PAGE 7
成绩
辽宁工程技术大学上机实验报告
课程名称
汇编语言程序设计——基于ARM体系结构
实验题目
ARM汇编和C语言混合编程
院系
软件学院
专业
软件工程
班级
姓名
学号
实验日期
实验
目的
1.掌握汇编程序访问C程序变量的方法。
2.掌握汇编程序调用C程序的方法。
3.了解C程序调用汇编程序的方法。
实验
准备
硬件:PC机
软件:ADS1.2集成开发环境
实验
进度
本次共有 2 个练习,完成 2 个。
实验
内容
实验
内容
续
1.建立一个新工程。
2.选择CPU。
3.添加启动代码。
4.选择开发工具。
5.建立汇编程序源文件。
6.建立分散加载文件和调试脚本文件。
7.将程序源文件添加到工程中。
8.设置编译链接控制选项。
9.编译链接工程。
10.调试工程。
实验步骤:
1.ARM汇编程序访问C变量
(1)ADS1.2集成开发环境,建立工程test,编辑汇编源程序文件test1.s,和test2.o,将源程序文件添加到工程项目中。建立汇编程序访问所需的C源程序。
(2)编译并链接程序,使用寄存器观察器和内存观察器,运用单步执行方式调试程序test1.s和test2.o,验证ARM汇编程序对C语言变量的访问。
2.汇编程序调用C程序
要求汇编程序通过BL g调用C语言程序中的函数以实现5个数相减,其参数通过R0、R1、R2、R3和堆栈来传递。
(1)汇编程序调用C程序的程序清单test3.s和test4.c。
建立工程work,然后建立汇编程序test3.s及其调用程序test4.c,加入工程,重新编译并链接程序,使用寄存器观察器和内存观察器,运用单步执行方式调试程序,验证ARM汇编程序对C语言程序的调用。调试时使用step方式,注意观察寄存器的变化,执行到BL g指令时可通过step in方式,单步进入C语言程序。然后通过单步执行实现5个数相减,调用函数运行完毕后程序又回到汇编语言程序。整个调试过程演示了汇编语言程序调用C语言程序的过程。
3.C程序调用ARM汇编程序
要求使C语言程序test6.c实现将源字符串srcstr复制到目标字符串dststr中,其中字符串复制函数strcopy由汇编程序实现,该段汇编程序在test5.s中。
实验
分析
实验
分析
续
实验
分析
续
实验
分析
续
1.ARM汇编程序访问C变量
程序代码:
test1.s
preserve8
area reset,code,readonly
entry
code32
export armcode
import globvar
armcode ldr r1,=globvar
ldr r0,[r1]
add r0,r0,#2
str r0,[r1]
mov pc,lr
end
test2.c
#include
int globvar=3;
int _main()
{
return (0);
}
实验截图:
分析:在0x8018的位置上实现了3+2。
2.汇编程序调用C程序
程序代码:
test3.s
area reset,code,readonly
entry
code32
export reset;arm_add
import g
ldr sp,=0 str lr,[sp,#-4]!
mov r0,#20
mov r1,#1
mov r2,#2
mov r3,#3
mov r4,#4
str r4,[sp,#-4]!
bl g
add sp,sp,#4
ldr pc,[sp],#4
end
test4.c
#include
int g(int a,int b,int c,int d,int e)
{
return a-b-c-d-e;
}
运行结果截图:
实验分析:
在ARM汇编语言程序中,将5个数分别存入寄存器中,然后通过调用C语言程序,进行相减,最后将结果存到R0中。
3.C程序调用ARM汇编程序
程序代码:
test5.s
area SCopy,code,readonly