關於組合語言中cmp指令的小筆記

2021-07-25 17:47:35 字數 1533 閱讀 7243

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 ...