亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

匯編語言中test和cmp有什么區(qū)別

 更新時間:2020年01月18日 14:18:23   作者:Quartz010  
匯編語言(assembly language)是一種用于電子計算機、微處理器、微控制器或其他可編程器件的低級語言,亦稱為符號語言。這篇文章主要介紹了匯編語言中test和cmp有什么區(qū)別,需要的朋友可以參考下

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

匯編test和cmp區(qū)別

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

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

PSW(Program Flag)程序狀態(tài)字(即標志)寄存器,是一個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位(半個字節(jié))產生的進位置。
有進位時1,否則置0.
⑥PF(Parity Flag)奇偶標志.結果操作數(shù)中1的個數(shù)為偶數(shù)時置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屬于邏輯運算指令

功能: 執(zhí)行BIT與BIT之間的邏輯運算
測試(兩操作數(shù)作與運算,僅修改標志位,不回送結果).
Test對兩個參數(shù)(目標,源)執(zhí)行AND邏輯操作,并根據(jù)結果設置標志寄存器,結果本身不會保存。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右數(shù)第三個位為1,jnz將會跳轉

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

2.Test的一個非常普遍的用法是用來測試一方寄存器是否為空:

test ecx, ecx
jz somewhere

如果ecx為零,設置ZF零標志為1,Jz跳轉

CMP屬于算術運算指令

功能: 比較兩個值(寄存器,內存,直接數(shù)值)
語法: CMP r/m,r/m/data
標志位: C,P,A,Z,O

CMP比較.(兩操作數(shù)作減法,僅修改標志位,不回送結果).
cmp實際上是只設置標志不保存結構的減法,并設置Z-flag(零標志).
零標志很像carry,也是內部標志寄存器的一位.

例如:

Cmp eax, 2; 如果eax-2=0即eax=2就設置零標志為1
Jz **; 如果設置了零標志就跳轉

我得出的結論
test邏輯與運算結果為零,就把ZF(零標志)置1;
cmp 算術減法運算結果為零,就把ZF(零標志)置1.

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

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

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

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

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

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

總結

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

相關文章

  • 16位匯編語言寄存器及指令整理(小結)

    16位匯編語言寄存器及指令整理(小結)

    這篇文章主要介紹了16位匯編語言寄存器及指令整理(小結),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • 8086匯編語言nasm版本

    8086匯編語言nasm版本

    這篇文章主要介紹了8086匯編語言nasm版本,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • 匯編語言存儲及寄存器原理解析

    匯編語言存儲及寄存器原理解析

    這篇文章主要介紹了匯編語言存儲及寄存器原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • os_object_release Crash 排查記錄分析

    os_object_release Crash 排查記錄分析

    這篇文章主要為大家介紹了os_object_release Crash 排查記錄分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • 匯編語言中的segment

    匯編語言中的segment

    segment是段的意思,是段定義偽指令,一個正常的應用程序被由若干個 segment組成,接下來通過本文給大家介紹匯編語言中的segment,需要的朋友可以參考下
    2020-01-01
  • UEFI開發(fā)實戰(zhàn)用戶交互界面使用說明VFR文件

    UEFI開發(fā)實戰(zhàn)用戶交互界面使用說明VFR文件

    這篇文章主要為大家介紹了UEFI開發(fā)實戰(zhàn)用戶交互界面使用說明VFR文件,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • 從匯編代碼開始全面解析synchronized還原最真實的偏向鎖

    從匯編代碼開始全面解析synchronized還原最真實的偏向鎖

    這篇文章主要為大家介紹了從模板解釋器匯編源碼開始分析還原最真實的偏向鎖實現(xiàn),解釋monitorenter字節(jié)碼命令的方法開始,從匯編代碼開始全面解析synchronized
    2022-02-02
  • iOS匯編入門教程之在Xcode工程中嵌入?yún)R編代碼的方法

    iOS匯編入門教程之在Xcode工程中嵌入?yún)R編代碼的方法

    在Xcode中嵌入?yún)R編代碼主要依賴了C語言支持通過 __asm__ 引入?yún)R編代碼的功能。這篇文章主要介紹了iOS匯編入門教程之在Xcode工程中嵌入?yún)R編代碼的方法,需要的朋友可以參考下
    2020-02-02
  • 從Go匯編角度解讀for循環(huán)的問題

    從Go匯編角度解讀for循環(huán)的問題

    Go常用的遍歷方式有兩種:for和for-range。這篇文章主要介紹了從Go匯編角度解讀for循環(huán)的兩個疑點,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • 匯編語言 and和or邏輯運算指令的實現(xiàn)

    匯編語言 and和or邏輯運算指令的實現(xiàn)

    這篇文章主要介紹了匯編語言 and,or邏輯運算指令的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01

最新評論