欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

匯編指令-狀態(tài)寄存器、cmp、test、jz等指令詳細說明

 更新時間:2020年01月20日 15:17:15   作者:xingpacer  
這篇文章主要介紹了匯編指令-狀態(tài)寄存器、cmp、test、jz等指令詳細說明,需要的朋友可以參考下

一、狀態(tài)寄存器

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

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

條件碼:

①OF(Overflow Flag)溢出標志,溢出時為1,否則置0.標明一個溢出了的計算,如:結(jié)構(gòu)和目標不匹配。
②SF(Sign Flag)符號標志,結(jié)果為負時置1,否則置0。
③ZF(Zero Flag)零標志,運算結(jié)果為0時置1,否則置0。
④CF(Carry Flag)進位標志,進位時置1,否則置0.注意:Carry標志中存放計算后最右的位。
⑤AF(Auxiliary carry Flag)輔助進位標志,記錄運算時第3位(半個字節(jié))產(chǎn)生的進位置。
有進位時1,否則置0。
⑥PF(Parity Flag)奇偶標志.結(jié)果操作數(shù)中1的個數(shù)為偶數(shù)時置1,否則置0。

控制標志位:

⑦DF(Direction Flag)方向標志,在串處理指令中控制信息的方向。
⑧IF(Interrupt Flag)中斷標志。
⑨TF(Trap Flag)陷井標志。

test和cmp指令運行后都會設置標志位,為舉例方便說一下jnz和jz

測試條件

JZ   ZF=1
JNZ  ZF=0
即Jz=jump if zero (結(jié)果為0則設置ZF零標志為1,跳轉(zhuǎn))
Jnz=jump if not zero

二、test指令和cmp指令

好,接著來看test和cmp

1、test指令

test屬于邏輯運算指令

功能:執(zhí)行BIT與BIT之間的邏輯運算
測試(兩操作數(shù)作與運算,僅修改標志位,不回送結(jié)果)。

Test對兩個參數(shù)(目標,源)執(zhí)行AND邏輯操作,并根據(jù)結(jié)果設置標志寄存器,結(jié)果本身不會保存。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將會跳轉(zhuǎn)
jnz跳轉(zhuǎn)的條件非0,即ZF=0,ZF=0意味著零標志沒被置位,即邏輯與結(jié)果為1。

2.Test的一個非常普遍的用法是用來測試一方寄存器是否為空:
test ecx, ecx
jz somewhere
如果ecx為零,設置ZF零標志為1,Jz跳轉(zhuǎn)

2、cmp指令
CMP屬于算術(shù)運算指令

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

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

例如:
Cmp eax, 2;       如果eax-2=0即eax=2就設置零標志為1
Jz ****;                如果設置了零標志就跳轉(zhuǎn)

得出的結(jié)論

test邏輯與運算結(jié)果為零,就把ZF(零標志)置1;
cmp 算術(shù)減法運算結(jié)果為零,就把ZF(零標志)置1。

對于jz和jnz,查看代碼和理解匯編代碼時,直接判斷test和cmp的運算結(jié)果決定是否跳轉(zhuǎn),至于ZF標記位是系統(tǒng)得知運算結(jié)果的標記位。

三、 直接標志轉(zhuǎn)移

指令格式                 機器碼                    測試條件                       如...則轉(zhuǎn)移  
JC                           72                           C=1                               有進位
JNC                         73                          C=0                               無進位
JZ/JE                       74                          Z=1                                零/  
JNZ/JNE                  75                         Z=0                               不為零/  
JS                           78                           S=1                                負號
JNS                         79                          S=0                                正號
JO                           70                          O=1                               有溢出
JNO                         71                         O=0                               無溢出
JP/JPE                     7A                        P=1                               奇偶位為偶
JNP/IPO                   7B                        P=0                               奇偶位為奇

四、間接標志轉(zhuǎn)移

先用cmp指令比較再用下面的判斷(少了一個 JE 為等于):
指令格式          機器碼             測試格式                如...則轉(zhuǎn)移
JA/JNBE()        77                    CZ=0                      >/  
JAE/JNB()        73                    C=0                        >=/  
JB/JNAE()        72                    C=1                        </  
JBE/JNA()        76                    CZ=1                      <=/  
JG/JNLE()        7F                   (SO)Z=0                  >/  
JGE/JNL()        7D                   SO=0                      >=/  
JL/JNGE()        7C                   SO=1                      </  
JLE/JNG()        7E                   (SO)Z=1                  <=/

小結(jié)

test指令
將兩個操作數(shù)進行邏輯與運算,并根據(jù)運算結(jié)果設置相關(guān)的標志位。test命令的兩個操作數(shù)不會被改變。運算結(jié)果在設置過相關(guān)標記位后會被丟棄。

影響的標志位CF,ZF,OF,SF,PF

cmp指令
比較指令。cmp的功能相當于減法指令,只是對操作數(shù)之間運算比較,不保存結(jié)果。cmp指令執(zhí)行后,將對標志寄存器產(chǎn)生影響。其他相關(guān)指令通過識別這些被影響的標志寄存器位來得知比較結(jié)果。

影響的標志位CF,ZF,OF,AF,PF

相關(guān)文章

  • 詳解匯編語言MOV指令

    詳解匯編語言MOV指令

    在匯編語言中,MOV指令是數(shù)據(jù)傳送指令,也是最基本的編程指令,這篇文章主要介紹了匯編語言MOV指令,需要的朋友可以參考下
    2020-01-01
  • 匯編程序輸出“Hello world”的實現(xiàn)

    匯編程序輸出“Hello world”的實現(xiàn)

    這篇文章主要介紹了匯編程序輸出“Hello world”的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • 匯編語言存儲及寄存器原理解析

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

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

    匯編語言中DIV指令的具體用法

    本文主要介紹了匯編語言中DIV指令的具體用法
    2024-03-03
  • VScode配置匯編語言環(huán)境的實現(xiàn)步驟

    VScode配置匯編語言環(huán)境的實現(xiàn)步驟

    本文主要介紹了VScode配置匯編語言環(huán)境的實現(xiàn)步驟,文中通過圖文的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-03-03
  • 匯編程序 查表求平方的實現(xiàn)

    匯編程序 查表求平方的實現(xiàn)

    這篇文章主要介紹了匯編程序 查表求平方的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • 匯編語言實現(xiàn)打印楊輝三角

    匯編語言實現(xiàn)打印楊輝三角

    這篇文章主要介紹了匯編語言實現(xiàn)打印楊輝三角,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • 匯編實現(xiàn)直接插入排序的方法示例

    匯編實現(xiàn)直接插入排序的方法示例

    這篇文章主要介紹了匯編實現(xiàn)直接插入排序的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • 匯編語言XOR指令:對兩個操作數(shù)進行邏輯(按位)異或操作(推薦)

    匯編語言XOR指令:對兩個操作數(shù)進行邏輯(按位)異或操作(推薦)

    匯編語言(assembly language)是一種用于電子計算機、微處理器、微控制器或其他可編程器件的低級語言,亦稱為符號語言。這篇文章主要介紹了匯編語言XOR指令:對兩個操作數(shù)進行邏輯(按位)異或操作,需要的朋友可以參考下
    2020-01-01
  • os_object_release Crash 排查記錄分析

    os_object_release Crash 排查記錄分析

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

最新評論