ARM实验二报告

  • 格式:doc
  • 大小:483.05 KB
  • 文档页数:9

汇编语言与接口技术实验报告

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 b 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 mov r8,#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