test屬於邏輯運算指令
功能:執行bit
與bit
之間的邏輯運算
測試(兩運算元作與運算,僅修改標誌位,不回送結果)
test
對兩個引數(目標,源)執行and
邏輯操作,並根據結果設定標誌暫存器,結果本身不會儲存。test ax,bx
與and 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 和控制標誌...