汇编语言与接口技术实验报告
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