汇编语言学习笔记 下载本文

OF标志

flag的第十一位是OF,溢出标志位.一般情况下,OF记录了有符号数运算的结果是否发生了溢出.如果发生溢出,OF=1,否则 OF=0.

溢出:进行有符号数运算的时候,结果超出机器所能表示的范围

机器表示的范围:8位有符号数据,机器所能表示的范围是-128~127,而16位有符号数据,机器所能表示的范围是-32768~32767

注意CF和OF的区别:CF是对无符号数运算有意义的标志位,而OF是对有符号数运算有意义的标志位

adc指令

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

inc和loop指令不影响CF位. sbb指令

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

cmp指令

cmp是比较指令,功能相当于减法指令 指令格式:cmp 操作对象1,操作对象2

功能:计算操作对象1-操作对象2,不保存结果,只根据计算结果对标志寄存器进行设置

cmp指令的含义 cmp ah,bh

SF=1,OF=0 ;(ah)< (bh) SF=1,OF=1 ;溢出 (ah)>(bh) SF=0,OF=1 ;溢出 (ah)<(bh) SF=0,OF=0 ;(ah) ≥ (bh)

检测比较结果的条件转移指令

指令 含义 检测的相关标志位 je 等于则转移 ZF=1 jne 不等于则转移 ZF=0 jb 低于则转移 CF=1 jnb 不低于则转移 CF=0 ja 高于则转移 CF=0且ZF=0 jna 不高于则转移 CF=1或ZF=1

DF标志和串传送指令

flag的第10位是DF,方向标志位,在串处理指令中,控制每次操作后si,di的增减

DF=0,每次操作后si,di递增 DF=1,每次操作后si,di递减

传送字节串指令

格式:movsb 相当于mov es:[di], byte ptr ds:[si]

功能:将ds:si指向的内存单元中的字节送入es:di指向的单元中,然后根据DF的值,将si和di进行递增或递减

传送字串指令

格式:movsw 相当于mov es:[di], word ptr ds:[si]

功能:将ds:si指向的内存单元中的字送入es:di指向的单元中,然后根据DF的值,将si和di进行递增2或递减2 两个指令可以和rep配合使用

格式:rep movsb/movsw

相当于:s: movsb/movsw loop s

rep的作用:根据cx的值,重复执行后面的串传送 rep movsb可以循环实现(cx)个字符的传送

8086CPU提供下面两条指令对DF位进行设置 cld指令:将DF置0 std指令:将DF置1

pushf和popf

格式:pushf

功能:将标志寄存器的值压栈

格式:popf

功能:从栈中弹出栈顶数据,送入标志寄存器 上面的两条指令可以直接访问标志寄存器

标志寄存器在Debug中的表示

标志 值为1的标记 OF OV SF NG ZF ZR PF PE CF CY DF DN 值为0的标记 NV PL NZ PO NC UP