好文档 - 专业文书写作范文服务资料分享网站

ARM7 中文手册

天下 分享 时间: 加入收藏 我要投稿 点赞

0X100C

R1Rn

0X10000XFF4

1

0X100CR5R10X1000R5R13

图23:前向加地址0X100C

Rn

0X1000

R10XFF4

1

0X100C0X1000

R5R10XFF4

3

图24:后向减地址

Rn4R7R5R12

0XFF4R7R5R14

Rn2R7R5R10X100C0X10000XFF4

0X100C0X10000XFF4

0X100C0X10000XFF4

0X100C0X10000XFF4

46

This file is generated by AlienTools PDF Generator, unregister version

0X100C0X1000

0X100C0X1000

Rn0XFF4

1

0X100C0X1000R12

0XFF4

0X100C0X1000

R7R5R14

R5R13

0XFF4Rn0XFF4

图25:前向减地址

4.8.4S位的应用

在LDM/STM指令中,若置位S位,它的含义依据R15是否在传输列表中和指令类型的不同而不同。指令只有在管理模式执行时,S才应该置位。LDMR15在传输列表中,S置位(模式转换)

如果指令是LDM,当R15被加载的同时,SPSR_被传送到CPSR中。STMR15在传输列表中,S置位(用户bank传输)

被传输的寄存器来自用户bank,而不是从当前模式相应的bank。这对于在进程切换中节省用户状态是非常有用的。当这个状态启动时,将禁止基址回写。R15不在传输列表中,S置位(用户bank传输)

对LDM,STM指令来讲,用户寄存器bank将被传送,而不是当前模式下相应的寄存器bank。这对于在进程切换中节省用户状态是非常有用的。当这个状态启动时,将禁止基址回写。当指令为LDM,必须注意,在下一周期中不要读bank寄存器(在LDM后加入延迟保证安全)。

47

This file is generated by AlienTools PDF Generator, unregister version

4.8.5用R15作为基址

在LDM或STM指令中,R15不能作为基址寄存器。4.8.6寄存器列表包含基址寄存器

当回写被指定,基址在指令执行的第二个周期结束时回写。在STM指令周期,第一个寄存器在第二个周期的开始被写出。包含存储的基址,并且基址作为第一个寄存器被存储的STM指令将存储不变的基址值,而基址在第二或其它顺序时,则存储的是已经修改过的值。如果基址在列表中,LDM指令将覆盖当前基址。4.8.7数据异常

某些合法的地址对存储器管理系统来讲是不可接受的,存储管理器通过将ABORT置高表明一个地址问题。在任何一个加载或者传输多个寄存器的指令中,都可能发生这种情况,如果ARM7用在虚拟存储器系统中,异常必须为可恢复的。STM指令异常

如果一个异常发生在多个寄存器存储指令执行时,ARM7将保持不动直至此指令完成,然后,它进入一个数据异常陷阱。存储管理器应该阻止错误的写存储器操作。如果回写被指定,处理器内部状态的唯一变化是基址的改变,这个改变在指令重试之前必须由软件恢复。LDM指令异常

当ARM7在加载多个寄存器指令时检测到数据异常,它改变指令的操作以保证数据恢复。(1)

当异常产生时,停止正在进行的覆盖寄存器的操作。当前异常加载将不会发生,但是之前有可能产生寄存器覆盖。PC一直是最后一个被写的寄存器,所以将被保留。

(2)如果回写被请求,对于已经修改过的基址来讲,是可以恢复的。这就保证了在基址寄存

器在传输传输列表中或者在异常发生之前被覆盖的可恢复性,。当加载多个寄存器指令完成时,数据异常陷阱产生,系统软件在重新执行指令之前,必须恢复任何基址改变(并解决异常)。

4.8.8指令周期

通常LDM指令花费nS+1N+1Iincremental周期,LDMPC花费(n+1)S+2N+1Iincremental周期,S,N,I在65页第五章周期类型中定义。STM指令花费(n-1)S+2Nincrementalcycles。

n表示需要传输的字数。

48

This file is generated by AlienTools PDF Generator, unregister version

4.8.9汇编语法

{cond}Rn{!},{^}{cond}条件代码

Rn计算有效寄存器序号的表达式

寄存器列表,寄存器范围包含在{}(比如{R0,R2-R7,R10})

{!}如果存在,表示请求回写(W=1),否则,W=0

{^}如果存在,置位S,加载CPSR和PC,在管理模式,强制传送用户bank地址模式命名

对于每一个不同的地址模式有不同的汇编标识方法,依据指令是否用于支持堆栈或者其它用途。不同的指令名称和相应的位的对应关系列于下表:NAME

pre-incrementloadpost-incrementloadpre-decrementloadpost-decrementloadpre-incrementstorepost-incrementstorepre-decrementstorepost-decrementstoreSTACKLDMEDLDMFDLDMEALDMFASTMFASTMEASTMFDSTMEDOTHERLDMIBLDMIALDMDBLDMDASTMIBSTMIASTMDBSTMDALBIT111100000

PBIT10101010

UBIT11001100

地址模式名称

通过参考堆栈请求格式,FD,ED,FA,EA定义了前/后向索引和上/下位,F,E表示堆栈满或者空。A和D定义堆栈是递增还是递减,如果递增,STM将向上,LDM向下,如果递减,则相反。

当LDM/STM没有被用于堆栈,而只是简单地表示地址前向增加,后向增加,前向减少,后向减少时,由IA,IB,DA,DB控制。

49

This file is generated by AlienTools PDF Generator, unregister version

4.8.10举例LDMFDSTMIALDMFDLDMFDSTMFD

SP!,{R0,R1,R2};弹出三个寄存器R0,{R0-R15};保存所有的寄存器

SP!,{R15};R15<-(SP),CPSR不改变

SP!,{R15}^;R15<-(SP),CPSR<-SPSR_mode(优先级模式)R13,{R0-R14}^;在堆栈中保存用户寄存器(优先级模式)

这些指令用于在子程序的入口保存状态,返回调用程序时恢复。

STMEDSP!,{R0-R3,R14};保存R0到R3,使应用程序可以访问;保存R14用于程序返回BLsomewhere;嵌套调用将覆盖R14

LDMEDSP!,{R0-R3,R15};恢复空间并返回

This file is generated by AlienTools PDF Generator, unregister version

50

ARM7 中文手册

0X100CR1Rn0X10000XFF410X100CR5R10X1000R5R13图23:前向加地址0X100CRn0X1000R10XFF410X100C0X1000R5R10XFF43图24:后向减地址<
推荐度:
点击下载文档文档为doc格式
71zld0wrvr0a0pl1tz2o
领取福利

微信扫码领取福利

微信扫码分享