实验(一) ads使用与汇编指令实验。
1. 实验目的。
1) 了解ads的用途;
2) 学习ads的安装。
3) 掌握ads的基本使用方法。
4) 掌握arm汇编语言常用指令。
2. 实验器件。
pc一台。3. 实验步骤。
1) 加载/存储及移位指令实验。
1) 打开ads集成开发环境,新建一个工程项目文件,2) 新建一个。s文件,输入以下汇编**。
注意:根据编译器的规定,除了标号以外,所有的指令都需要在前面加上空格,否则程序会在编译时报错,这里建议使用tab键对齐指令。
area ldr_str_lsl_lsr,code,readonly
entry加载/存储指令以及移位指令。
startpro1
ldr r0,=0x0000
ldr r1,=0x0004
ldr r0,[r1];将存储器地址为r1的字数据读入寄存器r0
ldr r0,=0x0000
ldr r1,=0x0004
ldr r2,=0x0008
ldr r0,[r1,r2] ;将存储器地址为r1+r2的字数据读入寄存器r0
ldr r0,=0x0000
ldr r1,=0x0004
ldr r2,=0x0008
ldr r0,[r1],r2 ;将存储器地址为r1的字数据读入寄存器r0,并将新地址r1+r2写入r1
ldr r0,=0x0000
ldr r1,=0x0004
ldr r0,[r1,#8] ;将存储器地址为r1+8的字数据读入寄存器r0
and r0,r0,#0 ;保持r0的0位,其于位清0
ldr r1,=0x0004
ldr r0,[r1,#8]! 将存储器地址为r1+8的字数据读入寄存器r0,并将新地址r1+8写入r1
ldr r0,=0x0000
ldr r1,=0x0004
ldr r0,[r1],#8 ;将存储器地址为r1的字数据读入寄存器r0,并将新地址r1+8写入r1
ldr r0,=0x0000
ldr r1,=0x0004
ldr r2,=0x0008
ldr r0,[r1,r2,lsl#2]! 将存储器地址为r1+r2×4的字数据读入寄存器r0,并将新地址r1+r2×4写入r1
ldr r0,=0x0000
ldr r1,=0x0004
ldr r2,=0x0008
ldr r0,[r1],r2,lsr#2 ;将存储器地址为r1的字数据读入寄存器r0,并将新地址;r1+r2/4写入r1
pro2 ldr r0,=0x0000
ldr r1,=0x0004
str r0,[r1],#8 ;将r0中的字数据写入以r1为地址的存储器中, 并将新地址r1+8写入r1
str r0,[r1,#8] ;将r0中的字数据写入以r1+8为地址的存储器中。
b pro1
end3) 编写完毕,保存并添加到已建立的工程项目文件中。
4) 编译项目文件(此步会生成。axf文件)
5) 在编译完成后单击debug按钮进入调试环境axd
6) 将axd设置成软件**方式。(实验报告中,要求此步骤的截图)
7) 打开 processor views选项下的registers→current,出现当前模式下的寄存器观察窗口。(实验报告中要求此步骤的截图。)
8) 使用工具栏的按钮,可以用step、step in、step out、run to cursor、go、stop等几种方式来控制程序的运行或停止,注意查看寄存器观察窗口中各寄存器内容的变化,对应程序分析结构是否正确。记录寄存器的最终结果(要求截图)!
2) 数据处理指令和程序状态寄存器访问指令实验。
实验步骤与1)相同,在新建的。s文件中输入以下汇编**。
area data_psr,code,readonly
entry数据处理指令和程序状态寄存器访问指令。
pro1 mvn r0,#3 ;将立即数取反传送到寄存器r0中,十进制3=二进制000...0011,取反以后,111...1100,即十六进制的fffffffc
ldr r0,=0x0000 ;将0x0000赋值给r0
ldr r1,=0x0004 ;将0x0004赋值给r1
cmp r1,r0 ;将寄存器r1的值与寄存器r0的值相减(r1-r0),并根据结果设置cpsr的标志位,与c位有关,因为没有产生借位,所以c位=1,其于的n、z、v、q为0,因为是在管理模式,所以0~4位是0b10011=13
mrs r0,cpsr ;传送cpsr的内容到r0,这样传送主要是为了便于观察cpsr的值。
cmp r1,#100 ;将寄存器r1的值与立即数100相减,并根据结果设置cpsr的标志位。
mrs r0,cpsr ;传送cpsr的内容到r0
ldr r0,=0x20000013 ;将0x20000013赋值给r0
msr cpsr_cf,r0 ;传送r0的内容到cpsr
c 指cpsr中的control field ( psr[7:0])
f 指flag fieldpsr[31:24])
x 指extend fieldpsr[15:8])
s 指status fieldpsr[23:16])
mrs r1,cpsr ;传送spsr的内容到r1,这样传送主要是为了观察cpsr的值。
teq r0,r1 ;将寄存器r0的值与寄存器r1的值按位异或,并根据结果设置cpsr的标志位。
mrs r0,cpsr ;传送cpsr的内容到r0,为0x40000013,因为运算结果是0,所以z位为1,ldr r0,=0x01 ;
teq r0,#0x10 ;
mrs r0,cpsr ;传送cpsr的内容到r0
ldr r0,=0x00 ;
ldr r1,=0x01 ;
ldr r2,=0x02 ;
add r0,r1,r2 ;r0=r1+r2
add r0,r1,#16 ;r0=r1+16
add r0,r1,r2,lsl#1 ;r0=r1+(r2<<1)
sub r0,r0,r1 ;r0=r0-r1
rsb r0,r1,r0 ;r0=r0-r1逆向减法指令。
and r0,r0,#1 ;逻辑与,保持r0的0位,其余位清零
orr r0,r0,#3 ;逻辑或,设置r0的位,其余位保持不变。
eor r0,r0,#0x0c ;逻辑异或,反转r0的位,其余位保持不变。
bic r0,r0,#3 ;该指令清除 r0 中的位,其余的位保持不变。
mov r0,r1 ;将寄存器r1的值赋给r0
mov r1,r0,lsl#3 ;将寄存器r0的值左移3位后传送到r1
mov r14,#0x8000 ;
mov pc,r14 ;将寄存器r14的值传送到pc,常用于子程序返回。
end2)观察程序运行过程中寄存器的状态!对应程序分析寄存器的结构是否正确。
3) 跳转指令实验。
1)实验步骤与1)相同,在新建的。s文件中输入以下汇编**。
area b_jump,code,readonly
entry跳转指令。
startpro1 ldr r0,=&0
bl pro2 ;无条件跳转到pro2处执行,并将当前pc值保存到r14中,r14为子程序链接寄存器(lr)
cmp r0,#
beq pro3 ;当r0=4时,跳转到pro3
pro2 add r0,r0,#&1 ;子程序循环加1,直到r0=4
mov pc,lr ;子程序执行完毕返**用处。
pro3 ldr r0,=&8
b保留。end
2)观察程序运行过程中寄存器的状态!对应程序分析寄存器的结果是否正确。
实验(二) 汇编语言和c语言的混合编程。
1. 实验目的。
1) 熟悉ads环境下的混合编程。
2) 学习使用ads环境下编译、**、调试并跟踪程序的方法。
2. 实验器件。
pc一台。3. 实验内容。
1) 在汇编语言中对寄存器r0、r1、r2赋值,通过调用c语言中的加法程序,将三个寄存器的值相加,加法运算后的结构返回到r0。
2) 首先编写汇编和c语言程序,通过axd调试程序,使程序单步运行,在寄存器窗口观察程序过程及结果。
3) 编写汇编程序,实现三个数的加法计算。并执行程序,观察程序的运行结果,并与内容(2)的运行结果相比较。
4. 实验步骤。
1) 打开ads集成开发环境,新建一个项目文件。
2) 新建一个文件,在新建的文件中编写系统初始化的汇编**。这个程序是该项目文件的入口程序。
area asm,code,readonly
import add
entryldr r0,=0x1
ldr r1,=0x2
ldr r2,=0x3
bl addresult s**ed in r0
b .end
3) 新建一个文件,在新建的文件中编写一段加法程序,被汇编调用。
int add(int a, int b, int c)
return a+b+c;
4) 打开axd调试程序,单步运行,观察寄存器状态。
5) 新建一个项目文件,编写实现三个数加法运算的汇编程序,在axd中调试程序,单步执行,观察寄存器状态。
实验(三)linux的相关操作。
1. 实现与windows的文件共享。
1) 启动虚拟机下的“linux操作系统”
2) 点击“虚拟机”→ 安装vmware工具”,弹出“/mnt/cdrom”,此文件夹下包含。和。
嵌入式系统实验
哈尔滨德强学院。实验报告 题目 嵌入式系统设计。院 系 德强商务学院计算机系。姓名 指导教师 多智华。系主任 葛雷 2010年10月15日。实验。一 使用ads1.2调试程序。一 实验内容和目的。1 熟悉adtide adt2000 support 运行环境。2 使用adtide adt2000 s...
嵌入式系统 实验
实验一 基于ads的c语言程序实验。一 实验环境。pc机一台 ads 1.2集成开发环境一套。二 实验目的。通过实验了解使用ads 1.2编写c语言程序,并进行调试。三 实验内容。在c语言的环境内开发应用程序,一般需要一个汇编的启动程序,从汇编的启动程序,跳到c语言下的主程序,然后,执行c程序,具体...
《嵌入式系统实验》作业
用于验证一个常见的冲突问题。在这个问题中,有5个哲学家坐在一个圆桌上。食物摆在桌子中间,桌子上总共有5把叉子,每个哲学家的左右手各有一把。因为吃饭时,哲学家需要同时使用左手和右手的叉子,所以哲学家必须和他左边和右边的哲学家共享叉子。在这个实验中,假定哲学家每次吃饭的时间长度为单位1,吃完一次后则放下...