嵌入式系统上机实验

发布 2022-10-21 07:38:28 阅读 5402

实验(一) 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,吃完一次后则放下...