匯編語言中cmp指令用法筆記與總結(jié)
本文實(shí)例講述了匯編語言中cmp指令用法。分享給大家供大家參考,具體如下:
cmp是比較指令,cmp的功能是相當(dāng)于減法指令,只是不保存結(jié)果.cmp指令執(zhí)行后,將對(duì)標(biāo)志寄存器產(chǎn)生影響.其他相關(guān)指令通過識(shí)別這些被影響的標(biāo)志寄存器來得知比較結(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
還有疑問的可以去查看一下指令手冊(cè),講解的比較細(xì)致
希望本文所述對(duì)大家匯編語言程序設(shè)計(jì)有所幫助。
相關(guān)文章
UEFI開發(fā)實(shí)戰(zhàn)用戶交互界面基礎(chǔ)說明
這篇文章主要為大家介紹了UEFI開發(fā)實(shí)戰(zhàn)用戶交互界面的基礎(chǔ)說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
淺析ELF轉(zhuǎn)二進(jìn)制允許把 Binary 文件加載到任意位置
本文通過 eip + 偏移地址 實(shí)現(xiàn)了運(yùn)行時(shí)計(jì)算數(shù)據(jù)地址,不再需要把 Binary 文件裝載到固定的位置。本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2020-02-02
ARM匯編判斷之如何用匯編判斷數(shù)組中正負(fù)數(shù)個(gè)數(shù)
這篇文章主要介紹了ARM匯編判斷之如何用匯編判斷數(shù)組中正負(fù)數(shù)個(gè)數(shù),在匯編語言中程序的基本框架是不變的,這里我們可以直接把正向遍歷的程序給貼過來,然后我們思考怎么運(yùn)用判斷后綴把數(shù)組中正數(shù)和負(fù)數(shù)分開,進(jìn)行判斷個(gè)數(shù)和分別求和,需要的朋友可以參考下2022-04-04

