c语言调用汇编程序实验总结,实验三、C语言程序实验和C语言调用汇编程序实验.doc...

实验三:C语言程序实验和C语言调用汇编程序实验

一、 实验目的

通过实验了解使用 ADS 1.2 编写 C 语言程序,并进行调试。

二、实验设备

硬件:PC 机一台

软件:Windows98/XP/2000 系统,ADS 1.2 集成开发环境

三、实验内容

编写一个汇编程序文件和一个 C 程序文件。汇编程序的功能是初始化堆栈指针和初始化 C 程序的运行环境,然后调跳转到 C 程序运行,这就是一个简单的起动程序。C 程序使用加法运算来计算 1+2+3+...+(N-1)+N 的值(N>0)。

四、实验预习要求

仔细阅读教材中的ARM 指令系统的内容;

熟悉ADS 工程编辑和 AXD 调试的内容。(本实验使用软件仿真)

五、实验步骤

1. 启动 ADS 1.2,使用 ARM Executable Image 工程模板建立一个工程 ProgramC。

2. 建立源文件 Startup.S 和 Test.c,编写实验程序,然后添加到工程中。

3. 设置工程连接地址 RO Base 为 0x40000000,RW Base 为 0x40003000。设置调试入口地址 Image entry point 为 0x40000000。

4. 设置位于开始位置的起始代码段,如图 3.8所示。

图 3.8 设置位于开始位置的起始代码段

5. 编译连接工程,选择【Project】->【Debug】,启动 AXD 进行软件仿真调试。

6. 在 Startup.S 的“B Main”处设置断点,然后全速动行程序。

7. 程序在断点处停止。单步运行程序,判断程序是否跳转到 C 程序中运行。

8. 选择【Processor Views】->【Variables】)打开变量观察窗口,观察全局变量的值,

单步/全速运行程序,判断程序的运算结果是否正确。

六、 实验参考程序

C 语言实验的参考程序见程序清单 3.3。汇编起动代码见程序清单 3.4。

程序清单 3.3 C 语言实验参考程序

#define uint8 unsigned char

#define uint32 unsigned int

#define N 100

uint32 sum;

// 使用加法运算来计算 1+2+3+...+(N-1)+N 的值。(N>0)

void Main(void)

{ uint32 i;

sum = 0;

for(i=0; i<=N; i++)

{ sum += i;

}

while(1);

}

程序清单 3.4 简单的起动代码

; 起动文件。初始化 C 程序的运行环境,然后进入 C 程序代码。

IMPORT |Image$$RO$$Limit|

IMPORT |Image$$RW$$Base|

IMPORT |Image$$ZI$$Base|

IMPORT |Image$$ZI$$Limit|

IMPORT Main ; 声明 C 程序中的 Main()函数

AREA Start,CODE,READONLY ; 声明代码段 Start

ENTRY ; 标识程序入口

CODE32 ; 声明 32 位 ARM 指令

Reset LDR SP,=0x40003F00 ; 初始化 C 程序的运行环境

LDR R0,=|Image$$RO$$Limit|

LDR R1,=|Image$$RW$$Base|

LDR R3,=|Image$$ZI$$Base|

CMP R0,R1

BEQ LOOP1

LOOP0 CMP R1,R3

LDRCC R2,[R0],#4

STRCC R2,[R1],#4

BCC LOOP0

LOOP1 LDR R1,=|Image$$ZI$$Limit|

MOV R2,#0

LOOP2 CMP R3,R1

STRCC R2,[R3],#4

BCC

LOOP2 B Main ; 跳转到 C 程序代码 Main()函数

END

七、思考题

在实验参考程序中,Startup.S 文件的作用是什么?如果没有 Startup.S 文件,C 程序会运行出错吗?

实验程序中的 Main()函数名是否可以更改为其它名字?(提示:Main 只是一个标号)

展开阅读全文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值