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

ARM7 中文手册

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

4.4.3立即操作数循环

????μμóé Foxit Reader ±à?-°?è¨??óD ·-°?2?????1??à1à?£

立即操作数的循环量是五位的无符号整数,它指定了8位立即数的位移量,这个值可以从零扩展的到32,如果循环量为m,则立即数循环的结果为立即数*2m。4.4.4写R15

当Rd(目的寄存器)不包含R15,CPSR中的条件标志位就可以由ALU标志位修改,如上所述。当Rd是R15,且指令中的S位没有被置位,操作结果会被放到R15并且CPSR不受影响。当Rd是R15,且指令中的S位被置位,操作结果会被放到R15并且当前模式下SPSR保存到CPSR。这就允许状态改变(PC,CPSR的值自动恢复),这种指令格式在用户模式中不被用到。

4.4.5R15作为操作数

如果R15(PC)在数据处理指令中被当作操作数,那么这个寄存器可以直接应用。PC的值是指令的地址,依据指令预取加8或者12字节。如果位移在指令中指定,PC是当前指令地址8个字节之前,如果位移量在寄存器中指定,PC将是当前指令地址之前12个字节。4.4.6TEQ,TST,CMP和CMN操作码

这些指令不写操作结果,但是修改CPSR的标志位,编译器自动置位S(对这些指令)即使指令中没有置位S。

以前处理器用到的TEQP指令格式没有用在32位模式,取而代之的是PSR传输指令。如果在这些模式中用到,处理器处于管理模式它的作用相当于保存SPSR_到CPSR,处于用户模式,则没有影响。4.4.7指令时间周期

数据处理指令依照incremental周期数不同时间也不同,如下所示:

正常数据处理1S寄存器指定位移量的数据处理1S+1IDataProcessingwithPCwritten2S+1N寄存器指定位移量的数据处理和PC写指令2S+1N+1I

31

This file is generated by AlienTools PDF Generator, unregister version

4.4.8汇编语法(1)(2)(3)

MOV,MVN-单操作数指令

<操作码>{条件代码}{S}Rd,<操作数2>CMP,CMN,TEQ,TST不改变执行结果<操作码>{条件代码}{S}Rd,Rn,<操作数2>AND,EOR,SUB,RSB,ADD,ADC,SBC,RSC,ORR,BIC<操作码>{条件代码}{S}Rd,Rn,<操作数2>

操作数2可以是Rm,或者<#expression>{条件代码}-参考图8

{S}-如果S存在,则需要设置条件代码(用于CMP,CMN,TEQ,TST)

如果用到<表达式>,编译器将会尝试产生一个移位的8位立即数与表达式匹配,如果尝试失败,将报错。

is<移位类型><寄存器>or<移位类型>#expression,orRRX(带扩展的循环右移)。<移位类型>是ASL,LSL,LSR,ASR,ROR.(ASL和LSL同义,它们被编译为同一代码)4.4.9举例

ADDEQR2,R4,R5TEQSR4,#3

SUBR4,R5,R7,LSRR2MOVMOVS

PC,R14PC,R14

;如果Z标志位为1,R2:=R4+R5;

;测试R4是否等于3(编译器自动加入S,所以S为冗余);将R7中的值逻辑右移,位移量包含在R2的低字节,从R15;中减去移位结果,并送入R4;从子程序返回

;从异常返回,从SPSR模式释放CPSR

32

This file is generated by AlienTools PDF Generator, unregister version

4.5PSR传输(MRS,MSR)

????μμóé Foxit Reader ±à?-°?è¨??óD ·-°?2?????1??à1à?£

此指令只有在条件为真时才执行。不同条件已经在本章开始时定义。

MSR和MRS指令由数据处理操作的子集构成,经常和没有设置S标志位的指令关联(TEQ,TST,CMN,CMP),编码在图17显示。

此指令允许访问CPSR,SPSR。MRS指令允许转移CPSR或SPSR到通用寄存器中,同样MSR允许转移通用寄存器的内容到CPSR或SPSR.。

MSR指令允许立即数或寄存器的值传送到CPSR或SPSR的条件代码标志位(N,V,Z,C),但不影响控制位。在这种情况下,指定寄存器的高4位或32位立即数被写入到相关的PSR的高4位。4.5.1操作数制

在用户模式,CPSR的控制位被保护而不能改变,所以只有CPSR的条件代码标志位可以改变,在其它的模式(管理模式),整个CPSR都可以改变。

SPSR可否访问要看正在执行的模式,比如只有在FIQ模式下SPSR_fiq才可以访问。R15不能被指定为源或者目的寄存器。

在用户模式下不要试图访问SPSR,因为此寄存器根本不存在。

33

This file is generated by AlienTools PDF Generator, unregister version

MRS(传递PSR的内容到寄存器)312827232221COND00010PS1615001111RD12110000000000000目标寄存器源PSR0=CPSR1=SPSR_<当前模式>条件代码MSR(传送寄存器的值到PSR)312827232221COND00010PD121110100111110000000043RM0源寄存器目标PSR条件代码区MSR(仅传送寄存器的值或立即数到PSR的标志位)

312827232221COND00I10PD10100011111211源操作数0源PSR0=CPSR1=SPSR_<当前模式>立即操作数0=源操作数为寄存器1100000000条件代码区源寄存器1=源操作数位立即数43Rm0RotateImm立即数的循环移位量无符号的8位立即数图17:PSR传输

34

This file is generated by AlienTools PDF Generator, unregister version

4.5.2保留位

在ARM7的PSR寄存器中,只定义了11位(N,Z,C,V,I,F和M[4:0]);其余的位(=PSR[27:8,5])保留,以备以后版本的ARM处理器应用,为了保证处理器最大限度地兼容,必须遵守以下规则:

(1)在改变PSR的值时,保留位保持不变。

(2)程序不应该依靠保留位的值来查检查PSR的状态,因为这些保留位在以后版本的处

理其中,可能被读为’1’,也可能被读为’0’。当改变任何PSR的控制位时,应该用到读-改-写指令,如下:用MRS指令传送相应的PSR寄存器到通用寄存器中,只改变相关联的位,然后用MSR指令传送已经改变的值到PSR寄存器中。

例下面一系列语句执行模式改变:

MRSBICORRMSR

R0,CPSRR0,R0,#0X1F

R0,R0,#new_modeCPSR,R0

;复制CPSR到R0;清除模式位;选择新模式;回写

如果只是简单地改变PSR中条件代码标志位的值,数据可以直接写到标志位,不会改变控制位。下面的指令设置N,Z,C和V标志位。

MSRCPSR_flg,#0XF0000000

;设定所有的标志位而不管他们之前出于什么状态;(不会影响控制位)

不要尝试写一个8位的立即数到PSR,因为这样操作会改变保留位。4.5.3指令周期

PSR传输花费1Sincremental周期,S在5.1指令类型中定义。(65页)4.5.4编译器语法

(1)MRS-传送PSR的值到寄存器

MRS{cond}Rd,(2)(3)

MSR-传送寄存器的值到PSRMSR{cond},Rm

MSR-只传送寄存器的值到PSR的标志位MSR{cond},Rm

寄存器最高4位分别被写入N,Z,C,和V标志位。

(4)MSR-只传送立即数到PSR的标志位

MSR{cond},<#expression>

表达式应该计算出一个32位值,其中的最高四位分别被写入N,Z,C,和V标志位。{cond}-条件代码

RdandRm为寄存器的序列号,0-15

为CPSR,CPSR_all,SPSR或SPSR_all.(CPSR和CPSR_all为同义词,SPSRandSPSR_all

一样)

为CPSR_flgorSPSR_flg

35

This file is generated by AlienTools PDF Generator, unregister version

ARM7 中文手册

4.4.3立即操作数循环????μμóéFoxitReader±à?-°?è¨??óD·-°?2?????1??à1à?£立即操作数的循环量是五位的无符号整数,它指定了8位立即数的位移量,这个值可以从零扩展的到32,如果循环量为m,则立即数循环的结果为立即数*2m。4.4.4写R15当Rd(目的寄存器)不包含R15,CPSR中的条件标志位就可
推荐度:
点击下载文档文档为doc格式
71zld0wrvr0a0pl1tz2o
领取福利

微信扫码领取福利

微信扫码分享