zoukankan      html  css  js  c++  java
  • 第十一章.md

    第十一章 标志寄存器

    引言

    8086CPU标志寄存器有16bits,其中的存储信息叫程序状态字(psw)

    标志寄存器按位表示意义

    1567651426982其中空的位无意义,保留


    ZF标志位

    zero flag 结果 == 0? zf=1 : zf=0

    1567651723845

    使用指令应注意是否影响标志寄存器


    PF标志位

    parity flag结果二进制1的个数为偶数? pf=1 : pf=0;


    SF标志位

    symbol flag结果为负数? sf=1: sf=0;

    SF标志位总是将运算看做有符号数进行操作,当计算数值需要看做有符号时,才看sf标志位


    CF标志位(无符号溢出)

    1567652717447

    1567653022287

    1567653041274

    1567653168171


    OF标志位(有符号溢出)

    add 98, 99 == -59

    1567653695400

    1567653747834


    adc指令

    带进位加法指令 adc 对象1, 对象2

    对象1 = 对象1 + 对象2 + CF

    adc ax, bx 即`ax = ax + bx + CF

    示例

    mov ax, 2
    mov bx, 1
    sub bx, ax			; 进行了借位, CF = 1
    adc ax, 1			; 结果 ax = ax + 1 + CF , ax = 4
    

    add ax, bx 等同于

    add al, bl		;CF保存是否进位
    adc ah, bh		;adc将进位状态加上
    

    1567655178350

    inc si
    inc si		;不能直接 add si, 2 因为会影响cf的值 
    

    sbb指令

    带借位减法指令,使用CF位上的值 sbb 对象1, 对象2

    对象1 = 对象1 - 对象2 - cf

    adc指令


    cmp指令

    cmp a, b

    a -b

    该指令仅仅影响标志位值,不会保存结果

    1567745907405

    有符号数

    1567746163470

    1567746206215

    1. SF = 1, OF = 0

      此时,没有溢出,sf标志位与实际运算结果一致

    2. SF = 1, OF = 1

      此时,溢出,sf标志位与实际结果相反

    1567746629666

    1567746651267

    1567746703382

    1567747943034

    ZF=1时,je就会跳转


    DF标志和串传送指令

    1567989985698

    *movsb*
    功能: 以字节为单位进行传送
    es*16 + di = ds*16 + si
    1.如果DF==0, si++,di++
    2.如果DF==1, si--, di--
    
    *movsbw*
    功能: 以字为单位进行传送(同上)
    
    *rep*
    功能:根据cx的值,重复执行后面的串传送指令
    格式:rep movsw  (可以实现cx个字的传送)
    

    cld:将df设置为0

    std:将df设置为1


    pushf, popf

    pushf:将标志寄存器的值送入栈

    popf:将栈中的值弹出到标志寄存器

  • 相关阅读:
    常见寻找OEP脱壳的方法
    Windows内核原理系列01
    HDU 1025 Constructing Roads In JGShining's Kingdom
    HDU 1024 Max Sum Plus Plus
    HDU 1003 Max Sum
    HDU 1019 Least Common Multiple
    HDU 1018 Big Number
    HDU 1014 Uniform Generator
    HDU 1012 u Calculate e
    HDU 1005 Number Sequence
  • 原文地址:https://www.cnblogs.com/nsfoxer/p/14353806.html
Copyright © 2011-2022 走看看