ARM数据加载与存储指令(一)
数据加载与存储指令时ARM在寄存器与存储器之间实现数据传送的一类指令。
实验目的:
l 单寄存器数据传送指令的运用和各种变址寻址模式的掌握
l 多寄存器数据传送指令的运用和各种变址寻址模式的掌握
l 单个数据复制和数据块复制的方法。
l 利用调试器中各种窗口观察完成各指令操作后寄存器、存储器、标签地址、机器指令等的变化情况。
一、 单寄存器的加载和存储指令LDR|STR
AREA Lab1,CODE
ENTRY
START
ADR R1,SRC
ADR R2,DST
COPY
LDR R0,[R1]
STR R0,[R2]
ADD R1,R1,#0x4
ADD R2,R2,#0x4
LDR R0,[R1]
STR R0,[R2]
ADD R1,R1,#0x4
ADD R2,R2,#0x4
LDR R0,[R1]
STR R0,[R2]
STOP
B STOP
SRC DCB "one small!"
ALIGN
DST DCB "three big!"
END
程序说明:
1. 伪指令ADR是将一个寄存器相关变大时或程序相关表达式的地址存入寄存器中,在例子中相当于使R1指向SRC,R2指向DST地址,即初始化地址指针。
2. DCB的作用是分配一组字节内存并定义其内容为指定字符串,也可以用“=”代替:
SRC = “one small!”
DST =“three big!”
完成下列任务
1.阅读程序exp6_1.s,写出程序的功能。设置代码段的基地址为0x8000。用AXD单步调试程序,观察每执行一步以后,相应的寄存器和存储器的变化情况,完成表格。
打开的process view窗口如下:register,disassembly,low lever symbols,memory
2.程序中使用的寻址方式是间接寻址中的零变址方式,请将程序改为前变址形式和后变址形式。(绘图分析各种变址寻址形式,并设计程序验证。)
3.用多寄存器传送指令修改程序。
答案:
1. 程序的功能是将存储器中SRC处的源数据通过数据传送指令传送到DST处。
2. 前变址和后变址
方法一
COPY LDR R0,[R1],#4
STR R0,[R2],#4
LDR R0,[R1],#4
STR R0,[R2],#4
LDR R0,[R1],#4
STR R0,[R2],#4
方法二
SUB R1,R1,#4
SUB R2,R2,#4
MOV R3,#1
CPY
LDR R0,[R1,#4]!
STR R0,[R2,#4]!
CMP R3,#3
ADD R3,R3,#1
BNE CPY
方法三
LDR R0,[R1]
STR R0,[R2]
LDR R0,[R1,#4]
STR R0,[R2,#4]
LDR R0,[R1,#8]
STR R0,[R2,#8]3. 多寄存器传送指令
LDMIA R1!,{R3-R5}
STMIA R2!,{R3-R5}
一、 多寄存器的加载和存储指令
AREA Lab2,CODE
ENTRY
START
LDR sp,=NUM
LDMFD SP!,{R0-R4}
ADD R4,R0,R1
ADD R4,R4,R2
ADD R4,R4,R3
MOV R4,R4,LSR #2
STR R4,[SP]
STOP
B STOP
AREA Dblock,DATA
NUM DCD 0x12,0x34,0x56,0x78
END
程序说明:
1. 定义一个名为Dblock的数据区域
2. 伪指令DCD的作用是分配一组字内存并定义其内容,分配的内存一定是4的倍数。也可以用&替代。
NUM & 0x12, 0x34,0x56,0x78
实验目的:
l
l
l
l
一、 单寄存器的加载和存储指令LDR|STR
START
COPY
STOP
SRC
DST
程序说明:
1.
2.
SRC = “one small!”
DST =“three big!”
完成下列任务
1.阅读程序exp6_1.s,写出程序的功能。设置代码段的基地址为0x8000。用AXD单步调试程序,观察每执行一步以后,相应的寄存器和存储器的变化情况,完成表格。
打开的process view窗口如下:register,disassembly,low lever symbols,memory
序号 | 执行指令 | 指令执行后变化情况 | |||||||||||||
寄存器 | 存储器 | ||||||||||||||
R0 | R1 | R2 | PC | 0x8040 | 0x8041 | 0x8042 | 0x8043 | 0x8044 | 0x8045 | 0x8046 | 0x8047 | 0x8048 | 0x8049 | ||
0 | 0x0 | 0x0 | 0x0 | 0x8000 | 0x74 t | 0x68 H | 0x72 r | 0x65 e | 0x65 e | 0x20 _ | 0x62 b | 0x69 i | 0x67 g | 0x21 ! | |
1 | |||||||||||||||
2 | |||||||||||||||
3 | |||||||||||||||
4 | |||||||||||||||
5 | |||||||||||||||
6 | |||||||||||||||
7 | |||||||||||||||
8 | |||||||||||||||
9 | |||||||||||||||
10 |
3.用多寄存器传送指令修改程序。
答案:
1.
2.
方法一
COPY LDR R0,[R1],#4
LDR R0,[R1],#4
方法二
CPY
方法三
LDR R0,[R1]
LDR R0,[R1,#8]
LDMIA
STMIA
一、 多寄存器的加载和存储指令
START
STOP
NUM
程序说明:
1.
2.
NUM & 0x12, 0x34,0x56,0x78
关键词: ARM数据加载存储指

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW
或用微信扫描左侧二维码