久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

匯編語言中test和cmp有什么區別

匯編語言(assembly language)是一種用于電子計算機、微處理器、微控制器或其他可編程器件的低級語言,亦稱為符號語言。這篇文章主要介紹了匯編語言中test和cmp有什么區別,需要的朋友

匯編語言(assembly language)是一種用于電子計算機、微處理器、微控制器或其他可編程器件的低級語言,亦稱為符號語言。在匯編語言中,用助記符代替機器指令的操作碼,用地址符號或標號代替指令或操作數的地址。在不同的設備中,匯編語言對應著不同的機器語言指令集,通過匯編過程轉換成機器指令。特定的匯編語言和特定的機器語言指令集是一一對應的,不同平臺之間不可直接移植。下面看下匯編語言中test和cmp有什么區別,

匯編test和cmp區別

看過破解教程,都知道test,cmp是比較關鍵,可是我一直不清楚它們究竟是怎么比較的,最后下決心找了很多資料,和大家一起把它們弄清楚.

首先看看:狀態寄存器(即標志寄存器)

PSW(Program Flag)程序狀態字(即標志)寄存器,是一個16位寄存器,由條件碼標志(flag)和控制標志構成,
如下所示:

條件碼:

①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邏輯操作,并根據結果設置標志寄存器,結果本身不會保存。EST 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.

結論很簡單嘛,之前我怎么就分不清呢,真是笨哪!

ps:匯編語言中CMP的作用是什么?

mp(compare)指令進行比較兩個操作數的大小。

1.匯編語言是面向機器的程序設計語言。在匯編語合中,用助記符代替操作碼,用地址符號或標號代替地址碼。這樣用符號代替機器語言的二進制碼,就把機器語言變成了匯編語言。于是匯編語言亦稱為符號語言。使用匯編語言編寫的程序,機器不能直接識別,要由一種程序將匯編語言翻譯成機器語言,這種起翻譯作用的程序叫匯編程序,匯編程序是系統軟件中語言處理系統軟件。匯編程序把匯編語言翻譯成機器語言的過程稱為匯編。

2.例:cmp oprd1,oprd2,為第一個操作減去第二個操作數,但不影響兩個操作數的值,它影響flag的CF,ZF,OF,AF,PF。若執行指令后,ZF=1 則說明兩個數相等,因為zero為1說明結果為0。當無符號時,CF=1 則說明了有進位或借位,cmp是進行的減操作,故可以看出為借位,所以,oprd1<oprd2。

3.CF=0 則說明了無借位,但此時要注意ZF是否為0,若為0,則說明結果不為0,故此時oprd1>oprd2,當有符號時,若SF=0,OF=0 則說明了此時的值為正數,沒有溢出,可以直觀的看出,oprd1>oprd2,若SF=1,OF=0 則說明了此時的值為負數,沒有溢出,則為oprd1<oprd2,若SF=0,OF=1 則說明了此時的值為正數,有溢出,可以看出oprd1<oprd2,若SF=1,OF=1則說明了此時的值為負數,有溢出,可以看出oprd1>oprd2。

總結

以上所述是小編給大家介紹的匯編語言中test和cmp有什么區別,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對html5模板網網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

主站蜘蛛池模板: 久久精品欧美一区二区三区不卡 | 国产精品一区久久久 | 国产福利在线视频 | 操久久 | 欧美激情亚洲激情 | 一区精品在线观看 | 亚洲精品乱码久久久久久黑人 | 亚洲精品中文在线观看 | 日日做夜夜爽毛片麻豆 | 日韩在线视频免费观看 | 久久久一区二区三区四区 | 亚洲男人网 | 免费在线看黄视频 | 尤物在线精品视频 | 日韩欧美手机在线 | 毛片一区二区 | 国产日韩欧美一区二区在线播放 | 婷婷激情综合 | 欧美午夜精品理论片a级按摩 | 午夜影院| 久久久久久久一区二区三区 | 亚洲第一在线 | 日韩黄色小视频 | 青青草原综合久久大伊人精品 | 国产精品久久久乱弄 | jizz亚洲人| 国产午夜精品一区二区三区在线观看 | 亚洲精品女人久久久 | 欧美一级在线 | 午夜a√ | 国产精品久久久久久久久免费丝袜 | 一区二区三区四区av | 国产一区二区在线免费观看 | 欧美黄色片 | 免费在线观看一区二区 | 99精品热视频| 人人人人爽 | 欧洲亚洲一区 | 亚洲性综合网 | 一级片av| 国产精品毛片久久久久久久 |