本文實(shí)例講述了匯編語(yǔ)言中cmp指令用法。分享給大家供大家參考,具體如下:
cmp是比較指令,cmp的功能是相當(dāng)于減法指令,只是不保存結(jié)果.cmp指令執(zhí)行后,將對(duì)標(biāo)志寄存器產(chǎn)生影響.其他相關(guān)指令通過(guò)識(shí)別這些被影響的標(biāo)志寄存器來(lái)得知比較結(jié)果.
cmp指令格式: cmp 操作對(duì)象1,操作對(duì)象2
功能: 計(jì)算操作對(duì)象1 - 操作對(duì)象2 但不保存結(jié)果,僅僅根據(jù)計(jì)算結(jié)果對(duì)標(biāo)志寄存器進(jìn)行設(shè)置.比如cmp ax,ax 是做ax - ax 的運(yùn)算,結(jié)果為0,但并不在ax中保存,僅影響flag的相關(guān)各位.
指令執(zhí)行后: zf = 1,pf = 1,sf = 0,cf = 0,of = 0;
下面的指令:
mov ax,8
mov bx,3
mov ax,bx
執(zhí)行后: (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 將產(chǎn)生錯(cuò)位,所以 : cf = 1
如果 ax >= bx 則 ax - bx 將不必借位,所以 : cf = 0
如果ax > bx 則 ax - bx 既不必借位,結(jié)果又不為0, 所以 : cf = 0 并且 zf = 0
如果 ax <= bx 則ax - bx 既可能借位,結(jié)果可能為0,所以 : cf = 1 或 zf =1
檢測(cè)比較結(jié)果的條件轉(zhuǎn)移指令
je 等于則轉(zhuǎn)移 zf=1
jne 不等于則轉(zhuǎn)移 zf=0
jb 低于則轉(zhuǎn)移 cf=1
jnb 不低于則轉(zhuǎn)移 cf=0
ja 高于則轉(zhuǎn)移 cf=0且zf=0
jna 不高于則轉(zhuǎn)移 cf=1或zf=1
e : equal
ne : not equal
b: below
nb : not below
a : above
na : not above
編程: 統(tǒng)計(jì)data段中數(shù)值小于8的字節(jié)的個(gè)數(shù),用ax保存統(tǒng)計(jì)結(jié)果
mov ax,data
mov ds,ax
mov ax,0 ;初始化累加器
mov bx,0 ;ds:bx指向第一個(gè)字節(jié)
mov cx,8
s : cmp byte ptr [bx] , 8 ;和8進(jìn)行比較
jnb next ;如果不小于8轉(zhuǎn)到next,繼續(xù)循環(huán)
inc ax ;如果小于8就將計(jì)數(shù)值加1
next:inc bx
loop s
程序執(zhí)行后: ax = 2
還有疑問(wèn)的可以去查看一下指令手冊(cè),講解的比較細(xì)致
希望本文所述對(duì)大家匯編語(yǔ)言程序設(shè)計(jì)有所幫助。