cmp是比較指令,cmp的功能是相當於減法指令,只是不儲存結果.cmp指令執行後,將對標誌暫存器產生影響.其他相關指令通過識別這些被影響的標誌暫存器來得知比較結果.
cmp指令格式: cmp 操作物件1,操作物件2
功能: 計算操作物件1 - 操作物件2 但不儲存結果,僅僅根據計算結果對標誌暫存器進行設定.比如cmp ax,ax 是做ax - ax 的運算,結果為0,但並不在ax中儲存,僅影響flag的相關各位.
指令執行後: zf = 1,pf = 1,sf = 0,cf = 0,of = 0;
下面的指令:
mov ax,8
mov bx,3
mov ax,bx
執行後: (ax)= 8,zf = 0,pf = 1,sf = 0, cf = 0, of = 0
如果 ax = bx 則 ax - bx = 0 ,所以 : zf = 1
如果 ax != bx 則ax - bx != 0,所以 : zf = 0
如果ax < bx 則ax - bx 將產生錯位,所以 : cf = 1
如果 ax >= bx 則 ax - bx 將不必借位,所以 : cf = 0
如果ax > bx 則 ax - bx 既不必借位,結果又不為0, 所以 : cf = 0 並且 zf = 0
如果 ax <= bx 則ax - bx 既可能借位,結果可能為0,所以 : cf = 1 或 zf =1
檢測比較結果的條件轉移指令
je 等於則轉移 zf=1
jne 不等於則轉移 zf=0
jb 低於則轉移 cf=1
jnb 不低於則轉移 cf=0
ja 高於則轉移 cf=0且zf=0
jna 不高於則轉移 cf=1或zf=1
e : equal
ne : not equal
b: below
nb : not below
a : above
na : not above
程式設計: 統計data段中數值小於8的位元組的個數,用ax儲存統計結果
mov ax,data
mov ds,ax
mov ax,0 ;初始化累加器
mov bx,0 ;ds:bx指向第乙個位元組
mov cx,8
s : cmp byte ptr [bx] , 8 ;和8進行比較
jnb next ;如果不小於8轉到next,繼續迴圈
inc ax ;如果小於8就將計數值加1
next:inc bx
loop s
程式執行後: ax = 2
還有疑問的可以去檢視一下指令手冊,講解的比較細緻
組合語言中xor指令 計算機組合語言
組合語言 雖然用機器語言編寫程式有很高的要求和許多不便,但編寫出來的程式執 行效率高,cpu嚴格按照程式設計師的要求去做,沒有多餘的額外操作。所以,在保留 程式執行效率高 的前提下,人們就開始著手研究一種能大大改善 程式可讀性的程式設計方法。為了改善機器指令的可讀性,選用了一些能反映機器指令功能的單...
組合語言中xor指令 xor指令 ADC指令舉例
xor 表示異或操作1 xor 1 00 xor 0 01 xor 0 10 xor 1 1 所以xor cx,cx就相當於把cx各位置0 異或可以用來將數值取反。譬如10100011 xor 11111111的結果就是01011100。我是彙編新手剛剛學習彙編,今天剛好學到了彙編的xor指令。這個...
詳解組合語言中乘法指令 MUL IMUL
本文參考了馬維華老師的 微機原理與接 術 一書 指令格式 mul reg mem reg暫存器,mem儲存器 imul reg mem mul和imul指令分別用於實現無符號數的乘法和有符號數的乘法運算。都只有乙個源運算元,可以使暫存器或儲存器,而且目標運算元隱含規定在累加器中。1 mul指令 a ...