日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

汇编语言笔记(三): 标志寄存器

發(fā)布時間:2024/7/23 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编语言笔记(三): 标志寄存器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

章節(jié)目錄

  • 簡介
  • ZF 標志寄存器
  • PF 標志寄存器
  • SF 標志寄存器
  • CF 標志寄存器
  • OF 標志寄存器
  • 幾條相關(guān)指令
  • DF 標志寄存器
  • PUSHF and POPF 標志寄存器
  • 作者能力有限, 如果您在閱讀過程中發(fā)現(xiàn)任何錯誤, 還請您務(wù)必聯(lián)系本人,指出錯誤, 避免后來讀者再學(xué)習(xí)錯誤的知識.謝謝!

    簡介

    8086 CPU 寄存器的結(jié)構(gòu)如下如:

    每個標志寄存器都有它特殊的含義,下面我們將一一介紹他們的含義及用途.

    ZF

    ZF 稱為零標志位(Zero Flag). 它記錄了相關(guān)指令執(zhí)行后, 其結(jié)果是否為 0. 如果結(jié)果為 0, 則 ZF=1; 如果結(jié)果不為 0, 則 ZF = 0. 至于哪些指令的執(zhí)行會影響 ZF 標記位, 則要參考該指令的說明了.

    示例:

    mov ax, 1sub ax, 1// 執(zhí)行上述指令之后, ZF = 1mov ax, 2sub ax, 1// 執(zhí)行上述指令之后, ZF = 0

    PF

    PF 稱為奇偶標記位(Parity Flag). 它記錄了執(zhí)行相關(guān)指令之后, 其結(jié)果的所有 bit 中 1 的個數(shù)是否為偶數(shù). 如果 1 的個數(shù)為偶數(shù)個, 則 PF = 1; 如果為奇數(shù)個, 則 PF = 0. (0 是偶數(shù), 因此,如果某個指令執(zhí)行之后結(jié)果為 0 且該指令會影響 PF 標志位, 此時 PF = 1),

    示例:

    mov al, 1add al, 10// 執(zhí)行上述指令之后, 結(jié)果為 00001011B, 有三個 '1', 則 PF = 0mov al, 1add al, 11// 執(zhí)行上述指令之后, 結(jié)果為 00001100B, 有四個 '1', 則 PF = 1

    SF

    SF 稱為符號標記位(Sign Flag). 它記錄了執(zhí)行相關(guān)指令之后, 其結(jié)果是否為負數(shù). 如果是負數(shù), 則 SF = 1; 如果不為負數(shù), 則 SF = 0.

    CF

    CF 稱為進位寄存器(Carry Flag). 一般情況下, 在進行無符號數(shù)運算的時候, 它記錄了運算結(jié)果的最高有效位向更高位的進位值, 或從更高位的借位值.

    比如, 我們要計算 98H 加 98H 的兩個八位數(shù)據(jù), 計算結(jié)果為 130H. 而 120H 超過了八位寄存器所能存儲的最大值, 因此會產(chǎn)生進位.

    mov al, 98Hadd al, al // 執(zhí)行上述指令之后, AL = 30H, CF = 1. add al, al // 執(zhí)行這條指令之后, AL = 60H, CF = 0

    同樣的, 當我們要計算 98H 減去 99H 時, 就需要借位.

    mov al, 98Hsub al, 99H // 執(zhí)行這條指令之后, AL = FFH, CF = 1. sub al, al // 執(zhí)行這條指令之后, AL = 00H, CF = 0.

    ADC 指令

    ADC 是帶進位加法指令. 它利用了 CF 標志位上記錄的進位值.
    指令格式: adc num1, num2
    功能: num1 = num1 + num2 + CF

    示例:

    mov ax, 2mov bx, 1sub bx, axadc ax, 1// 執(zhí)行上述指令之后, ax = 4. // adc ax, 1 等價于 ax + 1 + CF = 2 + 1 + 1 = 4.

    SBB 指令

    SBB 是帶借位減法, 它利用了 CF 標志位上記錄的借位值.
    指令格式: sbb num1, num2
    功能: num1 = num1 - num2 - CF

    示例:

    mov bx, 1000Hmov ax, 003EHsub bx, 2000Hsbb ax, 0020H // sbb ax, 0020H1 等價于 ax - 0020H - CF.

    OF

    OF 稱為溢出標志位(Overflow Flag). 一般情況, OF 記錄了有符號數(shù)運算結(jié)果是否發(fā)生了溢出. 如果發(fā)生溢出, 則 OF = 1; 如果沒有溢出, 則 OF = 0.

    mov al, 98add al, 99 // 執(zhí)行上述指令之后, 則會發(fā)生溢出. 8 位寄存機能存儲的值的范圍為 -128-127. // 98 + 99 = 197. 197 超出了 8 位寄存器的存儲范圍. 因此, CF = 0, OF = 1.

    這里注意 CF 和 OF 的區(qū)別:

    CF 對無符號數(shù)運算有意義
    OF 對有符號數(shù)運算有意義

    幾條相關(guān)指令

    CMP 指令

    指令格式: cmp num1, num2
    功能: 計算 num1 - num2 但不保存結(jié)果. 但根據(jù)計算結(jié)果對標志寄存進行設(shè)置.

    示例:

    mov ax, 8mov bx, 3cmp ax, bx// 執(zhí)行上述指令之后, ZF = 0, PF = 1, SF = 0, CF = 0, OF = 0

    常用相關(guān)指令

    指令含義檢測的標志位
    JE等于則轉(zhuǎn)移ZF=1
    JNE不等于則轉(zhuǎn)移ZF=0
    JB小于則轉(zhuǎn)移CF=1
    JNB大于等于則轉(zhuǎn)移CF=0
    JA大于則轉(zhuǎn)移CF=0 && ZF = 0
    JNA小于等于則轉(zhuǎn)移CF=1 && ZF = 1

    DF

    DF 稱為方向標志位(Direction Flag). 在串處理指令中, 控制每次操作后 SI, DI 的增減.
    DF = 0 每次操作后 SI, DI 遞增
    DF = 1 每次操作后 SI, DI 遞減

    PUSHF and POPF

    PUSHF 的功能是將標志寄存器的值壓棧
    POPF 的功能室將標志寄存器的值出棧, 送入標志寄存器中.

    歡迎交流任何想法.

    End…

    總結(jié)

    以上是生活随笔為你收集整理的汇编语言笔记(三): 标志寄存器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。