指令+s对cpsr中标志位的影响

发布者:leader4最新更新时间:2016-05-11 来源: eefocus关键字:指令+s  cpsr  标志位 手机看文章 扫描二维码
随时随地手机看文章
各标志位的含义如下:

所有ARM数据处理指令的乘法指令均可选择使用S后缀,并影响状态标志位。而其它指令一般不允许加S后缀,如B 、LDR、SWI、MRS等。

N   运算结果的最高位反映在该标志位。对于有符号二进制补码,结果为负数时N=1,结果为正数或零时N=0;
      例如:执行movs r0,#0x7FFFFFFF后N=0;因为R0最高位为0
                  执行movs r0,#0x80000000后N=1;因为R0最高位为1
                  执行CMP r0,r0后N=0;因为R0-R0=0x00000000;
                  故N一般看目标寄存器的最高位,即N = Rd[31]。

Z   指令结果为0时Z=1(通常表示比较结果“相等”),否则Z=0;
      例如:执行CMP r0,r0后Z=1
                  执行MOVS R0,#0后Z=1
                  故Z一般看目标寄存器的值是否为0,Rd=0时Z=1,否则Z=0。
      
C   当进行加法运算(包括CMN指令),并且最高位产生进位时C=1,否则C=0。当进行减法运算(包括CMP 指令),
      并且最高位产生借位时C=0,否则C=1。对于结合移位操作的非加法/减法指令,C为从最高位最后移出的值,
      其它指令C通常不变; 
      例如:执行 mov  r0,#0xF0000000
                           ADDS  R0,R0,R0
                                 后C=1;
                  执行   SUBS  R2,R2,R2后C=1,因为R2-R2=0不需要借位。
                  执行   CMP R3,R3后C=1;
                  执行   MOV R1,0x80000000
                             movs r0,r1 ,lsr #32
                               后C=1;
                  执行   mov r0,#0x10    
                             mov r1,#0x7FFFFFFF
                             subs r3,R0,r1 ,lsr #1
                                  后C=0;
                   总之,一般情况下加法进位,减法无借位时C=1; 对于结合移位操作的非加/减法指令,C为最后移出的值。
              
V    当进行加法/减法运算,并且发生有符号溢出时V=1,否则V=0,其它指令V通常不变。
      例如:执行        mov r1,#0x80000000
                                  adds r1,r1,r1            后V=1;
                 执行                mov r1,#0x70000000
                                         adds r1,r1,r1 或 CMN R1,R1     后V=1;
                  执行                 LDR  R0,=0x8000000
                                            LDR  R1,=0x7FFFFFFF
                                           CMP R0,R1   后V=1     ;
                  总之,两个负数运算结果第31位为0,则V=1
                              两个正数运算结果第31位为1,则V=1。

另外THUMB指令一般不需要S后缀,便能影响状态标志位。
如 在THUMB状态下下面两条指令相同              
                    movs r0,#0x00
                    mov r0,#0x00

 
MOV一般不影响CPSR, 除非执行类似MOV pc, lr,效果上等同于BX lr
      MOVS总是会影响CPSR, 包括N,Z,C标志位
        执行MOV pc, lr,可能会影响到T标志位,执行MOVS pc, lr时,CPSR会被SPSR覆盖(内核态)

在Thumb代码里不能使用B跳转到ARM代码,因为T标志不会切换,即使跳到ARM代码,
        也会按照Thumb方式来执行,BX是跳特殊指令,会根据目标寄存器地址来切换T标志。
关键字:指令+s  cpsr  标志位 引用地址:指令+s对cpsr中标志位的影响

上一篇:ARM指令中的函数调用
下一篇:单片机脚本语言移植lua到stm32MDK

推荐阅读最新更新时间:2024-03-16 14:53

西门子S7-200 SMART PLC常用编程指令汇总
01 一、定时器 1、S7-200 SMART CPU提供了接通延时定时器、(TON)、保持型接通延时定时器(TONR)、断开延时定时器(TOF)三种定时器。 2、定时器编号与分辨率 3、定时器实例分析 ①接通延时定时器 TON ②保持型接通延时定时器 TONR ③断开延时定时器 TOF 02 二、计数器 1、S7-200 SMART CPU提供了加计数器(CTU)、减计数器(CTD)、加减计数器(CTUD)三种计数器。 2、计数器实例分析 ①加计数器 CTU ②减计数 CTD ③加减计数器 CTUD 03 三、循环指令 1、S7-200 SMART CPU提供了FOR-NE
[嵌入式]
西门子<font color='red'>S</font>7-200 SMART PLC常用编程<font color='red'>指令</font>汇总
关于中断请求标志
今天才发现我用了这么长时间的中断服务函数,竟然不知道中断请求标志位到底具体是什么意思~~~悲哀!!! 一般就用了定时器中断服务函数,没关心中断请求标志位,今天才发现,原来定时器中断请求标志位就是定时器溢出标志位,定时器溢出时自动跳到相应中断向量处,当主机响应该定时器中断时,该标志位由硬件自动清零。所以,我虽然写了定时器中断服务函数,而没操作定时器溢出标志位,程序还能运行,是因为单片机自己把这事儿给办了~~是典型的瞎猫碰到死老鼠 对于外部中断,其中断请求标志位跟定时器溢出标志位相似,都是主机相应中断后自动硬件清零,所以,也不必考虑需要不需要软件清零 串行口中断就不一样了,它分为发送中断标志位和接受中断标志位,在方式0中,
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved