彙編中的TESP和CMP區別

2022-07-29 10:36:12 字數 1177 閱讀 1157

test屬於邏輯運算指令

功能:執行bitbit之間的邏輯運算

測試(兩運算元作與運算,僅修改標誌位,不回送結果)

test對兩個引數(目標,源)執行and邏輯操作,並根據結果設定標誌暫存器,結果本身不會儲存。test ax,bxand ax,bx命令有相同效果

語法

test r/m,r/m/data
影響標誌

c,o,p,z,s(其中c與o兩個標誌會被設為0)

注:

標誌位c:進製標誌位,當執行乙個加法(減法)運算時,最高位產生進製(或借位)時,cf為1,否則為0。

標誌位a:輔助進製標誌,乙個加法(減法)運算結果的低4位向高4位有進製(或借位)時則af=1否則af=0

運用舉例

test用來測試乙個位,例如暫存器:

test eax, 100b		; b字尾意為二進位制

jnz ****** ;如果eax右數第三個位為1,jnz將會跳轉

我是這樣想的,jnz跳轉的條件是zf=0,zf=0意味著zf(零標誌)沒被置位,即邏輯與結果為1.

test的乙個非常普遍的用法是用來測試一方暫存器是否為空:

test ecx, ecx

jz somewhere

如果ecx為零,設定zf零標誌為1,jz跳轉

cmp屬於算術運算指令

功能比較兩個值(暫存器,記憶體,直接數值)

語法

cmp r/m,r/m/data
影響標誌位

c,p,a,z,o

注:

cmp比較.(兩運算元作減法,僅修改標誌位,不回送結果).

cmp實際上是只設定標誌不儲存結構的減法,並設定z-flag(零標誌).

零標誌很像carry,也是內部標誌暫存器的一位.

運用舉例
cmp eax, 2;       如果eax-2=0即eax=2就設定零標誌為1

jz ****; 如果設定了零標誌就跳轉

結論

彙編中的TESP和CMP區別

test屬於邏輯運算指令 功能 執行bit與bit之間的邏輯運算 測試 兩運算元作與運算,僅修改標誌位,不回送結果 test對兩個引數 目標,源 執行and邏輯操作,並根據結果設定標誌暫存器,結果本身不會儲存。test ax,bx與and ax,bx命令有相同效果 語法test r m,r m da...

彙編test和cmp區別

看過破解教程,都知道test,cmp是比較關鍵,可是我一直不清楚它們究竟是怎麼比較的,最後下決心找了很多資料,和大家一起把它們弄清楚.首先看看 狀態暫存器 即標誌暫存器 psw program flag 程式狀態字 即標誌 暫存器,是乙個16位暫存器,由條件碼標誌 flag 和控制標誌構成,如下所示...

組合語言 test 和 cmp 區別

from 看過破解教程,都知道 test,cmp 是比較關鍵,可是我一直不清楚它們究竟是怎麼比較的,最後下決心找了很多資料,和大家一起把它們弄清楚.首先看看 狀態暫存器 即標誌暫存器 psw program flag 程式狀態字 即標誌 暫存器,是乙個16位暫存器,由條件碼標誌 flag 和控制標誌...