ARM處理器CPSR標誌位和條件符之間的關係

2021-08-24 22:08:31 字數 2477 閱讀 8353

本文目的是要理清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上進行程式設計時能夠使用的處理器資源,其中最重要的是處理器所提供的指令系...