3.汇编中的标志位

时间:2021-11-12 01:10:06

 

这周主要学习的是转移指令的相关知识和原理。

  1. offset在和汇编语言中是由编译器处理的符号,它的功能是取得标号的偏移地址。
  2. jmp是无条件转移指令,可以只修改IP,也可以同时修改CS和IP。
  3. CPU在执行jmp指令的时候不需要转移的目的地址,机器码中包含的的是转移的位移。
  4. Ret指令用栈中的数据,修改IP的内容,从而实现近转移。

Ret=POP  IP

Retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移。

Retf=POP IP     POP CS

 

  1. CPU执行call指令时,进行两步操作:
  2. 将当前的IP或CS和IP压入栈中(call下一个指令的IP)
  3. 转移

 

  1. mul乘法指令:

1)两个相乘的数要么都是8位,要么都是16位。如果是8位,一个默认放在AL中,另一个放在8位reg或内存字节单元中;如果是16位,一个默认在AX 中,另一个放在16位reg或内存字单元中。

2 )结果:如果是8位乘法,结果默认放在AAX中;如果是16位乘法,结果高位默认在DX中存放,低位在AX中存放。

 

  1. 几个重要的标志寄存器

ZF   零标志位      如果结果为0,那么zf=1;如果结果不为0,那么zf=0

PF   奇偶标志位    如果1的个数为偶数,pf=1;如果为奇数,那么pf=0

SF   符号标志位    如果结果为负,sf=1;如果非负,sf=0

CF   进位标志位    在进行无符号运算的时候,它记录向更高有效位的进位  

OF   溢出标志位    在进行有符号运算的时候,超过机器所能表示的范围称为溢出

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

 

  1. adc是带进位加法指令(adc  ax,bx 实现的功能是ax=ax+bx+cf)

sbb是带借位减法指令(sbb  ax,bx 实现的功能是ax=ax-bx-cf )

 

  1. cmp是比较指令,cmp的功能相当于减法指令,只是不保存结果,仅仅根据计算结果对标志寄存器进行设置。

指令cmp  ax,bx的逻辑含义是比较ax和bx中的值,如果执行后:

zf=1,说明ax=bx

zf=0,说明ax≠bx

cf=1,说明ax<bx

cf=0,说明ax≥bx

cf=0并且zf=0,说明ax>bx

cf=1或zf=1,说明ax≤bx

 

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

指令                含义           检测的相关标志位

jcxz                短转移               cx=0

je                等于则转移             zf=1

jne             不等于则转移             zf=0

jb                 低于则转移            cf=1

jnb            不低于则转移           cf=0

ja             高于则转移             cf=0且zf=0

jna            不高于则转移           cf=1或zf=1