最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

匯編指令-狀態(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指令運行后都會設(shè)置標志位,為舉例方便說一下jnz和jz

測試條件

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

二、test指令和cmp指令

好,接著來看test和cmp

1、test指令

test屬于邏輯運算指令

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

Test對兩個參數(shù)(目標,源)執(zhí)行AND邏輯操作,并根據(jù)結(jié)果設(shè)置標志寄存器,結(jié)果本身不會保存。EST AX, BX 與 AND AX, BX 命令有相同效果

語法:TEST r/m,r/m/data
影響標志:C,O,P,Z,S(其中C與O兩個標志會被設(shè)為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為零,設(shè)置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實際上是只設(shè)置標志不保存結(jié)構(gòu)的減法,并設(shè)置Z-flag(零標志)。
零標志很像carry,也是內(nèi)部標志寄存器的一位。

例如:
Cmp eax, 2;       如果eax-2=0即eax=2就設(shè)置零標志為1
Jz ****;                如果設(shè)置了零標志就跳轉(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é)果設(shè)置相關(guān)的標志位。test命令的兩個操作數(shù)不會被改變。運算結(jié)果在設(shè)置過相關(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)文章

  • 匯編語言 寄存器內(nèi)存訪問原理解析

    匯編語言 寄存器內(nèi)存訪問原理解析

    這篇文章主要介紹了匯編語言 寄存器內(nèi)存訪問原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • 匯編語言LDR指令和LDR偽指令詳解

    匯編語言LDR指令和LDR偽指令詳解

    這篇文章主要介紹了匯編語言LDR指令和LDR偽指令詳解,偽指令是用來自動拆分代碼值的,會把一條語句拆分成多條語句,本文結(jié)合示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-01-01
  • UEFI開發(fā)實戰(zhàn)用戶交互界面使用說明UNI文件

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

    這篇文章主要為大家介紹了UEFI開發(fā)實戰(zhàn)用戶交互界面使用說明UNI文件,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • 匯編語言編譯環(huán)境搭建過程

    匯編語言編譯環(huán)境搭建過程

    這篇文章主要介紹了匯編語言編譯環(huán)境搭建過程,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • 匯編語言中的segment

    匯編語言中的segment

    segment是段的意思,是段定義偽指令,一個正常的應用程序被由若干個 segment組成,接下來通過本文給大家介紹匯編語言中的segment,需要的朋友可以參考下
    2020-01-01
  • 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
  • 匯編語言指令集學習條件轉(zhuǎn)移指令詳解

    匯編語言指令集學習條件轉(zhuǎn)移指令詳解

    這篇文章主要為大家介紹了匯編語言指令集學習條件轉(zhuǎn)移的指令全面總結(jié)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-11-11
  • 匯編分析 Golang 循環(huán)(推薦)

    匯編分析 Golang 循環(huán)(推薦)

    循環(huán)是編程中很強大的一個概念,而且非常容易處理。這篇文章主要介紹了匯編分析 Golang 循環(huán),需要的朋友可以參考下
    2020-02-02
  • 8086匯編語言nasm版本

    8086匯編語言nasm版本

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

    匯編語言AAD,DAA,DAS用法解析

    這篇文章主要介紹了匯編語言AAD,DAA,DAS用法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01

最新評論

洛阳市| 青岛市| 庐江县| 毕节市| 安西县| 呼玛县| 浦城县| 阜阳市| 宣汉县| 和顺县| 文水县| 阜新| 凤阳县| 沁源县| 太谷县| 麻阳| 北川| 汝阳县| 肇东市| 稷山县| 潮州市| 社旗县| 泾阳县| 涡阳县| 易门县| 岱山县| 东莞市| 桃园县| 黄梅县| 津市市| 本溪| 锡林浩特市| 囊谦县| 察哈| 满洲里市| 盈江县| 闻喜县| 务川| 乳山市| 大丰市| 观塘区|