8086CPU汇编----中断和DOS系统功能调用

提示:主要内容来源===>汇编语言基础教程(主编:谈文蓉、副主编:姜玥)教材第七章内容

8086CPU中断和DOS系统功能调用

  • 中断和DOS系统功能调用
    • 1.中断的概念
      • (1)定义
      • (2)中断号
      • (3)中断向量和中断向量表
      • (4)控制标志 IF 和 TF
      • (5)中断的响应过程
    • 2.常用的中断指令
      • (1)中断调用指令 INT
      • (2)中断返回指令 IRET
    • 3.DOS 系统功能调用
      • (1)DOS 系统功能调用的一般方法
      • (2)输入/输出类功能调用


中断和DOS系统功能调用

1.中断的概念

(1)定义

  • 在 CPU 执行程序的过程中,由于出现了某个事件,CPU暂停当前程序,而转去执行处理该事件的程序,处理完后,返回被暂停的程序处继续执行,这个过程叫做中断
  • 中断源: 引起中断的事件。
  • 中断服务程序: 处理中断源的程序。
  • 当前程序被中断的地方叫做断点
  • 中断源分为硬中断(外部中断)软中断(内中断)
    • 硬中断,是由输入/输出外设产生的中断请求引起的中断。
      • 可屏蔽中断,可以由 CPU 的中断允许标志 IF 控制
      • 非屏蔽中断,不受 CPU 的中断允许标志控制
    • 软中断,是由 CPU 内部的某个事件引起的,不受中断允许标志 IF 的控制。它通常由三种情况引起:
      • (1)中断指令
      • (2)CPU 的某些错误
      • (3)DEBUG 设置的

(2)中断号

  • 8086X系统允许 256 种中断,每种中断对应 0~255 唯一的编号,称为终端号。

(3)中断向量和中断向量表

  • 每种中断都有一个与之对应的中断服务程序。
  • 中断向量: 中断服务程序的入口地址。
  • 中断向量表: 存放 256 个中断向量的内存区域。
  • 每个中断向量占 4 个字节,用 32 位分段地址描述。中断向量表位于内存地址00000H~003FFH,共 1KB(256*4)。对于终端号 n,中断向量所在地址为 4n ~ 4n + 3 。
  • 中断向量表在系统复位时初始化。

(4)控制标志 IF 和 TF

  • 中断允许标志 IF (Interrupt Flag)
    • 用于控制 CPU 是否响应外部可屏蔽中断请求。若 IF=1,则允许中断;若 IF=0,禁止中断。
    • IF 标志处理指令语法格式:
      • CIL ;IF=0
      • STI ;IF=1
    • 注意:在程序中应慎用 CLI 指令,错误地使用将导致系统无法正常工作。
  • 单步标志 TF
    • 用于控制 CPU 是否进入单步调试方式。TF=1,CPU 单步执行。

(5)中断的响应过程

  • 当中断发生时,由硬件自动完成下列工作:
    • (1)标志寄存器 FLAGS 进栈;保护标志寄存器的状态
    • (2)置 IF=0,TF=0;禁止中断和单步调试
    • (3)返回地址(CS:IP)进栈;保存中断服务程序执行完成后返回的地址
    • (4)根据中断号 n,从地址 0:n*4 取出 4 字节的中断向量,低字节送入 IP,高字节送入 CS
    • (5)转去执行中断向量所指的中断服务程序

2.常用的中断指令

(1)中断调用指令 INT

  • 格式:INT n ;调用中断号为 n (0~255) 的中断服务程序功能

(2)中断返回指令 IRET

  • 格式:IRET ;从中断服务程序中返回
  • 功能:从栈里弹出一个双字到 CS:IP ,再弹出一个字到 FLAGS。

3.DOS 系统功能调用

  • DOS 的系统功能调用以中断服务的形式存在,每类服务对应一个终端号。
  • DOS 系统中,主要分配 21H 号中断用于程序员调用 DOS 操作系统功能,21H 号中断有近百个功能号供用户先择使用,可在汇编程序中直接调用。DOS 功能调用的子程序已按顺序编号,称为功能号。

(1)DOS 系统功能调用的一般方法

  • DOS 系统功能调用的一般方法如下:
    • (1)在寄存器 AH 中设置系统功能调用号,说明选择的功能
    • (2)在指定寄存器中设置入口参数
    • (3)用中断调用指令 INT 21H 执行功能调用
    • (4)根据出口参数分析功能调用的执行情况

(2)输入/输出类功能调用

功能号 功能 入口参数 出口参数
AH=01H 输入一个字符 AL=输入字符的ASCII码
AH=02H 输出一个字符 DL=输出字符的ASCII码
AH=09H 输出一个字符串 DS:DX=字符串首地址
AH=0AH 输入一个字符串 DS:DX=缓冲区首地址
AH=4CH 程序终止结束 AL=返回代码
  • 字符串输入
    • 执行该功能调用时,用户按键,最后用回车确认。
    • 0AH 号 DOS 功能要设置保存输入字符串的缓冲区,其缓冲区格式如下:
      • 第一个字节是最多欲接收的字符个数(包括回车字符,可以是1~255)。
      • 第二个字节存放实际输入的字符个数(不包括回车)。
      • 第三个字节开始将存放输入的字符串。实际输入的字符数多于定义数时,多出的字符丢掉,且响铃。
  • 字符串输出
    • 字符串应以 $(24H) 结束。
    • 可以输出回车 (0DH) 和 换行 (0AH)字符产生回车和换行的作用。

你可能感兴趣的:(8086CPU汇编,汇编)