汇编语言-中断

数据传送方式

程序控制方式

中断方式

DMA方式

中断传送方式

避免因反复查询外部设备的状态而浪费时间,从而提高CPU的效率。

非屏蔽中断

非屏蔽中断不受中断允许标志IF的屏蔽,系统中只能有一个非屏蔽中断,其中断类型号为2。

中断过程

  1. PUSH (FLAGS)

  2. IF<-0

    TF<-0

    AC<-0

  3. PUSH (CS)

    PUSH (IP)

  4. (IP)<-(N*4)

    (CS)<-(N*4+2)

中断指令

INT,不给中断号的话,默认是3号中断

STI,设置中断允许位(IF=1

CLI,清除中断允许位(IF=0

中断向量表

各类型中断处理程序的入口地址表,其存放在内存低位处,每项占用4个字节,低位是(IP),高位是(CS)

每类中断向量的偏移地址可由中断类型号N乘以4计算出来。

子程序与中断的区别

两者实现机制不同

  • 中断程序是固定的(如果操作系统允许,程序员可以修改);

    而子程序是程序员动态编写的。

  • call func,根据func直接找到子程序入口,根据需求修改(IP)(CS)

    int 21h需要计算地址,通过中断向量表找到中断处理程序入口地址。

BIOS、DOS中断

BIOS中断和DOS中断是两种特殊的中断。

BIOS比DOS更靠近硬件。

在某些情况下,既可选择DOS中断又可选择BIOS中断实现相应功能;某些情况下,必须使用BIOS才能实现相应的功能。

基本步骤

  1. 将调用参数装入指定寄存器中
  2. 如需功能号,将其装入AH
  3. 如需子功能号,将其装入AL
  4. 按中断号调用DOS或BIOS中断,INT 21H

DOS常用功能

1号功能

  • 功能号

    (AH)=1

  • 功能

    从键盘输入一个字符并回显在屏幕上

  • 返回参数

    (AL)=字符

2号功能

  • 功能号

    (AH)=2

  • 功能

    显示一个字符(检验Ctrl_Break),光标随字符移动

  • 调用参数

    (DL)=字符

9号功能

  • 功能号

    (AH)=9

  • 功能

    显示字符串,光标跟随字符移动

  • 调用参数

    (DS):(DX)为串地址,串必须以$结束

0A号功能

  • 功能号

    (AH)=0AH

  • 功能

    输入字符到缓冲区,缓冲区第一个字节保存最大字符数,第二个字节保存实际输入的字符数

  • 返回参数

    (DS):(DX)为缓冲区首址

常用ASCII码

字符 十六进制ASCII码
空格 20H
0 30H
A 41H
a 61H
换行 0AH
回车(归位) 0DH

作者:@臭咸鱼

转载请注明出处:https://chouxianyu.github.io

欢迎讨论和交流!