实验二_ARM汇编语言程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二ARM汇编语言程序设计
实验目的
1、了解ARM汇编语言程序的结构特点
2、了解ARM汇编语言程序的编写方法
3、掌握用ARM汇编语言设计简单程序
实验仪器设备及软件
ARM实验箱,计算机,ADS程序开发软件
实验原理
1、存储空间的格式
ARM920将存储空间视为从0开始由字节组成的线性集合,字节0-3中保存了第一个字,字节4-7中保存了第二个字,依此类推。字节还可以按小端格式或大端格式排列。ARM实验箱中存储器的配置见附录C。
2、ARM的寄存器
ARM状态下任何时刻都可以看到16个通过寄存器(r0-r15),1或2个状态寄存器(CPSR,SPSR),在特权模式下会切换到具体模下的寄存器组。每个寄存器都是32位的,并且每个通用寄存器都可以作为数据处理的源数据或目标数据寄存器。因此可以编写出更精简的程序。
3、ARM指令的条件执行
状态寄存器中的N,Z,C,V是数据处理指令影响的标志。几乎每条ARM指令可以根据状态位或状态位的逻辑运算有条件执行。条件执行的指令后缀参考教材。
4、桶形移器
ARM的桶形移位器,使ARM指令的中第二个操作数非常录活。利用移位器,一条ARM 指令可以完成更多功能。移位操作有:
LSL 逻辑左移
LSR 逻辑右移
ASL 算术左移
ASR 算术右移
ROR 循环右移
RRX 带扩展循环右称
实验内容
1、把内存中ramaddr开始的ramword个字清零
(1)用后变址法
ramaddr equ 0x31000000
ramword equ 64
clrram
mov r0,#0
mov r1,#ramword
ldr r2,=ramaddr
clrram1
str r0,[r2],#4
subs r1,r1,#1
bne clrram1
mov pc,lr
LTORG
(2)用前变址法
clrrambak
mov r0,#0
mov r1,#ramword
ldr r2,=ramaddr-4
clrram2
str r0,[r2,#4]!
subs r1,r1,#1
bne clrram2
mov pc,lr
LTORG
2、把寄存器中,r0-r12的32位无符号32位数进行求和,和的低32位保存在r1中,高32位保存在r0中。
add13b
adds r1,r0,r1
mov r0,#0
adc r0,r0,#0
adds r1,r1,r2
adc r0,r0,#0
adds r1,r1,r3
adc r0,r0,#0
。。。。。。
。。。。。。
mov pc,lr
以上程序在主程序完成初始化后调后。打开寄存器,内存窗口等,观察程序执行前后的变化,及执行过程中的一些状态,并记录。
实验步骤
1、打开超级终端
2、打开H-JTAG,搜索ARM,
3、在D:\ARM\arm2中打开asm2.mcp文件进入metrowerks codeWarrior forARM Developer
Suite V1.2中,点击Debug开始编译。
4、编译成功后进入AXD环境中,要先将超级终端进入Vivi环境中,再点击options,并点
击configure Target,进行设置。点击Add添加C:\Program Files中点击H-JTAG文件夹中打开H-JTAG.dll。然后点击OK。
5、在2410INT.S文件中设置断点(位置“;//呼叫主应用程序 b Main ”),然后点击
Processor V iews,选择Register和Memory两个。单步执行时跳入aa.s文件。在Memory Start address中输入0x31000000.此时,进行清零
把0x31000000开始的内存256字节清零。
6.单步执行时,可以清楚的看到Memory中每当执行完str r0,[r2],就有四个字节(32位)的数据被清理。直到清零256个字节。
7、调试完毕,整理实验箱,并放回原位。
实验程序及调试过程
实验思考题
1、在子程序调用时,子程序的下一条语句的地址保存在哪里?
2、编写程序计算r0-r12中16位二进制无符号数的和,每个寄存器中保存两个16位二进制无符号数。
答:1、在子程序调用时,子程序的下一条语句的地址保存在r0=0x310001594