新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 指令+s對cpsr中標志位的影響

        指令+s對cpsr中標志位的影響

        作者: 時間:2016-11-20 來源:網絡 收藏
        標志位的含義如下:

        所有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

        本文引用地址:http://www.104case.com/article/201611/318728.htm
        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標志。


        關鍵詞: 指令+scpsr標志

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 通辽市| 左权县| 石棉县| 昌乐县| 牡丹江市| 乌拉特前旗| 漳平市| 祁门县| 麦盖提县| 潼南县| 商都县| 黑龙江省| 邻水| 定安县| 龙里县| 图木舒克市| 榆树市| 阿拉善盟| 浮山县| 左权县| 工布江达县| 青河县| 白玉县| 景德镇市| 松阳县| 沙雅县| 石渠县| 盖州市| 平昌县| 嘉兴市| 青海省| 乐平市| 青龙| 方正县| 龙川县| 乌什县| 朔州市| 万年县| 遵义市| 璧山县| 大方县|