精品文档
南京邮电大学通信学院
实验报告
实验名称: 基于 ADS 开发环境的程序设计
嵌入式 Linux 交叉开发环境的建立
嵌入式 Linux 环境下的程序设计
多线程程序设计
课程名称嵌入式系统B
班级学号
姓名
开课学期2016/2017 学年第 2 学期
.
精品文档
实验一 基于 ADS 开发环境的程序设计一、实验目的
1、学习 ADS 开发环境的使用;
2、学习和掌握 ADS 环境下的汇编语言及C 语言程序设计;
3、学习和掌握汇编语言及C 语言的混合编程方法。
二、实验内容
1、编写和调试汇编语言程序;
2、编写和调试 C 语言程序;
3、编写和调试汇编语言及C 语言的混合程序;
三、实验过程与结果
1、寄存器 R0 和 R1中有两个正整数,求这两个数的最大公约数,结果保存
在 R3中。
代码 1:使用 C内嵌汇编
#include
int find_gcd(int x,int y)
{
intgcdnum;
__asm
{
MOV
r0, x
MOV
r1, y
LOOP:
CMP
r0, r1
SUBLT r1, r1, r0
SUBGT r0, r0, r1
BNELOOP
MOVr3, r0
MOV gcdnum,r3
//stop
//Bstop
END
}
return gcdnum;
}
int main()
{
int a;
a=find_gcd(18,9);
.
精品文档
printf("gcdnum:%d\n",a);
return 0;
}
代码 2:使用纯汇编语言
AREAexample1,CODE,readonly
ENTRY
MOV
r0, #4
MOV
r1, #9
start
CMP
r0, r1
SUBLT r1, r1, r0
SUBGT r0, r0, r1
BNE
start
MOV
r3, r0
stop
Bstop
END
2、寄存器 R0 、R1 和 R2 中有三个正整数,求出其中最大的数,并将其保存
在 R3中。
代码 1:使用纯汇编语言
AREA examp,CODE,READONLY
ENTRY
MOV R0,#10
MOV R1,#30
MOV R2,#20
Start
CMP R0,R1
BLE lbl_a
CMP R0,R2
MOVGT R3,R0
MOVLE R3,R2
B lbl_b
lbl_a
CMP R1,R2
MOVGT R3,R1
MOVLE R3,R2
lbl_b
.
END
代码 2:使用 C 内嵌汇编语言
#include
intfind_maxnum(int a,int b,int c)
.
精品文档
{
int x;
__asm
{
MOV r0,a
MOV r1,b
MOV r2,c
CMP r0,r1
BLE lbl_a//相等跳转
CMP r0,r2
MOVGT x,r0
MOVLE x,r2
//MOV r3,x
lbl_b
lbl_a:
CMP r1,r2 MOVGT x,r1 MOVLE x,r2
//MOV r3,x
lbl_b:
}
return x;
}
int for_r3(int t)
{
//int t;
__asm
{
MOV r3,t
}
return 0;
}
int main()
{
int a;
a = find_maxnum(130,50,70);
for_r3(a);
printf("max:%d\r\n",a);
return 0;
}
3、编程实现将从地址source 开始的 30 个字节数据复制到地址为dest 的地
.
精品文档
方。
代码 :
NUM
EQU30
AREA
Init, CODE, READONL
Y
CODE32
ENTRY
START
LDR
R0,
=SOURCE
LDR
R1,
=DEST
MOV
R2,
#NUM
MOV
SP, #0X400
BLKCOPY
MOV
R3,
R2,
LSR
#3
BEQ
COPYWORDS
STMFD
SP!,
{R4-R11}
OCTCOPY
LDMIA
R0!,
{R4-R11}
STMIA
R1!,
{R4-R11}
SUBS
R3,
R3,
#1
BNE
OCTCOPY
LDMFD
SP!,
{R4-R11}
COPYWORDS
ANDS
R2,R2,
#7
BEQ
STOP
WORDCOPY
LDR
R3,
[R0],
#4
STR
R3,
[R1],
#4
SUBS
R2,
R2,
#1
BNE
WORDCOPY
STOP
STOP
LTORG
SOURCEDCD1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,