本文目的是要理清arm處理器的cpsr狀態標誌和arm指令的條件符之間的關係。
一、cpsr暫存器
arm v4的cpsr暫存器(和儲存它的spsr暫存器)中的位分配如下圖1所示。
圖1 程式狀態暫存器格式 n
n=1 表示運算的結果為負數;n=0 表示運算的結果為正數或零;
zz=1 表示運算的結果為零;z=0表示運算的結果為非零;
c可以有4種方法設定c的值:
─ 加法運算(包括比較指令cmn):當運算結果產生了進製時(無符號數溢位),c=1,否則c=0。
─ 減法運算(包括比較指令cmp):當運算時產生了借位,c=0,否則c=1。
─ 對於包含移位操作的非加/減運算指令,c為移出值的最後一位。
─ 對於其他的非加/減運算指令,c的值通常不改變。
v可以有2種方法設定v的值:
─ 對於加/減法運算指令,當運算元和運算結果為二進位制的補碼表示的帶符號數時,v=1表示符號位溢位。
─ 對於其他的非加/減運算指令,v的值通常不改變
二、條件符及對應的標誌位
表1 條件符描述表
三、關於c、v值更多的解釋
處理器內部以補碼表示有符號數,8個二制位能夠表達的整數範圍是:+127 ~ -128,16位表達的範圍是:+32767 ~ -32768。如果運算結果超出了這個範圍,就是產生了溢位,有溢位,說明有符號數的運算結果需要考慮溢位情況。
溢位標誌v和進製標誌c是兩個意義不同的標誌。進製標誌表示無符號數運算結果是否超出範圍;溢位標誌表示有符號數運算結果是否超出範圍。
處理器對兩個運算元進行運算時,按照無符號數求得結果,並相應設定進製標誌c;同時,根據是否超出有符號數的範圍設定溢位標誌v。
應該利用哪個標誌,則由程式設計師來決定。也就是說,如果將參加運算的運算元認為是無符號數,就應該關心進製;認為是有符號數,則要注意是否溢位。
判斷運算結果是否溢位有乙個簡單的規則:只有當兩個相同符號數相加,而運算結果的符號與原資料符號相反時,產生溢位;其他情況下,則不會產生溢位。
**舉例1:
ldrr0, =0x7fffffff
ldrr1, =0x70000000;
addsr0, r0, r1; //結果=0xefffffff
對於無符號數運算來說,沒有進製。
對於有符號數運算來說,溢位。
此時c=0 v=1;
**舉例2:
ldrr0, =0xffffffff
ldrr1, =0x70000000;
addsr0, r0, r1; //結果=0x6fffffff
對於無符號數運算來說,有進製。
對於有符號數運算來說,無溢位。
此時c=1 v=0;
**舉例3:
ldrr0, =0x8fffffff
ldrr1, =0xf0000000 ;
addsr0, r0, r1; //結果=0x7fffffff
此時c=? v=?;(思考一下,然後在arm模擬器中驗證下)
**舉例4://思考減法時,c值的影響
ldrr0, =0x3
ldrr1, =0x2
subsr0, r0, r1
對比:
ldrr0, =0x3
ldrr1, =-2;(-2的補碼0xfffffffe會送到r1)
addsr0, r0, r1
四、cpsr狀態標誌和arm指令的條件符之間的關係
有了上面的背景知識以後,接下來思考表1中cpsr狀態標誌和arm指令的條件符之間的關係,下面選取其中的一項來分析。
如:ge:(有符號數大於等於)
n=0 v=0:結果是大於等於0的數,且無符合溢位,所以大於等於關係成立
n=1 v=1:結果小於0,但有符號溢位
考慮以下情況:c=a-b
1.a<0, b<0
減法操作時不可能符號溢位
2.a>0, b<0
可能出現n=v=1?? 如(8位數):100-(-100)=200
顯然a>b
3.a<0, b>0
參照上面提到過的判斷溢位標誌的簡單規則,可以得出:在此情況下,
減法操作時如果結果小於0 (n=1),則不會出現符號溢位
所以(在n=1 v=1前提下a<0,b>0)這種情況不可能出現
4.a>0, b>0
減法操作不可能出現符號溢位。
其它項的分析過程類似。
五、總結
劉洪濤,
華清遠見嵌入式學院
講師。)
arm處理器模式和arm處理器狀態的區別
arm處理器狀態 arm微處理器的工作狀態一般有兩種,並可在兩種狀態之間切換 第一種為arm狀態,此時處理器執行32位的字對齊的arm指令 第二種為thumb狀態,此時處理器執行16位的 半字對齊的thumb指令。在程式的執行過程中,微處理器可以隨時在兩種工作狀態之間切換,並且,處理器工作狀態的轉變...
RISC CISC 和 ARM處理器
risc riduced instruction set computer 精簡指令集計算機 cisc complex instruction set computer 複雜指令集計算機 所謂 體系結構 是指程式設計師在某cpu上進行程式設計時能夠使用的處理器資源,其中最重要的是處理器所提供的指令系...
RISC CISC 和 ARM處理器
risc riduced instruction set computer 精簡指令集計算機 cisc complex instruction set computer 複雜指令集計算機 所謂 體系結構 是指程式設計師在某cpu上進行程式設計時能夠使用的處理器資源,其中最重要的是處理器所提供的指令系...