美文网首页
<<汇编语言>>第11章笔记

<<汇编语言>>第11章笔记

作者: zzkdev | 来源:发表于2018-05-27 17:33 被阅读0次

    标志寄存器

    标志寄存器有以下3种作用:

    1. 用来存储相关指令的某些执行结果
    2. 用来为CPU执行相关指令提供行为依据
    3. 用来控制CPU的相关工作方式

    note : 标志寄存器与其他寄存器不一样,它是按位起作用的,也就是说它每一位都有专门的含义,记录特定信息。

    ZF标志

    标志寄存器的第6位是ZF,零标志位。它记录相关指令执行后,其结果是否为0。结果为0的话,那么zf = 1,不为零的话,zf = 0

    note : 有的指令不影响标志寄存器,比如:mov、push、pop等传送指令。

    PF标志

    标志寄存器的第2位是PF,奇偶标志位。它记录相关指令执行后,其结果的所有bit位中1的个数是否为偶数。如果1的个数是偶数,PF = 1,奇数则为0。

    SF标志

    标志寄存器的第7位是SF,符号标志位。它记录相关指令执行后,其结果是否为负。如果为负,SF = 1,否则为0。

    CF标志

    标志寄存器的第0位是CF,进位标志位。在做无符号运算时,它记录了最高有效位向更高位的进位制,或从更高位的借位值。

    OF标志

    标志寄存器的第11位是OF,溢出标志位。一般情况下,OF记录了有符号运算的结果是否发生了溢出。如果发生了溢出,OF=1,否则为0。

    adc指令

    adc是带进位的加法指令,它利用了CF位上记录的进位值。
    指令格式:adc 操作对象1 + 操作对象2 + CF

    # 示例 
    # 计算 1EF000H + 201000H,结果放在ax(高16位)和bx中(低16位)
    mov ax, 001EH
    mov bx, 0F000H
    add bx, 1000H
    adc ax, 0020H
    

    sbb指令

    sbb指令是带借位的错位减法指令,它利用了CF位上记录的借位值
    指令格式:sbb 操作对象1, 操作对象2
    功能:操作对象1 = 操作对象1 - 操作对象2 - CF

    # 示例
    # 计算003E1000H - 00202000H,结果放在ax, bx中
    mov bx, 1000H
    mov ax, 003EH
    sub bx, 2000H
    sbb ax, 0020H
    

    cmp指令

    cmp是比较指令,cmp功能相当于减法指令,只是不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他指令通过识别被影响的标志寄存器来得知比较结果
    cmp指令格式:cmp 操作对象1, 操作对象2

    检测比较结果的转移指令

    下面是无符号数的比较结果进行转移的条件转移指令。

    DF标志和串传送指令

    标志寄存器的第10位是DF,方向标志位。在串处理指令中,控制每次操作后si、di的递减。

    movsb和movsw

    movsw和movsb相似,只是把内存单元还成了以字为单位。
    movsb和movsw一般都是和rep配合来使用,格式如下:
    rep movsb
    用汇编语法来描述就是:

    s: movsb
        loop s
    

    8086CU提供下面两条指令对df位进行设置。
    cld指令:将标志寄存器df位置0
    std指令:将标志寄存器df位置1
    下面是示例:

    pushf和popf

    pushf是将标志寄存器的值压栈,popf是从栈中弹出数据,送入标志寄存器中。


    这里是我的博客


    相关文章

      网友评论

          本文标题:<<汇编语言>>第11章笔记

          本文链接:https://www.haomeiwen.com/subject/cpxpjftx.html