1樓:蘇嘉愛娛樂
test對兩個引數(目標,源)執行and邏輯操作,並根據結果設定標誌暫存器,結果本身不會儲存。
test ax,bx 與 and ax,bx 命令有相同效果,只是test指令不改變ax和bx的內容,而and指令會把結果儲存到ax中。
test命令將兩個運算元進行邏輯與運算,並根據運算結果設定相關的標誌位。但是,test命令的兩個運算元不會被改變。運算結果在設定過相關標記位後會被丟棄。
est的一個非常普遍的用法是用來測試一方暫存器是否為空:test ecx, ecx jz somewhere,如果ecx為零,設定zf零標誌為1,jz跳轉。
擴充套件資料
pytest :
pytest 允許你在任何名為 test_*.py 的檔案中定義測試,並將其定義為以 test_* 開頭的函式。然後,pytest 將在整個專案中查詢所有測試,並在控制檯中執行 pytest 時自動執行這些測試。
pytest 接受標誌和引數 ,它們可以在測試執行器停止時更改,這些包含如何輸出結果,執行哪些測試以及輸出中包含哪些資訊。
它還包括一個 set_trace() 函式,它可以進入到你的測試中。它會暫停您的測試, 並允許你與變數進行互動,不然你只能在終端中“四處翻弄”來除錯你的專案。pytest 最好的一方面是其強大的外掛生態系統。
2樓:匿名使用者
為舉例方便說一下jnz和jz
測試條件
jz zf=1
jnz zf=0
即jz=jump if zero (結果為0則設定zf零標誌為1,跳轉)
jnz=jump if not zero
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)
運用舉例:
1.test用來測試一個位,例如暫存器:
test eax, 100b; b字尾意為二進位制
jnz ******; 如果eax右數第三個位為1,jnz將會跳轉
我是這樣想的,jnz跳轉的條件是zf=0,zf=0意味著zf(零標誌)沒被置位,即邏輯與結果為1.
2.test的一個非常普遍的用法是用來測試一方暫存器是否為空:
test ecx, ecx
jz somewhere
如果ecx為零,設定zf零標誌為1,jz跳轉
3樓:無地自容射手
組合語言中,test的用法你可以。到相關的組合語言的書裡進行了解
彙編中的test指令
4樓:匿名使用者
test執行的就是and的指令,只不過不會儲存and執行的結果,而是根據and的結果設定flags暫存器的各種標誌
test al, 08h 就是測試al的第4位是不是1,8h = 0000 1000
同理test ax, 0200h 測試ax的第10位, 0200h = 0000 0010 0000 0000
test cl, 01h 測試cl的第1位,01h = 0000 0001
比如test al, 01h
jz zero ; al的第一位是0
jnz one ; al的第一位是1
5樓:匿名使用者
test屬於邏輯運算指令,其功能為功能執行bit與bit之間的邏輯運算和測試功能(兩運算元作與運算,僅修改標誌位,不回送結果)。
test對兩個引數(目標,源)執行and邏輯操作,並根據結果設定標誌暫存器,結果本身不會儲存。est ax, bx與and ax, bx命令有相同效果。test語法規格:
test r/m,r/m/data。其影響標誌包括:c,o,p,z,s(其中c與o兩個標誌會被設為0)。
test的運用舉例:利用test指令測試一個位,例如暫存器:
test eax, 100b;/b字尾意為二進位制/
jnz ******;/如果eax右數第三個位為1,jnz將會跳轉/
jnz跳轉的條件非0,即zf=0,zf=0意味著零標誌沒被置位,即邏輯與結果為1。
與彙編指令test功能相仿的還有cmp指令,cmp屬於算術運算指令,其功能為功能為比較兩個值(暫存器,記憶體,直接數值),與test指令的測試功能相仿,其語法格式為cmp r/m,r/m/data,影響的標誌位包括c,p,a,z,o。
cmp比較.(兩運算元作減法,僅修改標誌位,不回送結果)。cmp實際上是隻設定標誌不儲存結構的減法,並設定z-flag(零標誌)。
零標誌很像carry,也是內部標誌暫存器的一位。
6樓:匿名使用者
test指令是測試指令,用於測試某些位是否為0,執行的是與運算,並且會將cf和of置0,並且影響sf,zf。若測試的位均為0,則sf=0,zf=1。
舉個例子吧。
mov al,40h
test al,08h
執行起來就是
0100 0000(40h)
0000 1000(08h)
意思就是測試40h的左起第四位是否為0.
測試的結果是為0,
所以各標誌位的狀態是:cf=0,of=0,sf=0,cf=1
7樓:anna王爾德
看過破解教程,都知道test,cmp是比較關鍵,可是我一直不清楚它們究竟是怎麼比較的,最後下決心找了很多資料,和大家一起把它們弄清楚.
首先看看:狀態暫存器(即標誌暫存器)
psw(program flag)程式狀態字(即標誌)暫存器,是一個16位暫存器,由條件碼標誌(flag)和控制標誌構成,
如下所示:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
of df if tf sf zf af pf cf
條件碼:
①of(overflow flag)溢位標誌,溢位時為1,否則置0.標明一個溢位了的計算,如:結構和目標不匹配.
②sf(sign flag)符號標誌,結果為負時置1,否則置0.
③zf(zero flag)零標誌,運算結果為0時置1,否則置0.
④cf(carry flag)進位標誌,進位時置1,否則置0.注意:carry標誌中存放計算後最右的位.
⑤af(auxiliary carry flag)輔助進位標誌,記錄運算時第3位(半個位元組)產生的進位置。
有進位時1,否則置0.
⑥pf(parity flag)奇偶標誌.結果運算元中1的個數為偶數時置1,否則置0.
控制標誌位:
⑦df(direction flag)方向標誌,在串處理指令中控制資訊的方向。
⑧if(interrupt flag)中斷標誌。
⑨tf(trap flag)陷井標誌。
為舉例方便說一下jnz和jz
測試條件
jz zf=1
jnz zf=0
即jz=jump if zero (結果為0則設定zf零標誌為1,跳轉)
jnz=jump if not zero
好,接著來看test和cmp
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)
運用舉例:
1.test用來測試一個位,例如暫存器:
test eax, 100b; b字尾意為二進位制
jnz ******; 如果eax右數第三個位為1,jnz將會跳轉
我是這樣想的,jnz跳轉的條件是zf=0,zf=0意味著zf(零標誌)沒被置位,即邏輯與結果為1.
2.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 ****; 如果設定了零標誌就跳轉
我得出的結論
test邏輯與運算結果為零,就把zf(零標誌)置1;
cmp 算術減法運算結果為零,就把zf(零標誌)置1
8樓:匿名使用者
test是執行與運算,結果不存入目的暫存器中!自己動手算下哈,ok?
組合語言資料偽指令DUP用法,組合語言中的dup有什麼作用
茲斬鞘 10 dup 1 重複定義了10個字元素,初始值為1,佔用10 2 20個位元組。5 dup 重複定義了5個字元素 其初始值實際為0 佔用5 2 10個位元組 因此總共佔用30個位元組。具體分析 在彙編定義變數的時候會用到dup,變數名 型別 初值表,dup用於把一個相同值賦值若干次,重複次...
關於組合語言中的標誌位,組合語言中 關於標誌位的問題
鯤鵬展翅 psw中的8個標誌位,在debug下用符號表示,每個標誌位有兩種取值,分別為0和1,各自對應不同的符號。 習明 標誌名設定 nv 清除 ov 溢位 方向 dn 減 up 增 中斷 ei 啟用 di 禁用 正負 ng 負 pl 正 零 zr 0 nz 非0 輔助進製 ac 進製 na 不進製...
組合語言中je 和jne的區別,組合語言指令JG與JGE的用法區別
je 表示等於就跳轉,jne是不等於就跳轉,完全相反的意思。je jmp equal jne jmp not equal jz 表示當zf 1 時跳轉,即結果為0跳轉。jnz 即 zf 0 時跳轉,即結果不為0 跳轉。jz是零標誌位置位 1 即為0 時跳轉。jnz與上面相反,是當零標誌位置0 0 即...