接上ARM数据加载与存储指令 (一)
1.阅读程序exp6_2.s,写出程序的功用。设置代码段的基地址为0x8000。用AXD单步调试程序,调查每履行一步今后,相应的寄存器和存储器的改变状况,完结表格。
翻开的process view窗口如下:register,disassembly,low lever symbols,memory
序号 | 履行指令 | 指令履行后改变状况 | |||||||||||||
寄存器 | 存储器 | ||||||||||||||
R0 | R1 | R2 | R3 | R4 | SP | PC | 0x8024 | 0x8028 | 0x802C | 0x8030 | 0x8038 | ||||
0 | 0x0 | 0x0 | 0x0 | 0x0 | 0x0 | 0x0 | 0x8000 | 0x20 | 0x62 | 0x69 | 0x67 | 0x21 | |||
1 | |||||||||||||||
2 | |||||||||||||||
3 | |||||||||||||||
4 | |||||||||||||||
5 | |||||||||||||||
6 | |||||||||||||||
7 | |||||||||||||||
8 | |||||||||||||||
9 | |||||||||||||||
10 | |||||||||||||||
答案:
1.程序的功用是核算给定数据各项和的平均值,办法是先将数据各项加载到寄存器中,然后运用数据处理指令核算,最终再讲成果存入寄存器中。
一、 归纳编程
1.绘图剖析多寄存器传送指令的各种形式,并规划程序验证。(学生作业)
IA:
数据开始地址:0x800C
0x800C | 0x10 | ||
0x8010 | 0x20 | ||
0x8014 | 0x30 | ||
R0 | R1 | ||
0x10 | 0x20 | ||
DB:
数据开始地址:0x8010
0x8010 | 0x10 | ||
0x8014 | 0x20 | ||
0x8018 | 0x30 | ||
R0 | R1 | ||
0x10 | 0x20 | ||
FD:
数据开始地址:0x800C
0x800C | 0x10 | ||
0x8010 | 0x20 | ||
0x8014 | 0x30 | ||
R0 | R1 | ||
0x10 | 0x20 | ||
EA:
数据开始地址:0x8010
0x8010 | 0x10 | ||
0x8014 | 0x20 | ||
0x8018 | 0x30 | ||
R0 | R1 | ||
0x10 | 0x20 | ||
二、
实践编程的过程中,常需求把当即数常量和地址值载入寄存器,因为指令集长度的约束和存储/加载体系结构的特色,这两个问题需求专门阐明。
差异:
START
LDR R0,=SRART
ADR R0,START
1.
(1)
直接加载任何取值在0x0~0xFF间的8位常量。
对上述的取值进行循环右移偶数次后的数值n
比如: MOV R1,#0x250
(2)
运用一个LDR指令和在数字量前的等号,就能够很容易地将常量写入代码。
比如:LDR R1,=0x520
假如结构的常量能用MOV或许MVN指令加载,那么汇编器会选用恰当的指令;不然,汇编器会发生一个带PC相对偏移地址的LDR指令来从文字池中读取常量。
文字池是为常量留出的一部分内存。
默许状况:在END指示的方位。在4kB规模内。
例6.1 [B1]
AREA example1,CODE
START
STOP
程序解读
(1)
(2)
(3)
(4)
LDR R3, #0x00008020
…
0x8020
2.
程序中常常要加载某个地址到寄存器中,伪指令ADR和ADRL的功用便是将一个寄存器相关表达式或程序相关表达式的地址存入寄存器中。
(1)用ADR或ADRL直接加载
所谓程序相关表达式便是标号相对于当时PC的偏移地址,而寄存器相关表达式便是标号相对于保存在指定的通用寄存器中的地址。一般的格局是:
ADR
ADRL
例6.2加载地址
START
STOP
ADDR DCD 0x12345678
程序解读
(1)
SUB R0,PC,#8
(2)
ADD R1,PC,#0x10
(3)
ADD R1,PC,#0x300
ADD R2,R2,#0xF4
因为标签ADDR的地址是0x801C,所以以上汇编器发生的指令将地址正确地加载到了寄存器中。
(2)运用一种伪指令格局加载(LDR)
留意:这儿的LDR是伪指令,与加载指令不同。
LDR
与前述运用LDR指令加载常量到寄存器类似,这种格局也能够加载程序相关表达式到寄存器。实践上,汇编器会把label的地址放入文字池,并发生一个LDR指令从文字池上读取地址。
例6.3 加载label地址
AREA example3,CODE
START
STOP
ARNEW
(1)
地址 | 数据 |
0x8020 | 0x20026 |
0x8024 | 0x8000 |
0x8028 | 0x8010 |
0x802C | 0x8074 |
即在文字池的偏移地址为4处寄存着START地址,偏移地址为8处寄存着ARNEW地址,偏移地址为12(0xC)处寄存着ANREW+100地址。
(2)
LDR R0,[0x8024]
(3)
LDR R0,[0x8028]
(4)
LDR R0,[0x802C]
1.
2.