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

本文介绍了8086汇编语言中的标志寄存器及其各标志位的作用,详细解析了adc、sbb、cmp等指令的功能及应用场景,并讨论了DF标志位在串传送指令中的作用。此外,还介绍了pushf、popf指令以及内中断的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

标志寄存器
  • 【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)

汇编语言(各章知识点) 课程介绍 第1章 预备知识  1.1 汇编语言的由来及其特点   1 机器语言   2 汇编语言   3 汇编程序   4 汇编语言的主要特点   5 汇编语言的使用领域  1.2 数据的表示和类型   1 数值数据的表示   2 非数值数据的表示   3 基本的数据类型  1.3 习题 第2章 CPU资源和存储器  2.1 寄存器组   1 寄存器组   2 通用寄存器的作用   3 专用寄存器的作用  2.2 存储器的管理模式   1 16位微机的内存管理模式   2 32位微机的内存管理模式  2.3 习题 第3章 操作数的寻址方式  3.1 立即寻址方式  3.2 寄存器寻址方式  3.3 直接寻址方式  3.4 寄存器间接寻址方式  3.5 寄存器相对寻址方式  3.6 基址加变址寻址方式  3.7 相对基址加变址寻址方式  3.8 32位地址的寻址方式  3.9 操作数寻址方式的小结  3.10 习题 第4章 标识符和表达式  4.1 标识符  4.2 简单内存变量的定义   1 内存变量定义的一般形式   2 字节变量   3 字变量   4 双字变量   5 六字节变量   6 八字节变量   7 十字节变量  4.3 调整偏移量伪指令   1 偶对齐伪指令   2 对齐伪指令   3 调整偏移量伪指令   4 偏移量计数器的值  4.4 复合内存变量的定义   1 重复说明符   2 结构类型的定义   3 联合类型的定义   4 记录类型的定义   5 数据类型的自定义  4.5 标号  4.6 内存变量和标号的属性   1 段属性操作符   2 偏移量属性操作符   3 类型属性操作符   4 长度属性操作符   5 容量属性操作符   6 强制属性操作符   7 存储单元别名操作符  4.7 表达式   1 进制伪指令   2 数值表达式   3 地址表达式  4.8 符号定义语句   1 等价语句   2 等号语句   3 符号名定义语句  4.9 习题 第5章 微机CPU的指令系统  5.1 汇编语言指令格式   1 指令格式   2 了解指令的几个方面  5.2 指令系统   1 数据传送指令   2 标志位操作指令   3 算术运算指令   4 逻辑运算指令   5 移位操作指令   6 位操作指令   7 比较运算指令   8 循环指令   9 转移指令   10 条件设置字节指令   11 字符串操作指令   12 ASCII-BCD码调整指令   13 处理器指令  5.3 习题 第6章 程序的基本结构  6.1 程序的基本组成   1 段的定义   2 段寄存器的说明语句   3段的说明   4 源程序的结构  6.2 程序的基本结构   1 顺序结构   2 分支结构   3 循环结构  6.3 段的基本属性   1 对齐类型   2 组合类型   3 类别   4 段组  6.4 简化的段定义   1 存储模型说明伪指令   2 简化段定义伪指令   3 简化段段名的引用  6.5 源程序的辅助说明伪指令   1 模块名定义伪指令   2 页面定义伪指令   3 标题定义伪指令   4 子标题定义伪指令  6.6 习题 第7章 子程序和库  7.1 子程序的定义  7.2 子程序的调用和返回指令   1 调用指令   2 返回指令  7.3 子程序的参数传递   1 寄存器传递参数   2 存储单元传递参数   3传递参数  7.4 寄存器的保护与恢复  7.5 子程序的完全定义   1 子程序完全定义格式   2 子程序的位距   3 子程序的语言类型   4 子程序的可见性   5 子程序的起始和结束操作   6 寄存器的保护和恢复   7 子程序的参数传递   8 子程序的原型说明   9 子程序的调用伪指令   10 局部变量的定义  7.6 子程序库   1 建立库文件命令   2 建立库文件举例   3 库文件的应用   4 库文件的好处  7.7 习题 第8章 输输出和中断  8.1输出的基本概念   1 I/O端口地址   2 I/O指令  8.2 中断   1 中断的基本概念   2 中断指令   3 中断返回指令   4 中断和子程序  8.3 中断的分类   1 键盘输的中断功能   2 屏幕显示的中断功能   3 打印输出的中断功能   4 串行通信口的中断功能   5 鼠标的中断功能   6 目录和文件的中断功能   7 内存管理的中断功能   8 读取和设置中断向量  8.4 习题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值