汇编语言-读书知识点记录3

来源:互联网 发布:jsp中注释java代码 编辑:程序博客网 时间:2024/06/11 08:42

标志寄存器

  • 【ZF:零标志】 零–>1
  • 【PF:奇偶标志】 0的个数为偶数–>1
  • 【SF:负数标志】 负数–>1
  • 【CF:进位标志】 最高有效位向更高位的进位值或从更高位的错位值–>1 对无符号数运算有意义的标志位
  • 【OF:溢出标志】 对有符号数运算有意义的标志位
abc指令
  • adc ax,bx实现的功能是(ax)=(ax)+(bx)+CF
sbb指令
  • sbb是带错位减法指令,利用了CF位上记录的错位值
  • sbb ax,bx实现的功能是(ax)=(ax)-(bx)-CF
cmp指令
  • 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)
DF指令和串传送指令
  • flag的第10位是DF,方向标志位,在串处理指令中,控制每次操作后si,di的增减
  • DF=0,每次操作后si,di递增
  • DF=1,每次操作后si,di递减
  • movsb实现的功能是((es) * 16 + (di)) = ((ds) * 16 + (si))
  • 如果df=0,则 (si) = (si) + 1, (di) = (di) + 1
  • 如果df=1,则 (si) = (si) - 1, (di) = (di) - 1
  • 也可以传送一个字,使用movsw,si和di的操作需要将1更改为2
  • movsb和movsw通常和rep配合使用,rep movsb,相当于s:movsb loop s
  • 可以使用cld和std命令将标志寄存器的DF位置设为0或者1
pushf和popf
  • pushf的功能是将标志寄存器的值压栈,而popf是从栈中弹出数据,送入标志寄存器中

内中断

CPU内部有下面的情况发生的时候,将会产生相应的中断信息

1. 除法错误
2. 单步执行
3. 执行into指令
4. 执行int指令等

  • CPU需要知道接收到的中断信息的来源并针对不同的信息采取不同的处理,中断类型码
  • 中断类型码为一个字节型数据,可以表示256种中断信息的来源
  • CPU使用8位的中断类型通过中断向量表找到相应的中断处理程序的入口地址
  • 中断向量表在内存中存放,对于8086PC机,中断向量表指定放在内存地址0处
  • CPU硬件使用中断类型码找到中断向量,并用其设置CS:IP,称为中断过程
中断过程
  1. 取得中断类型码
  2. pushf
  3. TF=0,IF=0
  4. push CS
  5. push IP
  6. (IP) = (N * 4), (CS) = (N * 4 + 2)
  7. 执行中断处理程序
中断处理程序
  1. 保存用到的寄存器
  2. 处理中断
  3. 恢复用到的寄存器
  4. 用iret指令返回

iret指令的功能用汇编语法描述为

    pop IP    pop CS    popf
单步中断
CPU在执行一条指令后,如果监测到TF位为1,则产生单步中断,引发中断过程,类型码为1

1. 取得中断类型码1
2. 标志寄存器入栈,TF和IF设置为0
3. CS和IP入栈
4. (IP)=(1 * 4), (CS)=(1 * 4 + 2)

原创粉丝点击