资源描述
嵌入式系统 实验报告
实验名称:
汇编指令实验2
班 级:
姓 名:
学 号:
实验地点:
日 期:
一、实验目的:
1. 掌握ARM数据处理指令的使用方法;
2. 了解ARM指令灵活的第2个操作数。
二、实验环境:
硬件:PC机 一台
软件:Windows98/XP/2000系统,ADS 1.2集成开发环境
三、实验内容和要求:
1. 使用MOV和MVN指令访问ARM通用寄存器;
2. 使用ADD、SUB、AND、ORR、CMP、TST等指令完成数据加减运算及逻辑运算。
四、实验步骤:
1. 启动ADS 1.2,使用ARM Executable Image工程模板建立一个工程Instruction2。
2. 建立汇编源文件TEST3.S,编写实验程序,然后添加到工程中。
3. 设置工程连接地址RO Base为0x40000000,RW Base为0x40003000。设置调试入
口地址Image entry point为0x40000000。
4. 编译连接工程,选择【Project】->【Debug】,启动AXD进行软件仿真调试。
5. 打开寄存器窗口(Processor Registers),选择Current项监视各寄存器的值。
6. 单步运行程序,观察寄存器值的变化。
五、 实验结果与分析(含程序、数据记录及分析和实验总结等):
X EQU 11 ; 定义X的值为11
Y EQU 8 ; 定义Y的值为8
BIT23 EQU (1<<23) ; 定义BIT23的值为0x00800000
AREA Example3,CODE,READONLY ; 声明代码段Example3
ENTRY ; 标识程序入口
CODE32 ; 声明32位ARM指令
START ; 使用MOV、ADD指令实现:R8 = R3 = X + Y
MOV R0,#X ; R0 <= X,X的值必须是8位图数据
MOV R1,#Y ; R1 <= Y,Y的值必须是8位图数据
ADD R3,R0,R1 ; 即是R3 = X + Y
MOV R8,R3 ; R8 <= R3
; 使用MOV、MVN、SUB指令实现:R5 = 0x5FFFFFF8 - R8 * 8
MVN R0,#0xA0000007 ; 0xA0000007的反码为0x5FFFFFF8
SUB R5,R0,R8,LSL #3 ; R8左移3位,结果即是 R8 * 8
; 使用CMP指令判断(5*Y/2)>(2*X)吗?若大于则R5 = R5&0xFFFF0000,否则R5 = R5|0x000000FF
MOV R0,#Y
ADD R0,R0,R0,LSL #2 ; 计算R0 = Y + 4*Y = 5*Y
MOV R0,R0,LSR #1 ; 计算R0 = 5*Y/2
MOV R1,#X
MOV R1,R1,LSL #1 ; 计算R1 = 2*X
CMP R0,R1 ; 比较R0和R1,即(5*Y/2)和(2*X)进行比较
LDRHI R2,=0xFFFF0000 ; 若(5*Y/2)>(2*X),则R2 <= 0xFFFF0000
ANDHI R5,R5,R2 ; 若(5*Y/2)>(2*X),则R5 = R5&R2
ORRLS R5,R5,#0x000000FF ; 若(5*Y/2)≤(2*X),则R5 = R5|0x000000FF
; 使用TST指令测试R5的bit23是否为1,若是则将bit6位清零(使用BIC指令)
TST R5,#BIT23
BICNE R5,R5,#0x00000040
B START
END
实验截图:
六、教师评语:
实验成绩: 教师:(签名要全称) 年 月 日
展开阅读全文