ARM cmp命令詳解

2021-06-22 10:16:20 字數 2825 閱讀 3874

arm指令的基本格式

arm指令的基本格式為:

{}    , 

其中,<  >內的項是必需的,內的項是可選的

(1)opcode項

opcode是指令助記符,即操作碼,說明指令需要執行的操作,在指令中是必需的。

(2)cond項(command)

cond項表明了指令的執行的條件,每一條arm指令都可以在規定的條件下執行,每條arm指令包含4位的條件碼,位於指令的最高4位[31:28]。條件碼共有16種,每種條件碼用2個字元表示,這兩個字元可以新增至指令助記符的後面,與指令同時使用。當指令的執行條件滿足時,指令才被執行,否則指令被忽略。如果在指令後不寫條件碼,則使用預設條件al(無條件執行)

指令的條件碼

條 件 碼

助記符字尾

標    志

含    義

0000

eqz置位

相等equal

0001

nez清零

不相等not equal

0010

csc置位

無符號數大於或等於carry set

0011

ccc清零

無符號數小於

0100

min置位

負數minus

0101

pln清零

正數或零plus

0110

vsv置位

溢位0111

vcv清零

沒有溢位

1000

hic置位z清零

無符號數大於high

1001

lsz置位c清零

無符號數小於或等於less

1010

gen等於v

帶符號數大於或等於

1011

ltn不等於v

帶符號數小於least

1100

gtz清零且(n等於v)

帶符號數大於great

1101

lez清零或(n不等於v)

帶符號數小於或等於

1110

al忽略

無條件執行all

1111

nv never 

條件碼應用舉例:

例:比較兩個值大小,並進行相應加1處理,c語言**為:

if  ( a > b )  a++;

else  b++;

對應的arm指令如下(其中r0中儲存a 的值,r1中儲存b的值):

cmp  r0, r1  ; r0與r1比較,做r0-r1的操作

addhir0, r0, #1  ;若r0 > r1, 則r0 = r0 + 1

addlsr1, r1, #1  ; 若r0 <= r1, 則r1 = r1 + 1

cmp比較指令,用於把乙個暫存器的內容和另乙個暫存器的內容或乙個立即數進行比較,同時更新cpsr中條件標誌位的值。指令將第一運算元減去第二運算元,但不儲存結果,只更改條件標誌位。

cmp  r1, r0  ;做r1-r0的操作。

cmp  r1,#10  ;做r1-10的操作。

(3) s項(sign)

s項是條件碼設定項,它決定本次指令執行的結果是否影響至cpsr暫存器的相應狀態位的值。該項是可選的,使用時影響cpsr,否則不影響cpsr。

(4)rd項(destination)

rd是指令中的目標暫存器,它是必需的。根據指令的不同,有些指令中要求rd必須有r0~r7之間,有些要求rd必須在r0~r14之間,有些則沒有特殊要求。

(5)rn項

rn是第乙個運算元的暫存器,和rd一樣,不同的指令對其的使用有不同的要求。

(6)opcode2項

opcode2項是第二個運算元,在arm指令中,該運算元有三種形式:立即數形式、暫存器rm形式和暫存器加移位形式(rm, shift)。

例如:sub  r3,  r1,  #10

sub  r3,  r1,  r2

sub  r3,  r1,  r2,  lsl  #2

sub  r3,  r1,  r2,  lsl  r0

movls r2, r0 ; if r0 < r1 則 將小值存入r2中

在這個例子中,movls 能夠正確執行的條件c=0 and z=1 成立,是通過cmp設定了。

若執行指令後

zf=1 這個簡單,則說明兩個數相等,因為zero為1說明結果為0

當無符號時: 若

cf=1 則說明了有進製或借位,cmp是進行的減操作,故可以看出為借位,所以,此時oprd1cf=0 則說明了無借位,但此時要注意zf是否為0,若為0,則說明結果不為0,故此時oprd1>oprd2

當有符號時:

若sf=0,of=0 則說明了此時的值為正數,沒有溢位,可以直觀的看出,oprd1>oprd2

若sf=1,of=0 則說明了此時的值為負數,沒有溢位,則為oprd1若sf=0,of=1 則說明了此時的值為正數,有溢位,可以看出oprd1若sf=1,of=1則說明了此時的值為負數,有溢位,可以看出oprd1>oprd2

最後兩個可以作出這種判斷的原因是,溢位的本質問題:

兩數同為正,相加,值為負,則說明溢位

兩數同為負,相加,值為正,則說明溢位

故有,正正得負則溢位,負負得正則溢位

iptable 詳解 iptable命令詳解1

p protocal protocol 協議 j jump target i in inte ce name 入口 o out inte ce name 出口 f,fragment 分片 指定 p tcp時 source port port port 原埠 也作 sport destionation...

UNIX crontab命令詳解

crontab命令的功能是在一定的時間間隔排程一些命令的執行。在 etc目錄下有乙個crontab檔案,這裡存放有系統執行的一些排程程式。每個使用者可以建立自己的排程crontab。crontab命令有三種形式的命令列結構 crontab u user file crontab u user e l...

mount命令詳解

名稱 mount 使用許可權 系統管理者或 etc fstab中允許的使用者 使用方式 mount hv mount a ffnrsvw t vfstype mount fnrsvw o options device dir mount fnrsvw t vfstype o options devi...