1. 程式人生 > >組合語言--微機CPU的指令系統(五)(比較運算指令)

組合語言--微機CPU的指令系統(五)(比較運算指令)

(7)比較運算指令

在程式中,我們要時常根據某個變數或表示式的取值去執行不同指令,從而使程式表現出有不同的功能。為了配合這樣的操作,在CPU的指令系統中提供了各種不同的比較指令。通過這些比較指令的執行來改變有關標誌位,為進行條件轉移提供依據。

1、比較指令CMP(Compare Instruction)

指令的格式:CMP Reg/Mem, Reg/Mem/Imm

受影響的標誌位:AF、CF、OF、PF、SF和ZF

指令的功能:用第二個運算元去減第一個運算元,並根據所得的差設定有關標誌位,為隨後的條件轉移指令提供條件。但並不儲存該差,所以,不會改變指令中的運算元。

2、比較交換指令(Compare And Exchange Instruction)

在資料傳送類指令中,我們介紹了交換指令XCHG,它不管二個運算元的值是什麼,都無條件地進行交換。而比較交換指令,是先進行比較,再根據比較的結果決定是否進行運算元的交換操作。

比較交換指令的功能:當二個運算元相等時,置標誌位ZF為1;否則,把第一運算元的值賦給第二運算元,並置標誌位ZF為0。

a) 8位/16位/32位比較交換指令

指令的格式:CMPXCHG Reg/Mem, AL/AX/EAX ;80486+

受影響的標誌位:AF、CF、OF、PF、SF和ZF

b) 64位比較交換指令

該指令只有一個運算元,第二個運算元EDX:EAX是隱含的。

指令的格式:CMPXCHG8B Reg/Mem ;Pentium+

受影響的標誌位:ZF

例如:假設(AX)=1234H,(BX)=1234H,(CX)=4321H。

CMPXCHG BX, AX ;指令執行後,ZF=1

CMPXCHG CX, AX ;指令執行後,ZF=0,(AX)=4321H,CX的值不變

3、字串比較指令(Compare String Instruction)

後面學習中介紹