日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

章節(jié)目錄

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

    簡介

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

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

    ZF

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

    示例:

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

    PF

    PF 稱為奇偶標(biāo)記位(Parity Flag). 它記錄了執(zhí)行相關(guān)指令之后, 其結(jié)果的所有 bit 中 1 的個數(shù)是否為偶數(shù). 如果 1 的個數(shù)為偶數(shù)個, 則 PF = 1; 如果為奇數(shù)個, 則 PF = 0. (0 是偶數(shù), 因此,如果某個指令執(zhí)行之后結(jié)果為 0 且該指令會影響 PF 標(biāo)志位, 此時 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 稱為符號標(biāo)記位(Sign Flag). 它記錄了執(zhí)行相關(guān)指令之后, 其結(jié)果是否為負(fù)數(shù). 如果是負(fù)數(shù), 則 SF = 1; 如果不為負(fù)數(shù), 則 SF = 0.

    CF

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

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

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

    同樣的, 當(dāng)我們要計(jì)算 98H 減去 99H 時, 就需要借位.

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

    ADC 指令

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

    示例:

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

    SBB 指令

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

    示例:

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

    OF

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

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

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

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

    幾條相關(guān)指令

    CMP 指令

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

    示例:

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

    常用相關(guān)指令

    指令含義檢測的標(biāo)志位
    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 稱為方向標(biāo)志位(Direction Flag). 在串處理指令中, 控制每次操作后 SI, DI 的增減.
    DF = 0 每次操作后 SI, DI 遞增
    DF = 1 每次操作后 SI, DI 遞減

    PUSHF and POPF

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

    歡迎交流任何想法.

    End…

    總結(jié)

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

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