組合語言中test的用法,彙編中的TEST指令

時間 2021-08-14 23:00:27

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?

關於組合語言中的loop指令,關於組合語言中的LOOP指令

這個程式迴圈一次,是由cx存放的。cx中存放的是迴圈的次數 程式設計計算2 12 assume cs code code segment mov ax,2 mov cx,11 s add ax,ax loop s mov ax,4c00h int 21h code ends end執行loop s時...

關於組合語言移植性的問題,關於組合語言中的LOOP指令

兄弟,你理解錯了,首先你要明白,組合語言是一種針對具體機器的低階語言,這裡說的不同機器一般來講是指cpu指令系統不相相容的兩種機器,比如常用的8086與51,dsp,arm,等等,他們的指令系統都不是通用的。自然移植到別的機器上不行,舉個例子來說吧,假如51,的p0埠可以用來點亮一盞燈,但是對808...

組合語言XOR命令什麼意思,組合語言中,指令XOR CX,CX表示什麼意思

凡筱雲 組合語言xor命令是異或的意思,異或,英文為exclusive or,或縮寫成xor 異或 xor 是一個數 算符。它應用於邏輯運算。異或的數學符號為 計算機符號為 xor 異或可逆運算。1 xor 1 0,0 xor 0 0,1 xor 0 1,0 xor 1 1。a xor b的運算方法...