ARM实验二报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言与接口技术实验报告
ARM汇编语言程序设计
院系信科院
专业班级计科1201
学生姓名
学号
指导教师
提交日期 2015 年 5 月 15 日
一、实验目的
●初步学会使用IAR EWARM 开发环境及ARM 软件模拟器。
●通过实验掌握简单ARM 汇编指令的使用方法。
●通过实验掌握使用ldm/stm、b、bl 等指令完成较为复杂的存储区访问和程序分
支,学习使用条件码,加强对CPSR 的认识。
●通过实验掌握 ARM 处理器16 位Thumb 汇编指令的使用方法。
二、实验内容
●利用实验参考程序学习使用ldr/str、mov 等指令访问寄存器或存储单元。
使用
add/sub/lsl/lsr/and/orr 等指令,完成基本数学/逻辑运算。
●编写程序循环对R4~R11 进行累加8 次赋值,R4~R11 起始值为1~8,每次加
操作后把R4~R11 的内容放入SP 栈中,SP 初始设置为0x800。
最后把R4~R11 用LDMFD 指令清空赋值为0。
●新建工程,并自行编写汇编程序,分别使用ldr、str、ldmia、stmia 操作,实现
对某段连续存储单元写入数据,并观察操作结果。
学习分支程序设计,要求判断参数,根据不同参数,调用不同的子程序。
●编写程序实现50!(即50的阶乘)。
●编写程序从ARM状态切换到Thumb,在ARM 状态下把R2 赋值为0x12345678,在Thumb
状态下把R2 赋值为0x87654321。
同时观察并记录CPSR、SPSR 的值,分析各个标志位。
三、实验设备
1. UP-TECH S2410实验平台,ARM标准/增强型仿真器套件
2. PC 操作系统WIN98 或WIN2000 或WINXP,IAR EWARM集成开发环境,仿真调试驱动程序(H-JTAG)。
四、实验参考程序
#*********************************************************************************************
# NAME: ARMcode1.s *
# Author: Embest *
# Desc: ARMcode examples *
# copy words from src to dst *
# History: shw.He 2005.02.22 *
#*********************************************************************************************
NAME main
PUBLIC __iar_program_start
SECTION `.text`:CODE:NOROOT(2)
ARM ; ARM mode
__iar_program_start
main:
ldr r0, =src /* r0 = pointer to source block */
ldr r1, =dst /* r1 = pointer to destination block */
mov r2, #num /* r2 = number of words to copy */
mov sp, #0x400 /* set up stack pointer (r13) */
blockcopy
movs r3,r2, LSR #3 /* number of eight word multiples */
beq copywords /* less than eight words to move ? */
stmfd sp!, {r4-r11} /* save some working registers */
octcopy
ldmia r0!, {r4-r11} /* load 8 words from the source */
stmia r1!, {r4-r11} /* and put them at the destination */
subs r3, r3, #1 /* decrement the counter */
bne octcopy /* ... copy more */
ldmfd sp!, {r4-r11} /* don't need these now - restore originals */ copywords
ands r2, r2, #7 /* number of odd words to copy */
beq stop /* No words left to copy ? */ wordcopy
ldr r3, [r0], #4 /* a word from the source */
str r3, [r1], #4 /* store a word to the destination */
subs r2, r2, #1 /* decrement the counter */
bne wordcopy /* ... copy more */
stop
b stop
ALIGN
src
DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4
dst
DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
END
五、程序运行测试
实验代码(替换参考程序的main部分)及测试结果如下:
实验1
LDR R0, =SRC
LDR R1,=DST
MOV R2,#55
MOV SP,#0x400
BLOCKCOPY
MOVS 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
B STOP
ALIGN
SRC
DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4
DST
DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
END
实验2
START
ldr r0,=SRC
mov r2,#8
mov sp,#0x800
mov r4,#1
mov r5,#2
mov r6,#3
mov r7,#4
mov r8,#5
mov r9,#6
mov r10,#7
mov r11,#8
LOOP
add r4,r4,#1
add r5,r5,#1
add r6,r6,#1
add r7,r7,#1
add r8,r8,#1
add r9,r9,#1
add r10,r10,#1
add r11,r11,#1
stmfd sp!,{r4-r11}
subs r2,r2,#1
bne LOOP
LDMIA r0!,{r4-r11}
STOP
LTORG
SRC
DCD 0,0,0,0,0,0,0,0 exit: B exit
END
实验3
main:
START
mov r0,#0x3000
mov r1,#0x10000001
mov r2,#100
LOOP
str r1,[r0],#4
add r1,r1,#1
subs r2,r2,#1
bne LOOP
mov r0,#0x3000
mov r2,#100
mov r9,#0
LOOP1
ldr r1,[r0],#4
adds r8,r1,r8
adc r9,r9,#0
subs r2,r2,#1
bne LOOP1
STOP
b STOP
END
实验4
START
mov r8,#20
mov r9,#0
sub r0,r8,#1
LOOP
mov r1,r9
umull r8,r9,r0,r8
mla r9,r1,r0,r9
subs r0,r0,#1
bne LOOP
END
实验5
START
ldr r2,=0x12345678
CODE16
ldr r2,=0x87654321
END。