数据加载与存储指令时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
序号 |
履行指令 |
指令履行后改变状况 |
|
|
寄存器 |
存储器 |
|
|
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/guandian/262741.html