精华内容
下载资源
问答
  • 中断号列表
    千次阅读
    2004-09-15 16:24:00

    中断INT 21H :

    1、字符功能调用类(Character-Oriented Function)

    01H、07H和08H从标准输入设备输入字符
    02H字符输出
    03H辅助设备的输入
    04H辅助设备的输出
    05H打印输出
    06H控制台输入/输出
    09H显示字符串
    0AH键盘缓冲输入
    0BH检测输入状态
    0CH清输入缓冲区的输入功能

    (1)、功能01H、07H和08H
    功能描述:从标准输入设备(如:键盘)读入一个字符。该中断在处理过程中将一直处于等待状态直到有字符可读为止。该输入还可被重定向,如果这样做,则无法判断文件是否已到文件尾
    入口参数:AH=01H,过滤掉控制字符,并回显
     =07H,不过滤掉控制字符,不回显
     =08H,过滤掉控制字符,不回显
    出口参数:AL=输入字符的ASCII码

    (2)、功能02H

    功能描述:向标准输出设备(如:屏幕)输出一个字符。该输出还可被重定向,如果这样做,则将无法判断磁盘是否满
    入口参数:AH=02H
    DL=待输出字符的ASCII码
    出口参数:

    (3)、功能03H

    功能描述:从辅助设备读入一个字符,该辅助设备的缺省值为COM1
    入口参数:AH=03H
    出口参数:AL=读入字符的ASCII码

    (4)、功能04H

    功能描述:向辅助设备输出一个字符,该辅助设备的缺省值为COM1
    入口参数:AH=04H
    DL=待输出字符的ASCII码
    出口参数:

    (5)、功能05H

    功能描述:向标准的输出设备输出一个字符。该缺省的输出设备为LPT1端口的打印机,除非用MODE命令来改变
    入口参数:AH=05H
    DL=待输出字符的ASCII码
    出口参数:

    (6)、功能06H

    功能描述:控制台(如:键盘、屏幕)输入/输出。如果输入/输出操作被重定向,那么,将无法判断文件是否已到文件尾,或磁盘已满
    入口参数:AH=06H,DL=输入/输出功能选择
    出口参数:若DL=00H-FEH,则此功能为输出,DL为待输出字符的ASCII码;
    若DL=0FFH,则此功能为输入,此时:若ZF=1,则无字符可读,否则,AL=读入字符的ASCII码

    (7)、功能09H

    功能描述:输出一个字符串到标准输出设备上。如果输出操作被重定向,那么,将无法判断磁盘已满
    入口参数:AH=09H
    DS:DX=待输出字符的地址
    说明:待显示的字符串以’$’作为其结束标志
    出口参数:

    (8)、功能0AH

    功能描述:从标准输入设备上读入一个字节字符串,遇到“回车键”结束输入(输入的字符在标准的输出设备上有回显)。如果该输入操作被重定向,那么,将无法判断文件是否已到文件尾
    入口参数:AH=0AH
    DS:DX=存放输入字符的起始地址
    接受输入字符串缓冲区的定义说明:
      1、第一个字节为缓冲区的最大容量,可认为是入口参数;
      2、第二个字节为实际输入的字符数(不包括回车键),可看作出口参数;
      3、从第三个字节开始存放实际输入的字符串;
      4、字符串以回车键结束,回车符是接受的最后一个字符;
      5、若输入的字符数超过缓冲区的最大容量,则多出的部分被丢弃,系统并发出响铃,直到输入“回车”键才结束输入。

    例如:
      BUFF 80, ?, 80 DUP(?)   ;最多接受80个字符

    出口参数:

    (9)、功能0BH

    功能描述:检查标准输入设备上是否有字符可读。该输入操作可被重定向
    入口参数:AH=0BH
    出口参数:AL=00H——无字符可读;FFH——有字符可读

    (10)、功能0CH

    功能描述:清空当前的标准输入缓冲区,再读入字符。其输入操作可被重定向
    入口参数:AH=0CH
    AL=01H、06H、07H、08H或0AH
    出口参数:

    若入口参数AL为0AH,则DS:DX=存放输入字符的起始地址,否则,出口参数AL=输入字符的ASCII码

    2、目录控制功能(Directory-Control Function)

    39H创建目录
    3AH删除目录
    3BH设置当前目录
    47H

    读取当前目录

    (1)、功能39H

    功能描述:用指定的驱动器和路径创建一个新目录
    入口参数:AH=39H
    DS:DX=指定路径的字符串地址(以0为字符串的结束标志)
    出口参数:CF=0——创建成功,否则,AX=错误号(03H或05H),其含义见错误代码表

    (2)、功能3AH

    功能描述:删除指定的驱动器和路径的目录
    入口参数:AH=3AH
    DS:DX=指定路径的字符串地址(以0为字符串的结束标志)
    出口参数:CF=0——删除成功,否则,AX=错误号(03H或05H),其含义见错误代码表

    (3)、功能3BH

    功能描述:用指定的驱动器和路径设置为当前目录
    入口参数:AH=3BH
    DS:DX=指定路径的字符串地址(以0为字符串的结束标志)
    出口参数:CF=0——设置成功,否则,AX=错误号(03H),其含义见错误代码表

    (4)、功能47H

    功能描述:取当前目录的完全路径字符串
    入口参数:AH=47H
    DL=驱动器号(0=缺省,1=A,…)
    DS:SI=存放当前目录字符串的地址
    出口参数:CF=0——读取成功,否则,AX=错误号(0FH),其含义见错误代码表

    3、磁盘管理功能(Disk-Management Function)

    0DH磁盘复位 2EH —设置校验标志
    0EH选择磁盘36H —读取驱动器分配信息
    19H读取当前驱动器54H —读取校验标志
    1BH, 1CH读取驱动器数据

    (1)、功能0DH

    功能描述:清空当前的文件缓冲区,但在MS-DOS内,暂时写入缓冲区的数据将写入磁盘
    入口参数:AH=0DH
    出口参数:

    (2)、功能0EH

    功能描述:指定当前驱动器
    入口参数:AH=0EH
    DL=驱动器号(0=A,1=B,...)
    出口参数:AL=系统中当前的驱动器号

    (3)、功能19H

    功能描述:取当前缺省驱动器号
    入口参数:AH=19H
    出口参数:AL=驱动器号(0=A,1=B,...)

    (4)、功能1BH1CH

    功能描述:获得驱动器的分配信息
    入口参数:AH=1BH——为缺省驱动器
    AH=1CH——为任意驱动器,DL=驱动器号(0=缺省,1=A,...)
    出口参数:AL=0FFH——失败,否则,
      AL=每簇的扇区数
      DS:BX=ID字节的地址
      CX=物理扇区的大小(字节数)
      DX=驱动器的簇数

    (5)、功能2EH

    功能描述:设置/清除操作系统自动读取检验标志
    入口参数:AH=2EH
    DL=00H
    AL=00H——清除该标志,01H——设置该标志
    出口参数:

    (6)、功能36H

    功能描述:取选定驱动器的信息
    入口参数:AH=36H
    DL=驱动器号(0-缺省,1=A,2=B,…)
    出口参数:若功能调用失败,AX=0FFFFH,否则,
      AX=每簇的扇区数
      BX=可用的簇数
      CX=物理扇区的大小(字节数)
      DX=驱动器中的簇数

    (7)、功能54H

    功能描述:读取校验标志
    入口参数:AH=54H
    出口参数:AL=当前检验标志值:00H—关检验,01H—开检验

    4、文件操作功能(File Operation Function)

    3CH创建文件
    3DH打开文件
    3EH关闭文件
    41H删除文件
    43H读取/设置文件属性
    45H复制文件句柄
    46H重定义文件句柄
    4EH查找到第一个文件
    4FH查找下一个文件
    56H文件换名
    57H读取/设置文件的日期和时间
    5AH创建临时文件
    5BH创建新文件
    67H设置文件句柄数(最多文件数)
    6CH扩展的打开文件功能(打开、创建或替换文件)

    (1)、功能3CH

    功能描述:用指定的文件名创建一个新文件。如果指定的文件已存在,则设置其长度为0。创建后,该文件是打开的,并返回其句柄
    入口参数:AH=3CH
    DS:DX=指定文件名字符串的地址(以0为字符串的结束标志)
    CX=文件属性(这些标志位可以组合)

    位0=1——只读
    位2=1——系统
    位5=1——归档

    位1=1——隐含
    位3=1——卷标号
    其它位保留不用,并置为0
    出口参数:CF=0——创建成功,AX=文件句柄,否则,AX=错误号(03H、04H或05H),其含义见错误代码表

    (2)、功能3DH

    功能描述:打开指定的驱动器、路径和文件名,并返回其文件句柄
    入口参数:AH=3DH
    DS:DX=表明文件的字符串(以0为字符串的结束标志)
    AL为打开方式:
    位0~2000—只读方式  001—写方式  010—读/写方式
    位3保留,其值为0
    位4~6共享模式
    000—兼容模式001—不共享010—拒绝写
    011—拒绝读100—不拒绝任何操作
    位7继承标志——0/1:子进程继承或不继承句柄
    出口参数:CF=0——打开成功,AX=文件句柄,否则,AX=错误号(02H、03H、04H、05H或0CH),其含义见错误代码表

    (3)、功能3EH

    功能描述:关闭指定句柄的文件
    入口参数:AH=3EH
    BX=文件句柄
    出口参数:CF=0——关闭成功,否则,AX=错误号(06H),其含义见错误代码表

    (4)、功能41H

    功能描述:删除指定的文件
    入口参数:AH=41H
    DS:DX=文件名字符串的地址
    出口参数:CF=0——删除成功,否则,AX=错误号(02H、03H或05H),其含义见错误代码表

    (5)、功能43H

    功能描述:读取或设置指定文件的属性
    入口参数:AH=43H
    BX=文件句柄
    DS:DX=文件名字符串的地址
    AL=00H/01H——读取/设置文件属性
    CX=文件属性:
    位0=1——只读位1=1——隐含
    位2=1——系统位3=1——卷标号
    位5=1——归档其它位保留不用,并置为0
    出口参数:CF=0——关闭成功,CX=文件属性,否则,AX=错误号(01H、02H、03H或05H),其含义见错误代码表

    (6)、功能45H

    功能描述:复制当前打开设备或文件的句柄,该句柄对应同样设备或文件的相同位置
    入口参数:AH=45H
    BX=待复制的文件句柄
    出口参数:CF=0——复制成功,AX=新句柄,否则,AX=错误号(04H或06H),其含义见错误代码表

    (7)、功能46H

    功能描述:指定二个句柄,把第二句柄指向第一个句柄,即第二个句柄被重定向
    入口参数:AH=46H
    BX=文件或设备的句柄
    CX=待重定向的文件句柄
    出口参数:CF=0——重定向成功,否则,AX=错误号(04H或06H),其含义见错误代码表

    (8)、功能4EH

    功能描述:获取第一个与给定的文件名相匹配的文件
    入口参数:AH=4EH
    DS:DX=给定文件名的字符串
    CX=搜索时使用的文件属性:
    位0=1——只读  位1=1——隐含
    位2=1——系统  位3=1——卷标号
    位4=1——目录  位5=1——归档
    其它位保留不用,并置为0
    出口参数:CF=1——操作失败,AX=错误号(02H、03H或12H),其含义见错误代码表,否则,操作成功,DTA(Disk Transfer Area)按下列方式填入数据:
    字节00~14H保留
    字节15H匹配的文件属性
    字节16~17H压缩的文件名
    字节18~19H压缩的文件日期
    字节1A~1DH文件大小
    字节1E~2AH文件名字符串

    (9)、功能4FH

    功能描述:在中断21H的功能4EH成功使用之后,再搜索下一个文件名
    入口参数:AH=4FH
    AL=返回的代码
    出口参数:CF=1——操作失败,AX=错误号(12H),其含义见错误代码表,否则,操作成功,DTA中的数据如前面功能4EH所示

    (10)、功能56H

    功能描述:文件换名
    入口参数:AH=56H
    DS:DX=当前文件名字符串地址
    ES:DI=新文件名字符串地址
    出口参数:CF=0——操作成功,否则,AX=错误号(02H、03H、05H、11H),其含义见错误代码表

    (11)、功能57H

    功能描述:读取/设置文件的日期和时间
    入口参数:AH=57H
    BX=文件句柄
    读取日期和时间AL=00H
    设置日期和时间AL=01H
    CX=时间(0F~0BH:小时,0AH~05H:分钟,04H~00H:2秒的个数)
    DX=日期(0F~09H:年(相对1980年),08H~05H:月,04H~00H:日)
    出口参数:CF=1——操作失败,AX=错误号(01H、06H),其含义见错误代码表,否则,若是读文件信息,则,CX=时间,DX=日期

    (12)、功能5AH

    功能描述:创建临时文件
    入口参数:AH=5AH
    DS:DX=路径名的地址
    CX=文件属性(位可组合),其定义如下:
    位0=1 只读位3-4=0  保留
    位1=1 隐含位5=1   归档
    位2=1 系统位6-15=0 保留
    出口参数:CF=0——操作成功,AX=文件句柄,DS:DX=完整的路径文件地址,否则,AX=错误号(03H、04H或05H),其含义见错误代码表

    (13)、功能5BH

    功能描述:创建新文件
    入口参数:AH=5BH
    DS:DX=路径名的地址
    CX=文件属性(位可组合),其定义如下:
    位0=1只读位4=0保留
    位1=1隐含位5=1归档
    位2=1系统位6-15=0保留
    位3=1卷标号
    出口参数:CF=0——操作成功,AX=文件句柄,否则,AX=错误号(03H、04H、05H或50H),其含义见错误代码表

    (14)、功能67H

    功能描述:设置文件句柄数(最多文件数)
    入口参数:AH=67H
    BX=句柄的数量
    出口参数:CF=0——操作成功,否则,AX=错误号,其含义见错误代码表

    (15)、功能6CH

    功能描述:扩展的打开文件功能(打开、创建或替换文件)
    入口参数:AH=6CH
    AL=00H
    DS:SI=路径名的地址
    BX=打开方式
    位2~0000—只读  001—只写  010—可读、写
    位3保留(0)
    位6~4000—兼容   001—拒绝读写  010——拒绝写
    011—拒绝读  100——不拒绝任何操作
    位70—子进程继承句柄,1—子进程不继承句柄
    位12~8保留(0)
    位13致命错误处理程序,0—执行INT 24H,否则,返回错误代码给进程
    位14写入方式:0—写入缓冲区,1—直接写入文件
    位15保留(0)
    CX=文件属性
    位0=1 只读位4=0   保留
    位1=1 隐含位5=1   归档
    位2=1 系统位6-15=0  保留
    位3=1 卷标签
    DX=打开标志
    位3~0  0—打开失败,1—打开文件,2—替换文件
    位7~4  0—打开失败,1—创建文件
    位15~8  0—保留
    出口参数:CF=1——操作失败,AX=错误号,其含义见错误代码表,否则,
    AX=文件句柄
    CX=1——文件存在,打开之
     =2——文件不存在,创建之

    5、文件操作功能(FCB)(File Operation Function)

    0FH打开文件16H —创建文件
    10H关闭文件17H —文件换名
    11H、12H查找第一个或下一个文件23H —读取文件的大小
    13H删除文件29H —分析文件名

    (1)、功能0FH

    功能描述:打开文件,并使之为顺序读/写作好准备
    入口参数:AH=0FH
    DS:DX=文件控制块的地址
    出口参数:AL=00H——打开成功,否则,AL=FFH(如文件找不到)
    在MS-DOS操作系统中,文件控制块的字段如下表所示。
    字段名偏移量字段含义
    驱动器字00H1 for drive A, 2 for drive B,...
    当前块字段0CH00H
    记录大小字段0EH0080H
    文件长度字段10H文件字节数
    日期字段14H日期
    时间字段16H时间

    (2)、功能10H

    功能描述:关闭文件
    入口参数:AH=10H
    DS:DX=文件控制块的地址
    出口参数:AL=00H——关闭成功,否则,AL=FFH

    (3)、功能11H12H

    功能描述:查找第一个或下一个相匹配的文件
    入口参数:AH=11H——第一个相匹配的文件
      =12H——下一个相匹配的文件
    DS:DX=文件控制块的地址
    出口参数:AL=00H——查找到,否则,AL=FFH

    (4)、功能13H

    功能描述:在指定(或缺省)的驱动器中,删除所有相匹配的文件
    入口参数:AH=13H
    DS:DX=文件控制块的地址
    出口参数:AL=00H——删除成功,否则,AL=FFH

    (5)、功能16H

    功能描述:在当前目录中创建一个文件,其文件长度为0,并打开该文件,为随后的读/写操作作好必要的准备
    入口参数:AH=16H
    DS:DX=未打开的文件控制块的地址
    出口参数:AL=00H——创建成功,否则,AL=FFH(如:磁盘满)

    (6)、功能17H

    功能描述:在指定的驱动器的当前目录中,把所有相匹配的文件换名
    入口参数:AH=17H
    DS:DX=指定文件控制块的地址
    出口参数:AL=00H——换名成功,否则,AL=FFH

    (7)、功能23H

    功能描述:在当前目录中查找一个相匹配的文件。如果发现,则用其记录数来更新其文件大小
    入口参数:AH=23H
    DS:DX=未打开的文件控制块的地址
    出口参数:AL=00H——匹配成功,FCB中偏移量为21H的字段被设置为其记录数,否则,AL=0FFH

    (8)、功能29H

    功能描述:分析一个字符串(文件名)置入FCB表中的不同字段
    入口参数:AH=29H
    CX=要写入的记录数
    DS:SI=字符串段的地址
    ES:DI=FCB的地址
    AL=分析的控制标志位

    位3=1——

    若字符串中有文件后缀,则FCB中的文件后缀将改变
    =0——若后缀忽略修改,或若分析后无后缀,则FCB中后缀字段被置为“空”
    位2=1——若字符串中有文件名,则FCB中的文件名将改变
    =0——若文件名忽略修改,或若分析后无文件名,则FCB中文件名字段被置为“空”
    位1=1——若字符串中指定了驱动器号,则FCB中的ID字节被修改
    =0——若ID字节忽略修改,或若分析后没有指定驱动器号,则FCB中驱动器字段被置为0(缺省值)
    位0=1——
    =0——
    忽略前导分割符
    不忽略前导分割符
    出口参数:AL=00H—没有通配字符 01H—有通配字符 FFH—驱动器号非法
    DS:SI=分析后文件名第一个字符的地址
    ES:DI=格式化后的、未打开的FCB地址

    6、记录操作功能(Record Function)

    1AH —设置数据传输区地址42H —设置文件指针
    2FH —读取数据传输区地址5CH —文件区域加锁或解锁
    3FH —读文件或设备68H —提交文件缓冲区数据
    40H —写文件或设备

    (2)、功能2FH

    功能描述:为FCB读/写操作而获取DTA的当前地址
    入口参数:AH=2FH
    出口参数:ES:BX=DTA的段地址和偏移量

    (3)、功能3FH

    功能描述:从先前打开的文件中读出指定数目的字节,并移动文件指针
    入口参数:AH=3FH
    BX=文件句柄
    CX=将要读出的字节数
    DS:DX=存放字符的缓冲区地址
    出口参数:CF=0——读取成功,AX=读取的字符数,否则,AX=错误号(05H或06H),其含义见错误代码表

    (4)、功能40H

    功能描述:向先前打开的文件写入指定数量的字节,并相应修改文件指针
    入口参数:AH=40H
    BX=文件句柄
    CX=写入的字节数
    DS:DX=存放数据的缓冲区地址
    出口参数:CF=0——关闭成功,AX=写入的字节数,否则,AX=错误号(05H或06H),其含义见错误代码表

    (5)、功能42H

    功能描述:设置文件指针的相对位置(相对与文件头、文件尾和当前位置)
    入口参数:AH=42H
    BX=文件句柄
    CX=偏移量的高位
    DX=偏移量的低位
    AL=00H——从文件头开始的绝对偏移量
     =01H——从当前文件指针开始的偏移量(可带符号)
     =02H——从文件尾开始的偏移量(可带符号)
    出口参数:CF=0——设置成功,DX是指针的高位,AX是其低位,否则,AX=错误号(01H和06H),其含义见错误代码表。

    (6)、功能5CH

    功能描述:文件区域加锁或解锁
    入口参数:AH=5CH
    AL=00H——区域加锁  01H——区域解锁
    BX=文件句柄
    CX:DX=区域偏移量
    SI:DI=区域长度
    DS:DX=路径名的地址
    出口参数:CF=0——操作成功,否则,AX=错误号(01H、06H、21H或24H),其含义见错误代码表

    (7)、功能68H

    功能描述:提交文件缓冲区数据
    入口参数:AH=68H
    BX=文件句柄
    出口参数:CF=0——操作成功,否则,AX=错误号,其含义见错误代码表

    7、记录操作功能(FCB)(Record Function)

    14H —顺序读24H —设置相对记录数
    15H —顺序写27H —随机读块
    21H —随机读28H —随机写块
    22H —随机写

    (1)、功能14H

    功能描述:从文件中读出下一个顺序块,并相应增加文件的指针
    入口参数:AH=14H
    DS:DX=先前打开文件控制块的地址
    出口参数:AL=00H——读取成功  01H——文件尾
      02H——段缠绕   03H——部分记录在文件尾

    (2)、功能15H

    功能描述:向文件写入下一个顺序数据块,并相应增加文件的指针
    入口参数:AH=15H
    DS:DX=先前打开文件控制块的地址
    出口参数:AL=00H——写入成功  01H——磁盘满  02H——段缠绕

    (3)、功能21H

    功能描述:从文件中读出当前选定的记录
    入口参数:AH=21H
    DS:DX=先前打开文件控制块的地址
    出口参数:AL=00H——读取成功   01H——文件尾
      02H——取消读操作  03H——部分记录在文件尾

    (4)、功能22H

    功能描述:把内存中的数据写入在文件中当前选定的记录
    入口参数:AH=22H
    DS:DX=先前打开文件控制块的地址
    出口参数:AL=00H—写入成功  01H—磁盘满  02H—取消写操作

    (5)、功能24H

    功能描述:设置FCB中相对记录数作为被打开FCB中的记录数
    入口参数:AH=24H
    DS:DX=先前打开文件控制块的地址
    出口参数:AL的值被破坏,其它寄存器不受影响,FCB中偏移量21H单元被修改

    (6)、功能27H

    功能描述:从文件中读出若干个记录到内存中
    入口参数:AH=27H
    DS:DX=先前打开文件控制块的地址
    出口参数:AL=00H——读取成功   01H——文件尾
      02H——取消读操作  03H——部分记录在文件尾
    CX=实际读出的记录数

    (7)、功能28H

    功能描述:从内存向文件中写入若干个记录
    入口参数:AH=28H
    CX=要写入的记录数
    DS:DX=先前打开文件控制块的地址
    出口参数:AL=00H——写入成功  01H——磁盘满  02H——段缠绕
    CX=实际写入的记录数

    8、内存分配功能(Memory-Allocation Function)

    48H分配内存块
    49H释放内存块
    4AH重定义内存块的大小
    58H读取/设置内存分配策略

    (1)、功能48H

    功能描述:分配一块内存单元,并返回该块内存单元的首地址
    入口参数:AH=48H
    BX=需要申请的内存单元字节数
    出口参数:CF=0——分配成功,AX=存储单元的首地址,否则,AX=错误号(07H或08H),其含义见错误代码表,BX=还可用的最大块数

    (2)、功能49H

    功能描述:释放内存单元块以便为其它程序使用
    入口参数:AH=49H
    ES=被申请块的段地址
    出口参数:CF=0——释放成功,否则,AX=错误号(07H或09H),其含义见错误代码表

    (3)、功能4AH

    功能描述:根据程序的需要,动态地改变一个内存块
    入口参数:AH=4AH
    BX=需要一个新存储块的大小
    ES=被修改块的段地址
    出口参数:CF=0——修改成功,否则,AX=错误号(07H、08H或09H),其含义见错误代码表,BX=可用最大块的大小

    (4)、功能58H

    功能描述:读取/设置内存分配策略
    入口参数:AH=58H
    读取内存分配策略AL=00H
    设置内存分配策略AL=01H
    BX=内存分配策略代码:
       00H—第一满足
       01H—最好满足
       02H—最后满足
    出口参数:CF=0——操作成功,AX=已选用的内存分配策略代码(含义如上说明),否则,AX=错误号(01H),其含义见错误代码表

    9、系统功能(System Function)

    25H设置中断向量
    30H读取MS-DOS版本号
    33H读取/设置Break标志
    34H读取InDOS标志的地址
    35H读取中断向量
    38H读取/设置国家信息
    44HIOCTL(I/O控制)
    50H设置程序段前缀(PSP)地址
    51H读取程序段前缀(PSP)地址
    59H读取扩展的错误信息
    5EH读取机器名,读取/设置打印机配置
    5FH设备重定向
    63H读取前导字节表
    65H读取扩展的国家信息
    66H读取/设置代码页
    5D0AH设置扩展的错误信息

    (1)、功能25H

    功能描述:设置中断向量表
    入口参数:AH=中断号
    DS:DX=中断处理程序的入口地址
    出口参数:

    (2)、功能30H

    功能描述:取MS-DOS操作系统的版本号
    入口参数:AH=30H
    出口参数:AL=0——V 1.0;对其它高版本有:AL=主要版本号
    AH=次版本号(MS-DOS 3.1=0AH,...)
    BH=OEM的序列号(Original Equipment Manufacturer)
    BL:CX=24位用户序列号

    (3)、功能33H

    功能描述:获得或改变操作系统中断的状态。在功能调用期间,将影响^C的检测
    入口参数:AH=33H
    AL=00H——取状态
     =01H——设置状态,DL=00/01表示置该状态OFF/ON
    出口参数:取状态时,DL=00/01——分别表示OFF/ON
    说明:
     1、若AL中存入其它的功能号,则返回时,AL的值为0FFH;
     2、若置AL为5,则启动驱动器号返回在DL中(1-A,2-B,…)

    (4)、功能34H

    功能描述:获得InDos标志的远地址,它由DOS维护表示DOS时活跃的
    入口参数:AH=34H
    出口参数:ES:BX=InDos标志的远地址
    若该单元值为1,表示DOS功能在执行,否则,则不是。

    (5)、功能35H

    功能描述:取指定中断号的入口地址
    入口参数:AH=35H
    AL=中断号
    出口参数:ES:BX=中断处理程序的入口地址

    (6)、功能38H

    功能描述:读取或设置国家信息
    入口参数:AH=38H
    当读取国家信息时
    DS:DX=存放返回信息的地址
    AL=0——取当前国家信息
    AL=1~0FEH——取国家代码小于255的国家信息
    AL=0FFH——取代码大于等于255的国家信息,BX=国家代码
    设置国家信息时
    DX=0FFFFH
    AL=0~0FEH——设置国家代码小于255的国家信息
    AL=0FFH——置代码大于等于255的国家信息,BX=国家代码
    出口参数:CF=0——调用成功,BX=国家代码,否则。AX=错误代码(02H),其含义见错误代码表

    说明国家信息如下所示:

    字节0-1H:日期格式:0—mdy、1—dmy、2—ymd
    字节2-6H:货币字符
    字节7-8H:数值千位分割符
    字节9-0AH:数值精度分割符
    字节0B-0CH:日期间隔符
    字节0D-0EH:时间间隔符
    字节0FH:货币格式
    位0=0——货币符号在前,否则,货币符号在后
    位1=0——货币符号和数据之间无空格,否则,二者之间有一个空格
    位2=0——货币符号和小数点分开,否则,货币符号代替小数点
    字节10H:货币的小数位数
    字节11H:时间格式。位0=0—12小时制,否则,24小时制
    字节12~15H:Case-Map调用地址
    字节16~17H:字符串分割符
    字节18~21H:保留

    (7)、功能44H

    功能描述:输入/输出控制,其子功能描述:
     00H—取设备信息01H—取设备信息
     02H—从字符设备驱动器接受控制数据03H—发送控制数据到字符设备驱动器
     04H—从块设备驱动器接受控制数据    05H—发送控制数据到块设备驱动器
     06H—检查输入状态07H—检查输出状态
     08H—检查块设备是否为可拆卸设备09H—检查设备是否为远程设备
     0AH—检查句柄是否为远程对象0BH—改变共享访问入口数
     0CH—字符设备的一般I/O控制信息0DH—块设备的一般I/O控制信息
     0EH—读取逻辑驱动器映射关系0FH—设置逻辑驱动器映射关系
    说明:输入/输出子功能中的00H、06H和07H仅针对文件句柄,子功能00H~ 08H不支持网络设备。

    (8)、功能50H

    功能描述:设置程序段前缀(PSP)地址
    入口参数:AH=50H
    BX=新的PSP地址
    出口参数:

    (9)、功能51H

    功能描述:读取程序段前缀(PSP)地址
    入口参数:AH=51H
    出口参数:BX=PSP地址

    (10)、功能59H

    功能描述:读取扩展的错误信息
    入口参数:AH=59H
    BX=00H
    出口参数:AX=扩展的错误代码,其含义见错误代码表
    BH=错误类型,其定义如下:
    01h—资源短缺02h—处于临时状态而非错误
    03h—权限问题04h—系统软件内部错误
    05h—硬件失败06h—系统软件失败,但不是活跃进程失败
    07h—应用程序错08h—文件或数据项未发现
    09h—文件或数据项类型或格式错0Ah—文件或数据项相互加锁
    0Bh—驱动器中坏磁盘,磁盘中坏区域或存储问题
    0Ch—其它错误

    BL=建议采用的措施,其定义如下:
     01h — 重试若干次后,再选"终止"或"忽略"
     02h — 重试若干次(二次之间要等待)后,再选"终止"或"忽略"
     03h — 从用户获取正确的信息
     04h — 终止应用程序,并清除其所使用资源
     05h — 立即终止程序,但没有清除其资源
     06h — 忽略错误
     07h — 消除错误原因,再重试

    CH=错误地点,其定义如下:
     01h — 不知道
     02h — 块设备(磁盘或磁盘模拟器)
     03h — 网络
     04h — 串行设备
     05h — 内存

    ES:DI=插入磁盘标签的字符串,若AX=0022h(非法改变磁盘)

    (11)、功能5EH

    功能描述:读取机器名,读取/设置打印机配置
    子功能号功能描述
    00h读取机器名
    02h设置打印机安装字符串
    03h读取打印机安装字符串
    ①、子功能1
    入口参数:AH=5EH
    AL=00H
    DS:DX=接受字符串缓冲区的地址
    出口参数:CF=1——操作失败,AX=错误号(01H),其含义见错误代码表,否则,
    CH=00H——机器名未定义,否则,机器名已定义
    CL=NetBIOS名称号(当CH≠00H时)
    DS:DX=标识符地址(当CH≠00H时)
    ②、子功能2
    入口参数:AH=5EH
    AL=02H
    BX=重定向列表索引
    CX=安装字符串的长度
    DS:SI=安装字符串的地址
    出口参数:CF=0——操作成功,否则,AX=错误号(01H),其含义见错误代码表
    ③、子功能3
    入口参数:AH=5EH
    AL=03H
    BX=重定向列表索引
    ES:DI=接受字符串缓冲区的地址
    出口参数:CF=0——操作成功,CX=接受字符串的长度,否则,AX=错误号(01H),其含义见错误代码表

    (12)、功能5FH

    功能描述:设备重定向
    子功能号功能描述
    02h读取重定向列表索引
    03h重定向设备
    ①、子功能1
    入口参数:AH=5FH
    AL=02H
    BX=重定向列表索引
    DS:SI=接受本地设备名的16字节存储区地址
    ES:DI=接受网络名的128字节存储区地址
    出口参数:CF=1——操作失败,AX=错误号(01H或12H),其含义见错误代码表,否则,BH位0=0H——设备合法,否则,设备非法
    BL=设备类型——03H:打印机,04H:驱动器
    CX=存储参数值
    DX=被破坏
    BP=被破坏
    DS:SI=存放本地设备名的地址
    ES:DI=存放网络名的地址
    ②、子功能2
    入口参数:AH=5FH
    AL=03H
    BL=设备类型——03H:打印机,04H:驱动器
    CX=调用者保存的参数
    DS:SI=本地设备名的16字节存储区地址
    ES:DI=网络名的128字节存储区地址,紧跟其后是密码
    出口参数:CF=0——操作成功,否则,AX=错误号(01H、03H、05H、08H、0FH或12H),其含义见错误代码表

    (13)、功能63H

    功能描述:读取前导字节表
    入口参数:AH=63H
    AL=子功能
    =00H—读取系统前导字节表地址
    =01H—设置/清除临时控制台标志(DL=00H/01H—清除/设置标志)
    =02H—读取临时控制台标志值
    出口参数:BX=1——操作失败,AX=错误号(01H),其含义见错误代码表,否则,调用时,
       若AL=00H,则,DS:SI=系统前导字节表地址;
       若AL=02H,则,DL=临时控制台标志值

    (14)、功能65H

    功能描述:读取扩展的国家信息
    入口参数:AH=65H
    BX=代码页(-1=活跃的CON设备)
    CX=接受信息的缓冲区大小
    DX=国家标识(-1=缺省)
    ES:DI=接受信息的缓冲区地址
    AL=子功能
    =01H——读取一般的国家信息
    =02H——读取指向大写字母表的指针
    =04H——读取指向文件名大写字母表的指针
    =06H——读取指向校对表的指针
    =07H——读取指向DBCS向量的指针
    出口参数:CF=0——操作成功,需要的数据存入调用的缓冲区,否则,AX=错误号(02H),其含义见错误代码表

    (15)、功能66H

    功能描述:读取/设置代码页
    入口参数:AH=66H
    AL=子功能号:01H——读取代码页,02H——选择代码页
    BX=选择的代码页(当AL=02H)
    出口参数:CF=0——操作成功,当调用子功能01H时,BX=活跃的代码页,DX=缺省的代码页,否则,AX=错误号(02H或65H),其含义见错误代码表

    (16)、功能5D0AH

    功能描述:设置扩展的错误信息
    入口参数:AX=5D0AH
    DS:DX=扩展错误结构的地址,该结构的说明如下:
    EXTEND_ERR STRUCT
    RAx WORD ? ;AX
    RBx WORD ? ;BX
    RCx WORD ? ; CX
    RDx WORD ? ; DX
    RSi WORD ? ; SI
    RDi WORD ? ; DI
    RDs WORD ? ; DS
    REs WORD ? ; ES
    Pad WORD 3 DUP(0)
    EXTEND_ERRENDS
    出口参数:

    10、进程控制功能(Process-Control Function)

    00H终止进程
    26H创建新的程序段前缀(PSP)
    31H终止并驻留
    4BH执行程序(EXEC)
    4CH带返回码方式的终止进程
    4DH读取返回代码
    62H读取PSP地址

    (1)、功能00H

    功能描述:终止进程。这是程序可以使用的终止进程的方法之一
    入口参数:AH=00H
    CS=代码段地址
    出口参数:

    (2)、功能26H

    功能描述:把当前正在执行程序的程序段前缀(PSP)拷贝到内存中的指定地址中,并可改变其为其它程序所使用
    入口参数:AH=26H
    DX=新程序段前缀的段地址
    出口参数:

    (3)、功能31H

    功能描述:终止程序的运行,传递一个返回代码给其父进程,但该程序部分或全部驻留在内存中
    入口参数:AH=31H
    AL=返回代码号
    DX=驻留在内存中的字节数
    出口参数:

    (4)、功能4BH

    功能描述:执行程序(EXEC)
    入口参数:AH=4BH
    ES:BX=参数块的地址
    DS:DX=程序的入口地址
    AL=00H——装入并执行程序,03H——以覆盖的形式装入
    出口参数:CF=0——操作成功,除CS和IP之外,其它寄存器的值都被破坏,否则,AX=错误号(01H、02H、03H、05H、08H、0AH或0BH),其含义见错误代码表

    (5)、功能4CH

    功能描述:终止程序的执行,并可返回一个代码
    入口参数:AH=4CH
    AL=返回的代码
    出口参数:

    (6)、功能4DH

    功能描述:父进程获取子进程的返回代码
    入口参数:AH=4DH
    出口参数:AH=00H——用中断20H、中断21H的功能0或4C正常终止
      =01H——用户按^C终止
      =02H——因致命错误而终止
      =03H——用中断21H的功能31H,或中断27H终止
    AL=子进程的返回码:00H——子进程由中断20H、中断21H的功能0或4C终止

    (7)、功能62H

    功能描述:读取PSP地址
    入口参数:AH=62H
    出口参数:BX=PSP的偏移量

    11、时间和日期功能(Time and Date Function)

    2AH读取日期
    2BH设置日期
    2CH读取时间
    2DH设置时间

    (1)、功能2AH

    功能描述:取系统日期
    入口参数:AH=2AH
    出口参数:CX=年(1980~2099),DH=月(1~12),DL=日(1~31)
    AL=星期几(0=Sunday,1=Monday,...)

    (2)、功能2BH

    功能描述:置系统日期
    入口参数:AH=2BH
    CX=年(1980~2099),DH=月(1~12),DL=日(1~31)
    出口参数:AL=00H——设置成功,0FFH——设置失败

    (3)、功能2CH

    功能描述:取系统时间
    入口参数:AH=2CH
    出口参数:CH=时(0~23),CL=分(0~59),DL=秒(0~59),AL=百分秒(0~99)

    (4)、功能2DH

    功能描述:置系统时间
    入口参数:AH=2DH
    CH=时(0~23),CL=分(0~59),DL=秒(0~59),AL=百分秒(0~99)
    出口参数:出口参数:AL=00H——设置成功,0FFH——设置失败

    2、鼠标功能中断INT 33H

    00H初始化鼠标
    01H显示鼠标指针
    02H隐藏鼠标指针
    03H读取鼠标位置及其按钮状态
    04H设置鼠标指针位置
    05H读取鼠标按键信息
    06H读取鼠标按钮释放信息
    07H设置鼠标水平边界
    08H设置鼠标垂直边界
    09H设置图形鼠标形状
    0AH设置本文鼠标形状
    0BH读取鼠标移动计数
    0CH为鼠标事件设置处理程序
    0DH允许光笔仿真
    0EH关闭光笔仿真
    0FH设置鼠标计数与象素比
    10H设置鼠标指针隐藏区域
    13H设置倍速的阈值
    14H替换鼠标事件中断
    15H读取鼠标驱动器状态的缓冲区大小
    16H存储鼠标驱动器状态
    17H重装鼠标驱动器状态
    18H为鼠标事件设置替换处理程序
    19H读取替换处理程序的地址
    1AH设置鼠标的灵敏度
    1BH读取鼠标的灵敏度
    1CH设置鼠标中断速率
    1DH为鼠标指针选择显示页
    1EH读取鼠标指针的显示页
    1FH禁止鼠标驱动程序
    20H启动鼠标驱动程序
    21H鼠标驱动程序复位
    22H设置鼠标驱动程序信息语言
    23H读取语种
    24H读取鼠标信息
    25H读取鼠标驱动程序信息
    26H读取最大有效坐标

    (1)、功能00H

    功能描述:初始化鼠标,该操作只需要执行一次
    入口参数:AX=00H
    出口参数:AX=0000H——不支持鼠标功能,FFFFH——支持鼠标功能
    BX=鼠标按钮个数(在支持鼠标功能时)
    在支持鼠标功能的情况下,鼠标还被设置如下参数:
    1、鼠标指针放在屏幕中央
    2、如果当前鼠标指针是显示的,则操作后,鼠标指针被隐藏
    3、鼠标指针的显示页为0
    4、根据屏幕的显示模式显示鼠标指针:文本—反向显示矩形块,图形—尖头形状
    5、水平象素比=8:8,垂直象素比=16:8
    6、设置水平和垂直的显示边界为当前显示模式的最大边界
    7、允许光笔仿真
    8、双速门槛值=64

    (2)、功能01H

    功能描述:显示鼠标指针,通常在鼠标初始化后,用此功能显示其指针
    入口参数:AX=01H
    出口参数:

    (3)、功能02H

    功能描述:隐藏鼠标指针,一般在程序结束时,调用此功能
    入口参数:AX=02H
    出口参数:

    (4)、功能03H

    功能描述:读取鼠标位置及其按钮状态
    入口参数:AX=03H
    出口参数:
    BX=按键状态:位0=1——按下左键
    位1=1——按下右键
    位2=1——按下中键
    其它位——保留,内部使用
    CX=水平位置
    DX=垂直位置

    (5)、功能04H

    功能描述:设置鼠标指针位置
    入口参数:AX=04H,CX=水平位置,DX=垂直位置
    出口参数:

    (6)、功能05H

    功能描述:读取鼠标按键信息
    入口参数:AX=05H,BX=指定的按键:0—左键,1—右键,2—中键
    出口参数:AX=按键状态,参见功能3H中BX的说明
    BX=按键次数
    CX=水平位置(最后按键时)
    DX=垂直位置(最后按键时)

    (7)、功能06H

    功能描述:读取鼠标按钮释放信息
    入口参数:AX=06H,BX=指定的按键:0—左键,1—右键,2—中键
    出口参数:AX=按键状态,参见功能3H中BX的说明
    BX=释放的次数
    CX=水平位置(最后释放时)
    DX=垂直位置(最后释放时)

    (8)、功能07H

    功能描述:设置鼠标水平边界
    入口参数:AX=07H
    CX=最小水平位置
    DX=最大水平位置
    出口参数:无,鼠标有可能因新区域变小而自动移进新区域内

    (9)、功能08H

    功能描述:设置鼠标垂直边界
    入口参数:AX=08H
    CX=最小垂直位置
    DX=最大垂直位置
    出口参数:无,鼠标有可能因新区域变小而自动移进新区域内

    (10)、功能09H

    功能描述:设置图形鼠标形状
    入口参数:AX=09H
    BX=指针的水平位置
    CX=指针的垂直位置
    ES:DX=16×16位光标的映象地址
    参数说明:(BX,CX)是鼠标的指针在16×16点阵中的位置,(0,0)是左上角;
    ES:DX指向的存储单元内存放16×16点阵的位映象隐码,紧跟其后的是16×16点阵的光标掩码。
    鼠标指针的显示方法:位映象隐码“逻辑与”上屏幕显示区的内容,然后再用光标掩码内容“异或”前面运算的结果。
    出口参数:

    (11)、功能0AH

    功能描述:设置本文鼠标形状
    入口参数:AX=0AH
    BX=光标类型:
    0 —CX和DX的各位含义如下:
    位7~0鼠标指针符号
    位10~8字符前景色
    位11亮度
    位14~12字符背景色
    位15闪烁
    1 —CX=光标的起始扫描线
    DX=光标的结束扫描线
    出口参数:

    (12)、功能0BH

    功能描述:读取鼠标移动计数
    入口参数:AX=0BH
    出口参数:CX=水平移动距离:正数——向右移,负数——向左移
    DX=垂直移动距离:正数——向下移,负数——向上移

    (13)、功能0CH

    功能描述:为鼠标事件设置处理程序
    入口参数:AX=0CH
    CX=中断掩码
    位0=1——鼠标指针位置发送变化
    位1=1——按下左按钮
    位2=1——释放左按钮
    位3=1——按下右按钮
    位4=1——释放右按钮
    位5=1——按下中间按钮
    位6=1——释放中间按钮
    位7~15=0——保留

    ES:DX=中断处理程序的地址

    在进入中断处理程序时,有关寄存器的值含义:
      AX=中断掩码
      BX=按键状态
      CX=鼠标指针的水平位置
      DX=鼠标指针的垂直位置
      SI=水平位置的变化量
      DI=垂直位置的变化量

    出口参数:

    (14)、功能0DH

    功能描述:允许光笔仿真
    入口参数:AX=0DH
    出口参数:

    (15)、功能0EH

    功能描述:关闭光笔仿真
    入口参数:AX=0EH
    出口参数:

    (16)、功能0FH

    功能描述:设置鼠标计数与象素比
    入口参数:AX=0FH
    CX=水平比例
    DX=垂直比例
    出口参数:

    (17)、功能10H

    功能描述:设置鼠标指针隐藏区域
    入口参数:AX=10H
    CX=左上角X坐标
    DX=左上角Y坐标
    SI=右下角X坐标
    DI=右下角Y坐标
    出口参数:

    (18)、功能13H

    功能描述:设置倍速的阈值,其缺省值为64
    入口参数:AX=13H
    DX=阀值
    出口参数:

    (19)、功能14H

    功能描述:替换鼠标事件中断
    入口参数:AX=14H
    CX=中断掩码
    ES:DX=中断处理程序的地址
    出口参数:CX=旧的中断掩码
    ES:DX=旧的中断处理程序地址

    (20)、功能15H

    功能描述:读取鼠标驱动器状态的缓冲区大小
    入口参数:AX=15H
    出口参数:BX=存放鼠标驱动器状态所需缓冲区的大小

    (21)、功能16H

    功能描述:存储鼠标驱动器状态
    入口参数:AX=16H
    ES:DX=存储鼠标驱动器状态的地址
    出口参数:

    (22)、功能17H

    功能描述:重装鼠标驱动器状态
    入口参数:AX=17H
    ES:DX=鼠标驱动器状态的地址
    出口参数:

    (23)、功能18H

    功能描述:为鼠标事件设置可选的处理程序
    入口参数:AX=18H
    CX=替换中断掩码
    ES:DX=替换中断处理程序的地址
    CF=0
    出口参数:

    (24)、功能19H

    功能描述:读取替换处理程序的地址
    入口参数:AX=19H
    CX=替换中断掩码
    出口参数:若AX=-1——不成功,否则,ES:DX=中断处理程序的地址

    (25)、功能1AH

    功能描述:设置鼠标的灵敏度,其取值1~100
    入口参数:AX=1AH
    BX=水平灵敏度(每8个象素鼠标需要移动的数量,一般为8)
    CX=垂直灵敏度(每8个象素鼠标需要移动的数量,一般为16)
    DX=倍速阀值
    出口参数:

    (26)、功能1BH

    功能描述:读取鼠标的灵敏度
    入口参数:AX=1BH
    出口参数:BX=水平灵敏度
    CX=垂直灵敏度
    DX=倍速阀值

    (27)、功能1CH

    功能描述:设置鼠标中断速率
    入口参数:AX=1CH
    BX=每秒钟中断的次数:0—关中断,1—30/S,2—50/S,3—100/S,4—200/S
    出口参数:

    (28)、功能1DH

    功能描述:为鼠标指针选择显示页
    入口参数:AX=1DH
    BX=显示页
    出口参数:

    (29)、功能1EH

    功能描述:读取鼠标指针的显示页
    入口参数:AX=1EH
    出口参数:BX=显示页

    (30)、功能1FH

    功能描述:禁止鼠标驱动程序
    入口参数:AX=1FH
    出口参数:若AX=-1——不成功,否则,ES:BX=鼠标驱动程序的地址

    (31)、功能20H

    功能描述:启动鼠标驱动程序
    入口参数:AX=20H
    出口参数:

    (32)、功能21H

    功能描述:鼠标驱动程序复位
    入口参数:AX=21H
    出口参数:若AX=-1——不成功,否则,BX=2

    (33)、功能22H

    功能描述:设置鼠标驱动程序信息语言
    入口参数:AX=22H
    BX=语言代码:0—英语,1—法语,2—荷兰语,3—德语,4—瑞典语,5—芬兰语,6—西班牙语,7—葡萄牙语,8—意大利语
    出口参数:

    (34)、功能23H

    功能描述:读取语种
    入口参数:AX=23H
    出口参数:BX=语言代码

    (35)、功能24H

    功能描述:读取鼠标信息
    入口参数:AX=24H
    出口参数:BH=主版本号,BL=辅版本号
    CL=中断请求号
    CH=鼠标类型:1-Bus Mouse,2-Serial Mouse,3-InPort Mouse,4-PS/2 Mouse,5-HP Mouse

    (36)、功能25H

    功能描述:读取鼠标驱动程序信息
    入口参数:AX=25H
    出口参数: AX=鼠标驱动程序信息:
    位15 ——0:驱动程序是.SYS文件,否则,为.COM文件
    位14——0:不完全鼠标显示驱动程序,否则,为完全的
    位13-12——00:软件文本光标
    01:硬件文本光标
    1X:图形光标

    (37)、功能26H

    功能描述:读取最大有效坐标
    入口参数:AX=26H
    出口参数:BX=鼠标驱动程序状态
    CX=最大水平坐标
    DX=最大垂直坐标

    3、其它DOS中断

    INT 20H终止程序运行
    INT 22H终止处理程序的地址
    INT 23HCtrl+C处理程序
    INT 24H致命错误处理程序
    INT 25H读磁盘扇区(忽略逻辑结构)
    INT 26H 写磁盘扇区(忽略逻辑结构)
    INT 27H终止,并驻留在内存
    INT 28HDOS空闲
    INT 2FH 多重中断服务

    (1)、中断INT 20H

    功能描述:终止当前正在运行的程序,它是几种终止程序运行方法之一
    入口参数:CS=PSP的段地址
    出口参数:

    (2)、中断INT 22H

    功能描述:终止处理程序的地址,该地址在程序装入内存运行前被放入PSP的0AH~0DH的单元内。该中断指令从不直接书写在程序之中

    (3)、中断INT 23H

    功能描述:Ctrl+C处理程序。该中断指令从不直接书写在程序之中

    (4)、中断INT 24H

    功能描述:致命错误处理程序。该中断指令从不直接书写在程序之中

    (5)、中断INT 25H

    功能描述:绝对读磁盘,直接从逻辑设备中读出数据到内存单元中
    入口参数:AL=驱动器号(0=A、1=B、……)

    分区容量≤32M,有:

    CX=读出的扇区数
    DX=起始扇区数
    DS:BX=存放数据缓冲区的地址

    否则,有:

    CX=-1
    DS:BX=参数块缓冲区的地址,该参数块的结构如下:
    字节描述
    00~03H32位扇区数
    04~05H 将被读出的扇区数
    06~07H存放数据的缓冲区的偏移量
    08~09H存放数据的缓冲区的段地址
    出口参数:CF=0——操作成功,否则,AX=错误号,其含义见下错误代码表
    错误代码错误含义
    80H附件响应失败
    40H定位操作失败
    20H设备控制器失败
    10H数据错(错误的CRC)
    08H DMA失败
    04H需要的扇区未发现
    02H错误的地址标志
    01H错误命令

    (6)、INT 26H

    功能描述:绝对写磁盘,直接把内存单元中的内容写入逻辑设备
    入口参数:与前面的INT 25H相一致
    出口参数:与前面的INT 25H相一致

    (7)、INT 27H

    功能描述:终止,并驻留在内存
    入口参数:CS=PSP的段值
    DX=被保护程序最后一个字节的偏移量再加1
    出口参数:

    (8)、INT 28H

    功能描述:DOS空闲中断
    入口参数:
    出口参数:

    (9)、INT 2FH

    功能描述:多重中断服务,允许多个驻留程序通过单个中断与其它进程通信。
    入口参数:AH=标识号,AL=功能号,功能号及其含义如下:
    功能号功能描述
    01H假脱机打印
    06H驻留ASSIGN命令
    10H驻留SHARE命令
    B7H驻留APPEND命令
    出口参数:若入口AL为0,则出口AL=0FFH,否则,其值取决于处理程序

    BIOS中断:

    1、显示服务(Video Service——INT 10H)

    00H设置显示器模式0CH —写图形象素
    01H设置光标形状0DH —读图形象素
    02H设置光标位置0EH —在Teletype模式下显示字符
    03H读取光标信息0FH —读取显示器模式
    04H读取光笔位置10H —颜色
    05H设置显示页11H —字体
    06H、07H初始化或滚屏12H —显示器的配置
    08H读光标处的字符及其属性13H —在Teletype模式下显示字符串
    09H在光标处按指定属性显示字符1AH —读取/设置显示组合编码
    0AH在当前光标处显示字符1BH —读取功能/状态信息
    0BH设置调色板、背景色或边框1CH —保存/恢复显示器状态

    1、显示服务(Video Service——INT 10H)

    00H设置显示器模式0CH —写图形象素
    01H设置光标形状0DH —读图形象素
    02H设置光标位置0EH —在Teletype模式下显示字符
    03H读取光标信息0FH —读取显示器模式
    04H读取光笔位置10H —颜色
    05H设置显示页11H —字体
    06H、07H初始化或滚屏12H —显示器的配置
    08H读光标处的字符及其属性13H —在Teletype模式下显示字符串
    09H在光标处按指定属性显示字符1AH —读取/设置显示组合编码
    0AH在当前光标处显示字符1BH —读取功能/状态信息
    0BH设置调色板、背景色或边框1CH —保存/恢复显示器状态

    1、显示服务(Video Service——INT 10H)

    00H设置显示器模式0CH —写图形象素
    01H设置光标形状0DH —读图形象素
    02H设置光标位置0EH —在Teletype模式下显示字符
    03H读取光标信息0FH —读取显示器模式
    04H读取光笔位置10H —颜色
    05H设置显示页11H —字体
    06H、07H初始化或滚屏12H —显示器的配置
    08H读光标处的字符及其属性13H —在Teletype模式下显示字符串
    09H在光标处按指定属性显示字符1AH —读取/设置显示组合编码
    0AH在当前光标处显示字符1BH —读取功能/状态信息
    0BH设置调色板、背景色或边框1CH —保存/恢复显示器状态

    (1)、功能00H

    功能描述:设置显示器模式
    入口参数:AH=00H
    AL=显示器模式,见下表所示
    出口参数:

    可用的显示模式如下所列:

    显示模式显示模式属性显示模式显示模式属性
    00H40×2516色 文本01H40×2516色 文本
    02H80×2516色 文本03H80×2516色 文本
    04H320×2004色05H320×2004色
    06H640×2002色07H80×252色 文本
    08H160×20016色09H320×20016色
    0AH640×2004色0BH保留 
    0CH保留0DH320×20016色
    0EH640×20016色0FH640×3502(单色)
    10H640×3504色10H640×35016色
    11H640×4802色12H640×48016色
    13H640×480256色

    对于超级VGA显示卡,我们可用AX=4F02H和下列BX的值来设置其显示模式。

    BX显示模式属性BX显示模式属性
    100H640×400256色101H640×480256色
    102H800×60016色103H800×600256色
    104H1024×76816色105H1024×768256色
    106H1280×102416色107H1280×1024256色
    108H80×60文本模式109H132×25文本模式
    10AH132×43文本模式10BH132×50文本模式
    10CH132×60文本模式

    (2)、功能01H

    功能描述:设置光标形状
    入口参数:AH=01H
    CH低四位=光标的起始行
    CL低四位=光标的终止行
    出口参数:

    (3)、功能02H

    功能描述:用文本坐标下设置光标位置
    入口参数:AH=02H
    BH=显示页码
    DH=行(Y坐标)
    DL=列(X坐标)
    出口参数:

    (4)、功能03H

    功能描述:在文本坐标下,读取光标各种信息
    入口参数:AH=03H
    BH=显示页码
    出口参数:CH=光标的起始行
    CL=光标的终止行
    DH=行(Y坐标)
    DL=列(X坐标)

    (5)、功能04H

    功能描述:获取当前状态和光笔位置
    入口参数:AH=04H
    出口参数:AH=00h——光笔未按下/未触发,01h——光笔已按下/已触发
    BX=象素列(图形X坐标)
    CH=象素行(图形Y坐标,显示模式:04H~06H)
    CX=象素行(图形Y坐标,显示模式:0DH~10H)
    DH=字符行(文本Y坐标)
    DL=字符列(文本X坐标)

    (6)、功能05H

    功能描述:设置显示页,即选择活动的显示页
    入口参数:AH=05H
    AL=显示页
    对于CGA、EGA、MCGA和VGA,其显示页如下表所列:
    模式页数显示器类型
    00H、01H0~7CGA、EGA、MCGA、VGA
    02H、03H0~3CGA
    02H、03H0~7EGA、MCGA、VGA
    07H0~7EGA、VGA
    0DH0~7EGA、VGA
    0EH0~3EGA、VGA
    0FH0~1EGA、VGA
    10H0~1EGA、VGA
    对于PCjr:
    AL=80H——读取CRT/CPU页寄存器
    81H——设置CPU页寄存器
    82H——设置CRT页寄存器
    83H——设置CRT/CPU页寄存器
    BH=CRT页(子功能号82H和83H)
    BL=CPU页(子功能号81H和83H)
    出口参数:对于前者,无出口参数,但对PCjr在子功能80H~83H调用下,有:BH=CRT页寄存器,BL=CPU页寄存器

    (7)、功能06H和07H

    功能描述:初始化屏幕或滚屏
    入口参数:AH=06H——向上滚屏,07H——向下滚屏
    AL=滚动行数(0——清窗口)
    BH=空白区域的缺省属性
    (CH、CL)=窗口的左上角位置(Y坐标,X坐标)
    (DH、DL)=窗口的右下角位置(Y坐标,X坐标)
    出口参数:

    (8)、功能08H

    功能描述:读光标处的字符及其属性
    入口参数:AH=08H
    BH=显示页码
    出口参数:AH=属性
    AL=字符

    (9)、功能09H

    功能描述:在当前光标处按指定属性显示字符
    入口参数:AH=09H
    AL=字符
    BH=显示页码
    BL=属性(文本模式)或颜色(图形模式)
    CX=重复输出字符的次数
    出口参数:

    (10)、功能0AH

    功能描述:在当前光标处按原有属性显示字符
    入口参数:AH=0AH
    AL=字符
    BH=显示页码
    BL=颜色(图形模式,仅适用于PCjr)
    CX=重复输出字符的次数
    出口参数:

    (11)、功能0BH

    功能描述:设置调色板、背景色或边框
    入口参数:AH=0BH
    设置颜色:BH=00H,BL=颜色
    选择调色板:BH=01H,BL=调色板(320×200、4种颜色的图形模式)
    出口参数:

    (12)、功能0CH

    功能描述:写图形象素
    入口参数:AH=0CH
    AL=象素值
    BH=页码
    (CX、DX)=图形坐标列(X)、行(Y)
    出口参数:

    (13)、功能0DH

    功能描述:读图形象素
    入口参数:AH=0DH
    BH=页码
    (CX、DX)=图形坐标列(X)、行(Y)
    出口参数:AL=象素值

    (14)、功能0EH

    功能描述:在Teletype模式下显示字符
    入口参数:AH=0EH
    AL=字符
    BH=页码
    BL=前景色(图形模式)
    出口参数:

    (15)、功能0FH

    功能描述:读取显示器模式
    入口参数:AH=0FH
    出口参数:AH=屏幕字符的列数
    AL=显示模式(参见功能00H中的说明)
    BH=页码

    (16)、功能10H

    功能描述:颜色中断。其子功能说明如下:
    功能号 子功能名称功能号 子功能名称
    00H — 设置调色板寄存器01H — 设置边框颜色
    02H — 设置调色板和边框03H — 触发闪烁/亮显位
    07H — 读取调色板寄存器08H — 读取边框颜色
    09H — 读取调色板和边框10H — 设置颜色寄存器
    12H — 设置颜色寄存器块13H — 设置颜色页状态
    15H — 读取颜色寄存器17H — 读取颜色寄存器块
    1AH — 读取颜色页状态1BH — 设置灰度值

    (17)、功能11H

    功能描述:字体中断。其子功能说明如下:
    子功能号子功能名称
    00H装入用户字体和可编程控制器
    10H装入用户字体和可编程控制器
    01H装入8×14 ROM字体和可编程控制器
    11H装入8×14 ROM字体和可编程控制器
    02H装入8×8 ROM字体和可编程控制器
    12H装入8×8 ROM字体和可编程控制器
    03H设置块指示器
    04H装入8×16 ROM字体和可编程控制器
    14H装入8×16 ROM字体和可编程控制器
    20H设置INT 1Fh字体指针
    21H为用户字体设置INT 43h
    22H为8×14 ROM字体设置INT 43H
    23H为8×8 ROM字体设置INT 43H
    24H为8×16 ROM字体设置INT 43H
    30H读取字体信息

    (18)、功能12H

    功能描述:显示器的配置中断。其子功能说明如下:
    功能号    功能名称 功能号   功能名称
    10H — 读取配置信息20H — 选择屏幕打印
    30H — 设置扫描行31H — 允许/禁止装入缺省调色板
    32H — 允许/禁止显示33H — 允许/禁止灰度求和
    34H — 允许/禁止光标模拟35H — 切换活动显示
    36H — 允许/禁止屏幕刷新

    (19)、功能13H

    功能描述:在Teletype模式下显示字符串
    入口参数:AH=13H
    BH=页码
    BL=属性(若AL=00H或01H)
    CX=显示字符串长度
    (DH、DL)=坐标(行、列)
    ES:BP=显示字符串的地址
    AL=显示输出方式
    0——字符串中只含显示字符,其显示属性在BL中。显示后,光标位置不变
    1——字符串中只含显示字符,其显示属性在BL中。显示后,光标位置改变
    2——字符串中含显示字符和显示属性。显示后,光标位置不变
    3——字符串中含显示字符和显示属性。显示后,光标位置改变
    出口参数:

    (20)、功能1AH

    功能描述:读取/设置显示组合编码,仅PS/2有效,在此从略

    (21)、功能1BH

    功能描述:读取功能/状态信息,仅PS/2有效,在此从略

    (22)、功能1CH

    功能描述:保存/恢复显示器状态,仅PS/2有效,在此从略

    2、直接磁盘服务(Direct Disk Service——INT 13H)

    00H —磁盘系统复位0EH —读扇区缓冲区
    01H —读取磁盘系统状态0FH —写扇区缓冲区
    02H —读扇区10H —读取驱动器状态
    03H —写扇区11H —校准驱动器
    04H —检验扇区12H —控制器RAM诊断
    05H —格式化磁道13H —控制器驱动诊断
    06H —格式化坏磁道14H —控制器内部诊断
    07H —格式化驱动器15H —读取磁盘类型
    08H —读取驱动器参数16H —读取磁盘变化状态
    09H —初始化硬盘参数17H —设置磁盘类型
    0AH —读长扇区18H —设置格式化媒体类型
    0BH —写长扇区19H —磁头保护
    0CH —查寻1AH —格式化ESDI驱动器
    0DH —硬盘系统复位

    (1)、功能00H

    功能描述:磁盘系统复位
    入口参数:AH=00H
    DL=驱动器,00H~7FH:软盘;80H~0FFH:硬盘
    出口参数:CF=0——操作成功,AH=00H,否则,AH=状态代码,参见功能号01H中的说明

    (2)、功能01H

    功能描述:读取磁盘系统状态
    入口参数:AH=01H
    DL=驱动器,00H~7FH:软盘;80H~0FFH:硬盘
    出口参数:AH=00H,AL=状态代码,其定义如下:

    00H — 无错 

    01H — 非法命令

    02H — 地址目标未发现

    03H — 磁盘写保护(软盘)

    04H — 扇区未发现

    05H — 复位失败(硬盘)

    06H — 软盘取出(软盘)

    07H — 错误的参数表(硬盘)

    08H — DMA越界(软盘)

    09H — DMA超过64K界限

    0AH — 错误的扇区标志(硬盘)

    0BH — 错误的磁道标志(硬盘)

    0CH — 介质类型未发现(软盘)

    0DH — 格式化时非法扇区号(硬盘)

    0EH — 控制数据地址目标被发现(硬盘)

    0FH — DMA仲裁越界(硬盘)

    10H — 不正确的CRC或ECC编码

    11H — ECC校正数据错(硬盘)
     CRC:Cyclic Redundancy Check code
     ECC:Error Checking & Correcting code

    20H — 控制器失败

    40H — 查找失败

    80H — 磁盘超时(未响应)

    AAH — 驱动器未准备好(硬盘)

    BBH — 未定义的错误(硬盘)

    CCH — 写错误(硬盘)

    E0H — 状态寄存器错(硬盘)

    FFH — 检测操作失败(硬盘)

    (3)、功能02H

    功能描述:读扇区
    入口参数:AH=02H
    AL=扇区数
    CH=柱面
    CL=扇区
    DH=磁头
    DL=驱动器,00H~7FH:软盘;80H~0FFH:硬盘
    ES:BX=缓冲区的地址
    出口参数:CF=0——操作成功,AH=00H,AL=传输的扇区数,否则,AH=状态代码,参见功能号01H中的说明

    (4)、功能03H

    功能描述:写扇区
    入口参数:AH=03H
    AL=扇区数
    CH=柱面
    CL=扇区
    DH=磁头
    DL=驱动器,00H~7FH:软盘;80H~0FFH:硬盘
    ES:BX=缓冲区的地址
    出口参数:CF=0——操作成功,AH=00H,AL=传输的扇区数,否则,AH=状态代码,参见功能号01H中的说明

    (5)、功能04H

    功能描述:检验扇区
    入口参数:AH=04H
    AL=扇区数
    CH=柱面
    CL=扇区
    DH=磁头
    DL=驱动器,00H~7FH:软盘;80H~0FFH:硬盘
    ES:BX=缓冲区的地址
    出口参数:CF=0——操作成功,AH=00H,AL=被检验的扇区数,否则,AH=状态代码,参见功能号01H中的说明

    (6)、功能05H

    功能描述:格式化磁道
    入口参数:AH=05H
    AL=交替(Interleave)
    CH=柱面
    DH=磁头
    DL=驱动器,00H~7FH:软盘;80H~0FFH:硬盘
    ES:BX=地址域列表的地址
    出口参数:CF=0——操作成功,AH=00H,否则,AH=状态代码,参见功能号01H中的说明

    (7)、功能06H

    功能描述:格式化坏磁道
    入口参数:AH=06H
    AL=交替
    CH=柱面
    DH=磁头
    DL=80H~0FFH:硬盘
    ES:BX=地址域列表的地址
    出口参数:CF=0——操作成功,AH=00H,否则,AH=状态代码,参见功能号01H中的说明

    (8)、功能07H

    功能描述:格式化驱动器
    入口参数:AH=07H
    AL=交替
    CH=柱面
    DL=80H~0FFH:硬盘
    出口参数:CF=0——操作成功,AH=00H,否则,AH=状态代码,参见功能号01H中的说明

    (9)、功能08H

    功能描述:读取驱动器参数
    入口参数:AH=08H
    DL=驱动器,00H~7FH:软盘;80H~0FFH:硬盘
    出口参数:CF=1——操作失败,AH=状态代码,参见功能号01H中的说明,否则,

    BL

    =01H — 360K
    =02H — 1.2M
    =03H — 720K
    =04H — 1.44M

    CH=柱面数的低8位
    CL的位7-6=柱面数的该2位
    CL的位5-0=扇区数
    DH=磁头数
    DL=驱动器数
    ES:DI=磁盘驱动器参数表地址

    (10)、功能09H

    功能描述:初始化硬盘参数
    入口参数:AH=09H
    DL=80H~0FFH:硬盘(还有有关参数表问题,在此从略)
    出口参数:CF=0——操作成功,AH=00H,否则,AH=状态代码,参见功能号01H中的说明

    (11)、功能0AH

    功能描述:读长扇区,每个扇区随带四个字节的ECC编码
    入口参数:AH=0AH
    AL=扇区数
    CH=柱面
    CL=扇区
    DH=磁头
    DL=80H~0FFH:硬盘
    ES:BX=缓冲区的地址
    出口参数:CF=0——操作成功,AH=00H,AL=传输的扇区数,否则,AH=状态代码,参见功能号01H中的说明

    (12)、功能0BH

    功能描述:写长扇区,每个扇区随带四个字节的ECC编码
    入口参数:AH=0BH
    AL=扇区数
    CH=柱面
    CL=扇区
    DH=磁头
    DL=80H~0FFH:硬盘
    ES:BX=缓冲区的地址
    出口参数:CF=0——操作成功,AH=00H,AL=传输的扇区数,否则,AH=状态代码,参见功能号01H中的说明

    (13)、功能0CH

    功能描述:查寻
    入口参数:AH=0CH
    CH=柱面的低8位
    CL(7-6位)=柱面的高2位
    DH=磁头
    DL=80H~0FFH:硬盘
    出口参数:CF=0——操作成功,AH=00H,否则,AH=状态代码,参见功能号01H中的说明

    (14)、功能0DH

    功能描述:硬盘系统复位
    入口参数:AH=0DH
    DL=80H~0FFH:硬盘
    出口参数:CF=0——操作成功,AH=00H,否则,AH=状态代码,参见功能号01H中的说明

    (15)、功能0EH

    功能描述:读扇区缓冲区
    入口参数:AH=0EH
    ES:BX=缓冲区的地址
    出口参数:CF=0——操作成功,否则,AH=状态代码,参见功能号01H中的说明

    (16)、功能0FH

    功能描述:写扇区缓冲区
    入口参数:AH=0FH
    ES:BX=缓冲区的地址
    出口参数:CF=0——操作成功,否则,AH=状态代码,参见功能号01H中的说明

    (17)、功能10H

    功能描述:读取驱动器状态
    入口参数:AH=10H
    DL=80H~0FFH:硬盘
    出口参数:CF=0——操作成功,AH=00H,否则,AH=状态代码,参见功能号01H中的说明

    (18)、功能11H

    功能描述:校准驱动器
    入口参数:AH=11H
    DL=80H~0FFH:硬盘
    出口参数:CF=0——操作成功,AH=00H,否则,AH=状态代码,参见功能号01H中的说明

    (19)、功能12H

    功能描述:控制器RAM诊断
    入口参数:AH=12H
    出口参数:CF=0——操作成功,否则,AH=状态代码,参见功能号01H中的说明

    (20)、功能13H

    功能描述:控制器驱动诊断
    入口参数:AH=13H
    出口参数:CF=0——操作成功,否则,AH=状态代码,参见功能号01H中的说明

    (21)、功能14H

    功能描述:控制器内部诊断
    入口参数:AH=14H
    出口参数:CF=0——操作成功,否则,AH=状态代码,参见功能号01H中的说明

    (22)、功能15H

    功能描述:读取磁盘类型
    入口参数:AH=15H
    DL=驱动器,00H~7FH:软盘;80H~0FFH:硬盘
    出口参数:CF=1——操作失败,AH=状态代码,参见功能号01H中的说明,
    否则,AH=00H — 未安装驱动器
    =01H — 无改变线支持的软盘驱动器
    =02H — 带有改变线支持的软盘驱动器
    =03H — 硬盘,CX:DX=512字节的扇区数

    (23)、功能16H

    功能描述:读取磁盘变化状态
    入口参数:AH=16H
    DL=00H~7FH:软盘
    出口参数:CF=0——磁盘未改变,AH=00H,否则,AH=06H,参见功能号01H中的说明

    (24)、功能17H

    功能描述:设置磁盘类型
    入口参数:AH=17H
    DL=00H~7FH:软盘
    AL=00H — 未用
    =01H — 360K在360K驱动器中
    =02H — 360K在1.2M驱动器中
    =03H — 1.2M在1.2M驱动器中
    =04H — 720K在720K驱动器中
    出口参数:CF=0——操作成功,AH=00H,否则,AH=状态编码,参见功能号01H中的说明

    (25)、功能18H

    功能描述:设置格式化媒体类型
    入口参数:AH=18H
    CH=柱面数
    CL=每磁道的扇区数
    DL=00H~7FH:软盘
    出口参数:CF=0——操作成功,AH=00H,ES:DI=介质类型参数表地址,否则,AH=状态编码,参见功能号01H中的说明

    (26)、功能19H

    功能描述:磁头保护,仅在PS/2中有效,在此从略

    (27)、功能1AH

    功能描述:格式化ESDI驱动器,仅在PS/2中有效,在此从略

    3、串行口服务(Serial Port Service——INT 14H)

    00H —初始化通信口03H —读取通信口状态
    01H —向通信口输出字符04H —扩充初始化通信口
    02H —从通信口读入字符

    (1)、功能00H

    功能描述:初始化通信口
    入口参数:AH=00H
    DX=初始化通信口号(0=COM1,1=COM2,……)
    AL=初始化参数,参数的说明如下:
    波特率奇偶位停止位字的位数
    76543210
    000 = 110X0 = None0 = 1 bit10 = 7 bits
    001 = 15001 = Odd1 = 2 bits11 = 8 bits
    010 = 30011 = Even
    011 = 600
    100 = 1200
    101 = 2400
    110 = 4800
    111 = 9600

    对于PS/2,可用INT 14H之功能04H和05H来初始化其通信速率大于9600。

    出口参数:AH=通信口状态,各状态位为1时的含义如下:
    位7—超时
    位6—传递移位寄存器为空
    位5—传递保持寄存器为空
    位4—发现终止
    位3—发现帧错误
    位2—发现奇偶错
    位1—发现越界错
    位0—接受数据准备好

    AL=Modem状态

    位7—接受单线信号诊断
    位6—环指示器
    位5—数据发送准备好
    位4—清除数据,再发送
    位3—改变在接受线上的信号诊断
    位2—后边界环指示器
    位1—改变“数据准备好”状态
    位0—改变“清除—发送”状态

    (2)、功能01H

    功能描述:向通信口输出字符
    入口参数:AH=01H
    AL=字符
    DX=初始化通信口号(0=COM1,1=COM2,……)
    出口参数:AL的值不变
    AH的位7=0——操作成功,通信口状态,AH的位6~0是其状态位

    (3)、功能02H

    功能描述:从通信口读入字符
    入口参数:AH=02H
    DX=初始化通信口号(0=COM1,1=COM2,……)
    出口参数:AL=接受的字符
    AH的位7=0——操作成功,通信口状态,AH的位6~0是其状态位

    (4)、功能03H

    功能描述:读取通信口状态
    入口参数:AH=03H
    DX=初始化通信口号(0=COM1,1=COM2,……)
    出口参数:AH=通信口状态,AL=Modem状态,参见功能号00H中的说明

    (5)、功能04H

    功能描述:扩充初始化通信口,仅在PS/2中有效,在此从略

    4、杂项系统服务(Miscellaneous System Service——INT 15H)

    00H —开盒式磁带机马达85H —系统请求(SysReq)键
    01H —关盒式磁带机马达86H —延迟
    02H —读盒式磁带机87H —移动扩展内存块
    03H —写盒式磁带机88H —读取扩展内存大小
    0FH —格式化ESDI驱动器定期中断89H —进入保护模式
    21H —读/写自检(POST)错误记录90H —设备等待
    4FH —键盘截听91H —设备加电自检
    80H —设备打开C0H —读取系统环境
    81H —设备关闭C1H —读取扩展BIOS数据区地址
    82H —进程终止C2H —鼠标图形
    83H —事件等待C3H —设置WatcHdog超时
    84H —读游戏杆C4H —可编程选项选择

    (1)、功能00H

    功能描述:开盒式磁带机马达
    入口参数:AH=00H
    出口参数:CF=0——操作成功,否则,AH=状态(86H,若未安装盒式磁带机)

    (2)、功能01H

    功能描述:关盒式磁带机马达
    入口参数:AH=01H
    出口参数:CF=0——操作成功,否则,AH=状态(86H,若未安装盒式磁带机)

    (3)、功能02H

    功能描述:读盒式磁带机
    入口参数:AH=02H
    CX=读入的字节数
    ES:BX=存放数据的缓冲区地址
    出口参数:CF=0——操作成功,DX=实际读入的字节数,ES:BX指向最后一个字节的后面地址,否则,AH=状态码,其值含义如下:
    01H —— CRC校验码错80H —— 非法命令
    02H —— 位信号混乱86H —— 未安装盒式磁带机
    04H —— 无发现数据

    (4)、功能03H

    功能描述:写盒式磁带机
    入口参数:AH=03H
    CX=要写入的字节数
    ES:BX=已存数据的缓冲区地址
    出口参数:CF=0——操作成功,CX=00H,ES:BX指向最后一个字节的后面地址,否则,AH=状态码,其值含义如下:
    80H —— 非法命令86H —— 未安装盒式磁带机

    (5)、功能0FH

    功能描述:格式化ESDI驱动器定期中断,仅在PS/2中有效,在此从略

    (6)、功能21H

    功能描述:读/写自检(POST)错误记录,仅在PS/2中有效,在此从略

    (7)、功能4FH

    功能描述:键盘截听,仅在PS/2中有效,在此从略

    (8)、功能80H

    功能描述:打开设备
    入口参数:AH=80H
    BX=设备号
    CX=进程号
    出口参数:CF=0——操作成功,AH=00H,否则,AH=状态码

    (9)、功能81H

    功能描述:关闭设备
    入口参数:AH=81H
    BX=设备号
    CX=进程号
    出口参数:CF=0——操作成功,AH=00H,否则,AH=状态码

    (10)、功能82H

    功能描述:进程终止
    入口参数:AH=81H
    BX=进程号
    出口参数:CF=0——操作成功,AH=00H,否则,AH=状态码

    (11)、功能83H

    功能描述:事件等待
    入口参数:AH=83H
    若需要事件等待,则:AL=00H
    CX:DX=千分秒
    ES:BX=信号量字节的地址
    否则,调用参数为AL=01H
    出口参数:若调用时,AL=00H,操作成功——CF=0,否则,CF=1

    (12)、功能84H

    功能描述:读游戏杆
    入口参数:AH=84H
    DX=00H——读取开关设置
     =01H——读取阻力输入
    出口参数:CF=1H——操作失败,否则,
     DX=00H时,AL=开关设置(位7~4)
     DX=01H时,AX、BX、CX和DX分别为A(x)、A(y)、B(x)和B(y)的值

    (13)、功能85H

    功能描述:系统请求(SysReq)键
    入口参数:AH=85H
    AL=00H——键按下
     =01H——键放开
    出口参数:CF=0——操作成功,AH=00H,否则,AH=状态码

    (14)、功能86H

    功能描述:延迟
    入口参数:AH=86H
    CX:DX=千分秒
    出口参数:CF=0——操作成功,AH=00H

    (15)、功能87H

    功能描述:从常规内存和扩展内存之间移动扩展内存块
    入口参数:AH=87H
    CX=移动的字数
    ES:SI=GDT(Global Descriptor Table)的地址,其结构定义如下:
    偏移量存储的信息
    00h-0Fh保留,但现全为0
    10h-11h段的长度(2CX-1或更大)
    12h-14h24位源地址
    15h访问权限字节(其值为93h)
    16h-17h保留,但现全为0
    18h-19h段的长度(2CX-1或更大)
    1Ah-1Ch 24位目标源地址
    1Dh访问权限字节(其值为93h)
    1Eh-2Fh保留,但现全为0
    出口参数:CF=0——操作成功,AH=00H,否则,AH=状态码,其含义如下:
      01H —— RAM奇偶错
      02H —— 异常中断错
      03H —— 20号线门地址失败

    (16)、功能88H

    功能描述:读取扩展内存大小
    入口参数:AH=88H
    出口参数:AX=扩展内存字节数(以K为单位)

    (17)、功能89H

    功能描述:进入保护模式,CPU从实模式进入保护模式
    入口参数:AH=89H
    BH=IRQ0的中断号
    BL=IRQ8的中断号
    ES:SI=GDT的地址(参见功能号87H)
    出口参数:CF=1——操作失败,AH=0FFH,否则,AH=00H,CS、DS、ES和SS都是用户定义的选择器

    (18)、功能90H

    功能描述:设备等待
    入口参数:AH=90H
    AL=驱动器类型,具体的驱动器类型定义如下:
    =00H~7FH——串行再重用设备
    =80H~0BFH——可重入式设备
    =0C0H~0FFH——等待访问设备,没有自检功能
    00h — 磁盘
    02h — 键盘
    80h — 网络
    FDh — 软盘马达启动
    01h — 软盘
    03h — 点设备(Pointing Device)
    FCh — 硬盘复位
    FEh — 打印机

    ES:BX=对驱动器类型80H~0FFH的请求块地址

    出口参数:CF=1——操作失败,否则,AH=00H

    (19)、功能91H

    功能描述:设备加电自检
    入口参数:AH=91H
    AL=00H~7FH——串行再重用设备
     =80H~0BFH——可重入式设备
    出口参数:AH=00H

    (20)、功能0C0H

    功能描述:读取系统环境
    入口参数:AH=0C0H
    出口参数:ES:BX=配置表地址,配置表的定义如下:
    偏移量含义说明
    00h-01h表的大小(字节数)
    02h系统模型
    03h系统子模型
    04hBIOS版本号
    05h配置标志,其各位为1时的说明如下:
      位7—DMA通道3使用
      位6—存在从属8259
      位5—实时时钟有效
      位4—键盘截听有效
      位3—等待外部事件有效
      位2—扩展BIOS数据区
      位1—微通道设施
      位0—保留
    06h-09h保留

    (21)、功能C1H

    功能描述:读取扩展BIOS数据区地址,仅在PS/2中有效,在此从略

    (22)、功能C2H

    功能描述:鼠标图形,仅在PS/2中有效,在此从略

    (23)、功能C3H

    功能描述:设置WatcHdog超时,仅在PS/2中有效,在此从略

    (24)、功能C4H

    功能描述:可编程选项选择,仅在PS/2中有效,在此从略

    5、键盘服务(Keyboard Service——INT 16H)

    00H、10H —从键盘读入字符03H —设置重复率
    01H、11H —读取键盘状态04H —设置键盘点击
    02H, 12H —读取键盘标志05H —字符及其扫描码进栈

    (1)、功能00H和10H

    功能描述:从键盘读入字符
    入口参数:

    AH

    =00H——读键盘
    =10H——读扩展键盘,可根据0000:0496H单元的内容判断:扩展键盘是否有效
    出口参数:AH=键盘的扫描码
    AL=字符的ASCII码

    (2)、功能01H和11H

    功能描述:读取键盘状态
    入口参数:
    AH=01H——检查普通键盘
    =11H——检查扩展键盘
    出口参数:ZF=1——无字符输入,否则,AH=键盘的扫描码,AL=ASCII码。

    (3)、功能02H和12H

    功能描述:读取键盘标志
    入口参数:
    AH=02H——普通键盘的移位标志
    =12H——扩展键盘的移位标志
    出口参数:AL=键盘标志(02H和12H都有效),其各位之值为1时的含义如下:

    位7—INS开状态

    位3—ALT键按下
    位6—CAPS LOCK开状态位2—CTRL键按下
    位5—NUM LOCK开状态位1—左SHIFT键按下
    位4—SCROLL LOCK开状态位0—右SHIFT键按下

    AH=扩展键盘的标志(12H有效),其各位之值为1时的含义如下:

    位7—SysReq键按下位3—右ALT键按下
    位6—CAPS LOCK键按下位2—右CTRL键按下
    位5—NUM LOCK键按下位1—左ALT键按下
    位4—SCROLL键按下位0—左CTRL键按下

    (4)、功能03H

    功能描述:设置重复率
    入口参数:AH=03H
    对于PC/AT和PS/2:AL=05H
    BH=重复延迟
    BL=重复率
    对于PCjr:

    AL

    =00H——装入缺省的速率和延迟
    =01H——增加初始延迟
    =02H——重复频率降低一半
    =03H——增加延迟和降低一半重复频率
    =04H——关闭键盘重复功能
    出口参数:

    (5)、功能04H

    功能描述:设置键盘点击
    入口参数:AH=04H
    AL=00H——关闭键盘点击功能
    =01H——打开键盘点击功能
    出口参数:

    (6)、功能05H

    功能描述:字符及其扫描码进栈
    入口参数:AH=05H
    CH=字符的描述码
    CL=字符的ASCII码
    出口参数:CF=1——操作成功,AL=00H,否则,AL=01H

    6、并行口服务(Parallel Port Service——INT 17H)

    00H向打印机输出字符
    01H初始化打印机端口
    02H读取打印机状态

    (1)、功能00H

    功能描述:向打印机输出字符
    入口参数:AH=00H
    AL=输出的字符
    DX=打印机号(0—LPT1,1—LPT2,2—LPT3,……)
    出口参数:AH=打印机状态。其各位为1时的含义如下:
    位7—打印机空闲   位3—I/O错误
    位6—打印机响应位2—保留
    位5—无纸位1—保留
    位4—打印机被选位0—打印机超时

    (2)、功能01H

    功能描述:初始化打印机端口
    入口参数:AH=01H
    DX=打印机号(0—LPT1,1—LPT2,2—LPT3,……)
    出口参数:AH=打印机状态。各位定义如下功能00H所示

    (3)、功能02H

    功能描述:读取打印机状态
    入口参数:AH=02H
    DX=打印机号(0—LPT1,1—LPT2,2—LPT3,……)
    出口参数:AH=打印机状态。各位定义如下功能00H所示

    7、时钟服务(Clock Service——INT 1AH)

    00H —读取时钟“滴答”计数06H —设置闹钟
    01H —设置时钟“滴答”计数07H —闹钟复位
    02H —读取时间0AH —读取天数计数
    03H —设置时间0BH —设置天数计数
    04H —读取日期 80H —设置声音源信息
    05H —设置日期

    (1)、功能00H

    功能描述:读取时钟“滴答”计数
    入口参数:AH=00H
    出口参数:AL=00H——未过午夜,否则,表示已过午夜
    CX:DX=时钟“滴答”计数

    (2)、功能01H

    功能描述:设置时钟“滴答”计数
    入口参数:AH=01H
    CX:DX=时钟“滴答”计数
    出口参数:

    (3)、功能02H

    功能描述:读取时间
    入口参数:AH=02H
    出口参数:CH=BCD码格式的小时
    CL=BCD码格式的分钟
    DH=BCD码格式的秒
    DL=00H——标准时间,否则,夏令时
    CF=0——时钟在走,否则,时钟停止

    (4)、功能03H

    功能描述:设置时间
    入口参数:AH=03H
    CH=BCD码格式的小时
    CL=BCD码格式的分钟
    DH=BCD码格式的秒
    DL=00H——标准时间,否则,夏令时
    出口参数:

    (5)、功能04H

    功能描述:读取日期
    入口参数:AH=04H
    出口参数:CH=BCD码格式的世纪
    CL=BCD码格式的年
    DH=BCD码格式的月
    DL=BCD码格式的日
    CF=0——时钟在走,否则,时钟停止

    (6)、功能05H

    功能描述:设置日期
    入口参数:AH=05H
    CH=BCD码格式的世纪
    CL=BCD码格式的年
    DH=BCD码格式的月
    DL=BCD码格式的日
    出口参数:

    (7)、功能06H

    功能描述:设置闹钟
    入口参数:AH=06H
    CH=BCD码格式的小时
    CL=BCD码格式的分钟
    DH=BCD码格式的秒
    出口参数:CF=0——操作成功,否则,闹钟已设置或时钟已停止

    (8)、功能07H

    功能描述:闹钟复位
    入口参数:AH=07H
    出口参数:

    (9)、功能0AH

    功能描述:读取天数计数,仅在PS/2有效,在此从略

    (10)、功能0BH

    功能描述:设置天数计数,仅在PS/2有效,在此从略

    (11)、功能80H

    功能描述:设置声音源信息
    入口参数:
    AH=80H
    AL=声音源
    =00H——8253可编程计时器,通道2
    =01H——盒式磁带输入
    =02H——I/O通道上的"Audio In"
    =03H——声音产生芯片
    出口参数:

    8、直接系统服务(Direct System Service)

    INT 00H —“0”作除数
    INT 01H —单步中断
    INT 02H —非屏蔽中断(NMI)
    INT 03H —断点中断
    INT 04H —算术溢出错误
    INT 05H —打印屏幕和BOUND越界
    INT 06H —非法指令错误
    INT 07H —处理器扩展无效
    INT 08H —时钟中断
    INT 09H —键盘输入
    INT 0BH —通信口(COM2:)
    INT 0CH —通信口(COM1:)
    INT 0EH —磁盘驱动器输入/输出
    INT 11H —读取设备配置
    INT 12H —读取常规内存大小(返回值AX为内存容量,以K为单位)
    INT 18H —ROM BASIC
    INT 19H —重启动系统
    INT 1BH —CTRL+BREAK处理程序
    INT 1CH —用户时钟服务
    INT 1DH —指向显示器参数表指针
    INT 1EH —指向磁盘驱动器参数表指针
    INT 1FH —指向图形字符模式表指针

    更多相关内容
  • STC目前所有系列的中断列表

    千次阅读 2022-04-22 10:42:36
    STC目前所有系列的中断列表

    STC目前所有系列的中断列表


    STC目前所有系列的中断列表
    中断号中断向量中断类型
    00003 HINT0
    1000B H定时器0
    20013 HINT1
    3001B H定时器1
    40023 H串口1
    5002B HADC
    60033 HLVD
    7003B HPCA
    80043 H串口2
    9004B HSPI
    100053 HINT2
    11005B HINT3
    120063 H定时器2
    13006B H
    140073 H系统内部中断
    15007B H系统内部中断
    160083 HINT4
    17008B H串口 3
    180093 H串口 4
    19009B H定时器 3
    2000A3 H定时器 4
    2100AB H比较器
    2200B3 H波形发生器 0
    2300BB H波形发生器异常 0
    2400C3 HI2C
    2500CB HUSB
    2600D3 HPWM1
    2700DB HPWM2
    2800E3 H波形发生器 1
    2900EB H波形发生器 2
    3000F3 H波形发生器 3
    3100FB H波形发生器 4
    320103 H波形发生器 5
    33010B H波形发生器异常 2
    340113 H波形发生器异常 4
    35011B H触摸按键
    360123 HRTC
    37012B HP0 口中断
    380133 HP1 口中断
    39013B HP2 口中断
    400143 HP3 口中断
    41014B HP4 口中断
    420153 HP5 口中断
    43015B HP6 口中断
    440163 HP7 口中断
    45016B HP8 口中断
    460173 HP9 口中断

    分享excel表格文档

    【金山文档】 STC系列单片机寄存器和中断号
    https://kdocs.cn/l/cuECB819EB1s
    

    在这里插入图片描述

    展开全文
  • 文档为BIOS和DOS中断详细列表和说明。中断号从00-FF共256个中断的详细说明。英文版,共117页。
  • Linux 中断 —— GIC (中断号映射)

    千次阅读 2019-05-28 00:05:18
    在linux kernel中,我们使用下面两个ID来标识一个来自外设的中断: 1、IRQ number。CPU需要为每一个外设中断编号,我们称之IRQ Number。这个IRQ number是一个虚拟的interrupt ID,和硬件无关,仅仅是被CPU用来标识...

    一、概述

    在linux kernel中,我们使用下面两个ID来标识一个来自外设的中断:

    1、IRQ number。CPU需要为每一个外设中断编号,我们称之IRQ Number。这个IRQ number是一个虚拟的interrupt ID,和硬件无关,仅仅是被CPU用来标识一个外设中断

    2、HW interrupt ID。对于interrupt controller而言,它收集了多个外设的interrupt request line并向上传递,因此,interrupt controller需要对外设中断进行编码。Interrupt controller用HW interrupt ID来标识外设的中断。在interrupt controller级联的情况下,仅仅用HW interrupt ID已经不能唯一标识一个外设中断,还需要知道该HW interrupt ID所属的interrupt controller(HW interrupt ID在不同的Interrupt controller上是会重复编码的)。

    这样,CPU和interrupt controller在标识中断上就有了一些不同的概念,但是,对于驱动工程师而言,我们和CPU视角是一样的,我们只希望得到一个IRQ number,而不关系具体是那个interrupt controller上的那个HW interrupt ID。这样一个好处是在中断相关的硬件发生变化的时候,驱动软件不需要修改。因此,linux kernel中的中断子系统需要提供一个将HW interrupt ID映射到IRQ number上来的机制。

     

    二、历史

    关于HW interrupt ID映射到IRQ number上 这事,在过去系统只有一个interrupt controller的时候还是很简单的,中断控制器上实际的HW interrupt line的编号可以直接变成IRQ number。例如我们大家都熟悉的SOC内嵌的interrupt controller,这种controller多半有中断状态寄存器,这个寄存器可能有64个bit(也可能更多),每个bit就是一个IRQ number,可以直接进行映射。这时候,GPIO的中断在中断控制器的状态寄存器中只有一个bit,因此所有的GPIO中断只有一个IRQ number,在该通用GPIO中断的irq handler中进行deduplex,将各个具体的GPIO中断映射到其相应的IRQ number上。如果你是一个足够老的工程师,应该是经历过这个阶段的。

    随着linux kernel的发展,将interrupt controller抽象成irqchip这个概念越来越流行,甚至GPIO controller也可以被看出一个interrupt controller chip,这样,系统中至少有两个中断控制器了,一个传统意义的中断控制器,一个是GPIO controller type的中断控制器。随着系统复杂度加大,外设中断数据增加,实际上系统可以需要多个中断控制器进行级联,面对这样的趋势,linux kernel工程师如何应对?答案就是irq domain这个概念。

    我们听说过很多的domain,power domain,clock domain等等,所谓domain,就是领域,范围的意思,也就是说,任何的定义出了这个范围就没有意义了。系统中所有的interrupt controller会形成树状结构,对于每个interrupt controller都可以连接若干个外设的中断请求(我们称之interrupt source),interrupt controller会对连接其上的interrupt source(根据其在Interrupt controller中物理特性)进行编号(也就是HW interrupt ID了)。但这个编号仅仅限制在本interrupt controller范围内。

     

    三、接口

    1、向系统注册irq domain

    具体如何进行映射是interrupt controller自己的事情,不过,有软件架构思想的工程师更愿意对形形色色的interrupt controller进行抽象,对如何进行HW interrupt ID到IRQ number映射关系上进行进一步的抽象。因此,通用中断处理模块中有一个irq domain的子模块,该模块将这种映射关系分成了三类:

    (1)线性映射。其实就是一个lookup tableHW interrupt ID 作为 index,通过查表可以获取对应的IRQ number。对于Linear map而言,interrupt controller对其HW interrupt ID进行编码的时候要满足一定的条件:hw ID不能过大,而且ID排列最好是紧密的。对于线性映射,其接口API如下:

    static inline struct irq_domain *irq_domain_add_linear(struct device_node *of_node, 
                         unsigned int size,---------该interrupt domain支持多少IRQ 
                         const struct irq_domain_ops *ops,---callback函数 
                         void *host_data)-----driver私有数据 
    { 
        return __irq_domain_add(of_node, size, size, 0, ops, host_data); 
    }

    (2)Radix Tree map。建立一个Radix Tree来维护HW interrupt ID到IRQ number映射关系。HW interrupt ID作为lookup key,在Radix Tree检索到IRQ number。如果的确不能满足线性映射的条件,可以考虑Radix Tree map。实际上,内核中使用Radix Tree map的只有powerPC和MIPS的硬件平台。对于Radix Tree map,其接口API如下:

    static inline struct irq_domain *irq_domain_add_tree(struct device_node *of_node, 
                         const struct irq_domain_ops *ops, 
                         void *host_data) 
    { 
        return __irq_domain_add(of_node, 0, ~0, 0, ops, host_data); 
    }

    (3)no map。有些中断控制器很强,可以通过寄存器配置HW interrupt ID而不是由物理连接决定的。例如PowerPC 系统使用的MPIC (Multi-Processor Interrupt Controller)。在这种情况下,不需要进行映射,我们直接把IRQ number写入HW interrupt ID配置寄存器就OK了,这时候,生成的HW interrupt ID就是IRQ number,也就不需要进行mapping了。对于这种类型的映射,其接口API如下:

    static inline struct irq_domain *irq_domain_add_nomap(struct device_node *of_node, 
                         unsigned int max_irq, 
                         const struct irq_domain_ops *ops, 
                         void *host_data) 
    { 
        return __irq_domain_add(of_node, 0, max_irq, max_irq, ops, host_data); 
    }

    这类接口的逻辑很简单,根据自己的映射类型,初始化struct irq_domain中的各个成员,调用__irq_domain_add将该irq domain挂入irq_domain_list的全局列表。

     

    2、为irq domain创建映射

    上节的内容主要是向系统注册一个irq domain,具体HW interrupt ID和IRQ number的映射关系都是空的,因此,具体各个irq domain如何管理映射所需要的database还是需要建立的。例如:对于线性映射的irq domain,我们需要建立线性映射的lookup table,对于Radix Tree map,我们要把那个反应IRQ number和HW interrupt ID的Radix tree建立起来。创建映射有四个接口函数:

    (1)调用irq_create_mapping函数建立HW interrupt ID和IRQ number的映射关系。该接口函数以irq domain和HW interrupt ID为参数,返回IRQ number(这个IRQ number是动态分配的)。该函数的原型定义如下:

    extern unsigned int irq_create_mapping(struct irq_domain *host, 
                           irq_hw_number_t hwirq);

    驱动调用该函数的时候必须提供HW interrupt ID,也就是意味着driver知道自己使用的HW interrupt ID,而一般情况下,HW interrupt ID其实对具体的driver应该是不可见的,不过有些场景比较特殊,例如GPIO类型的中断,它的HW interrupt ID和GPIO有着特定的关系,driver知道自己使用那个GPIO,也就是知道使用哪一个HW interrupt ID了。

    (2)irq_create_strict_mappings。这个接口函数用来为一组HW interrupt ID建立映射。具体函数的原型定义如下:

    extern int irq_create_strict_mappings(struct irq_domain *domain, 
                          unsigned int irq_base, 
                          irq_hw_number_t hwirq_base, int count);

    (3)irq_create_of_mapping。看到函数名字中的of(open firmware),我想你也可以猜到了几分,这个接口当然是利用device tree进行映射关系的建立。具体函数的原型定义如下:

    extern unsigned int irq_create_of_mapping(struct of_phandle_args *irq_data);

    通常,一个普通设备的device tree node已经描述了足够的中断信息,在这种情况下,该设备的驱动在初始化的时候可以调用irq_of_parse_and_map这个接口函数进行该device node中和中断相关的内容(interrupts和interrupt-parent属性)进行分析,并建立映射关系,具体代码如下:

    unsigned int irq_of_parse_and_map(struct device_node *dev, int index) 
    { 
        struct of_phandle_args oirq;
    
        if (of_irq_parse_one(dev, index, &oirq))----分析device node中的interrupt相关属性 
            return 0;
    
        return irq_create_of_mapping(&oirq);-----创建映射,并返回对应的IRQ number 
    }

    对于一个使用Device tree的普通驱动程序(我们推荐这样做),基本上初始化需要调用irq_of_parse_and_map获取IRQ number,然后调用request_threaded_irq申请中断handler。

    (4)irq_create_direct_mapping。这是给no map那种类型的interrupt controller使用的,这里不再赘述。

     

    四、数据结构描述

    1、irq domain的callback接口

    struct irq_domain_ops抽象了一个irq domain的callback函数,定义如下

    struct irq_domain_ops { 
        int (*match)(struct irq_domain *d, struct device_node *node); 
        int (*map)(struct irq_domain *d, unsigned int virq, irq_hw_number_t hw); 
        void (*unmap)(struct irq_domain *d, unsigned int virq); 
        int (*xlate)(struct irq_domain *d, struct device_node *node, 
                 const u32 *intspec, unsigned int intsize, 
                 unsigned long *out_hwirq, unsigned int *out_type); 
    };

    我们先看xlate函数,语义是翻译(translate)的意思,那么到底翻译什么呢?在DTS文件中,各个使用中断的device node会通过一些属性(例如interrupts和interrupt-parent属性)来提供中断信息给kernel以便kernel可以正确的进行driver的初始化动作。这里,interrupts属性所表示的interrupt specifier只能由具体的interrupt controller(也就是irq domain)来解析。而xlate函数就是将指定的设备(node参数)上若干个(intsize参数)中断属性(intspec参数)翻译成HW interrupt ID(out_hwirq参数)和trigger类型(out_type)

    match是判断一个指定的interrupt controller(node参数)是否和一个irq domain匹配(d参数),如果匹配的话,返回1。实际上,内核中很少定义这个callback函数,实际上struct irq_domain中有一个of_node指向了对应的interrupt controller的device node,因此,如果不提供该函数,那么default的匹配函数其实就是判断irq domain的of_node成员是否等于传入的node参数。

    map和unmap是操作相反的函数,我们描述其中之一就OK了。调用map函数的时机是在创建(或者更新)HW interrupt ID(hw参数)和IRQ number(virq参数)关系的时候。其实,从发生一个中断到调用该中断的handler仅仅调用一个request_threaded_irq是不够的,还需要针对该irq number设定:

    (1)设定该IRQ number对应的中断描述符(struct irq_desc)的irq chip

    (2)设定该IRQ number对应的中断描述符的highlevel irq-events handler

    (3)设定该IRQ number对应的中断描述符的 irq chip data

    这些设定不适合由具体的硬件驱动来设定,因此在Interrupt controller,也就是irq domain的callback函数中设定。

    2、irq domain

    在内核中,irq domain的概念由struct irq_domain表示:

    struct irq_domain { 
        struct list_head link; 
        const char *name; 
        const struct irq_domain_ops *ops; ----callback函数 
        void *host_data;
    
        /* Optional data */ 
        struct device_node *of_node; ----该interrupt domain对应的interrupt controller的device node 
        struct irq_domain_chip_generic *gc; ---generic irq chip的概念,本文暂不描述
    
        /* reverse map data. The linear map gets appended to the irq_domain */ 
        irq_hw_number_t hwirq_max; ----该domain中最大的那个HW interrupt ID 
        unsigned int revmap_direct_max_irq; ---- 
        unsigned int revmap_size; ---线性映射的size,for Radix Tree map和no map,该值等于0 
        struct radix_tree_root revmap_tree; ----Radix Tree map使用到的radix tree root node 
        unsigned int linear_revmap[]; -----线性映射使用的lookup table 
    };

    linux内核中,所有的irq domain被挂入一个全局链表,链表头定义如下:

    static LIST_HEAD(irq_domain_list);

    struct irq_domain中的link成员就是挂入这个队列的节点。通过irq_domain_list这个指针,可以获取整个系统中HW interrupt ID和IRQ number的mapping DB。host_data定义了底层interrupt controller使用的私有数据,和具体的interrupt controller相关(对于GIC,该指针指向一个struct gic_chip_data数据结构)。

    对于线性映射:

    (1)linear_revmap保存了一个线性的lookup table,index是HW interrupt ID,table中保存了IRQ number值

    (2)revmap_size等于线性的lookup table的size。

    (3)hwirq_max保存了最大的HW interrupt ID

    (4)revmap_direct_max_irq没有用,设定为0。revmap_tree没有用。

    对于Radix Tree map:

    (1)linear_revmap没有用,revmap_size等于0。

    (2)hwirq_max没有用,设定为一个最大值。

    (3)revmap_direct_max_irq没有用,设定为0。

    (4)revmap_tree指向Radix tree的root node。

     

    五、中断相关的Device Tree知识回顾

    想要进行映射,首先要了解interrupt controller的拓扑结构。系统中的interrupt controller的拓扑结构以及其interrupt request line的分配情况(分配给哪一个具体的外设)都在Device Tree Source文件中通过下面的属性给出了描述。这些内容在Device Tree的三份文档中给出了一些描述,这里简单总结一下:

    对于那些产生中断的外设,我们需要定义interrupt-parent和interrupts属性:

    (1)interrupt-parent。表明该外设的interrupt request line物理的连接到了哪一个中断控制器上

    (2)interrupts。这个属性描述了具体该外设产生的interrupt的细节信息(也就是传说中的interrupt specifier)。例如:HW interrupt ID(由该外设的device node中的interrupt-parent指向的interrupt controller解析)、interrupt触发类型等。

    对于Interrupt controller,我们需要定义interrupt-controller和#interrupt-cells的属性:

    (1)interrupt-controller。表明该device node就是一个中断控制器

    (2)#interrupt-cells。该中断控制器用多少个cell(一个cell就是一个32-bit的单元)描述一个外设的interrupt request line。?具体每个cell表示什么样的含义由interrupt controller自己定义。

    (3)interrupts和interrupt-parent。对于那些不是root 的interrupt controller,其本身也是作为一个产生中断的外设连接到其他的interrupt controller上,因此也需要定义interrupts和interrupt-parent的属性。

     

    六、Mapping DB的建立

    1、概述

    系统中HW interrupt ID和IRQ number的mapping DB是在整个系统初始化的过程中建立起来的,过程如下:

    (1)DTS文件描述了系统中的interrupt controller以及外设IRQ的拓扑结构,在linux kernel启动的时候,由bootloader传递给kernel(实际传递的是DTB)。

    (2)在Device Tree初始化的时候,形成了系统内所有的device node的树状结构,当然其中包括所有和中断拓扑相关的数据结构(所有的interrupt controller的node和使用中断的外设node)

    (3)在machine driver初始化的时候会调用of_irq_init函数,在该函数中会扫描所有interrupt controller的节点,并调用适合的interrupt controller driver进行初始化。毫无疑问,初始化需要注意顺序,首先初始化root,然后first level,second level,最好是leaf node。在初始化的过程中,一般会调用上节中的接口函数向系统增加irq domain。有些interrupt controller会在其driver初始化的过程中创建映射

    (4)在各个driver初始化的过程中,创建映射

     

    2、 interrupt controller初始化的过程中,注册 irq_domain

    我们以GIC的代码为例。具体代码在gic_of_init->gic_init_bases中,如下:

    void __init gic_init_bases(unsigned int gic_nr, int irq_start, 
                   void __iomem *dist_base, void __iomem *cpu_base, 
                   u32 percpu_offset, struct device_node *node) 
    { 
        irq_hw_number_t hwirq_base; 
        struct gic_chip_data *gic; 
        int gic_irqs, irq_base, i;
    
    …… 
    对于root GIC 
            hwirq_base = 16; 
            gic_irqs = 系统支持的所有的中断数目-16。
    之所以减去16主要是因为root GIC的0~15号HW interrupt 是for IPI的,因此要去掉。
    也正因为如此hwirq_base从16开始
    
    
        irq_base = irq_alloc_descs(irq_start, 16, gic_irqs, numa_node_id());
    申请gic_irqs个IRQ资源,从16号开始搜索IRQ number。由于是root GIC,申请的IRQ基本上会从16号开始
    
    
        gic->domain = irq_domain_add_legacy(node, gic_irqs, irq_base, 
                        hwirq_base, &gic_irq_domain_ops, gic);---向系统注册irq domain并创建映射
    
    …… 
    }

    3、在各个硬件外设的驱动初始化过程中,创建HW interrupt ID和IRQ number的映射关系

    我们上面的描述过程中,已经提及:设备的驱动在初始化的时候可以调用irq_of_parse_and_map这个接口函数进行该device node中和中断相关的内容(interrupts和interrupt-parent属性)进行分析,并建立映射关系,具体代码如下:

    unsigned int irq_of_parse_and_map(struct device_node *dev, int index) 
    { 
        struct of_phandle_args oirq;
    
        if (of_irq_parse_one(dev, index, &oirq))----分析device node中的interrupt相关属性 
            return 0;
    
        return irq_create_of_mapping(&oirq);-----创建映射 
    }

    我们再来看看irq_create_of_mapping函数如何创建映射:

    unsigned int irq_create_of_mapping(struct of_phandle_args *irq_data) 
    { 
        struct irq_domain *domain; 
        irq_hw_number_t hwirq; 
        unsigned int type = IRQ_TYPE_NONE; 
        unsigned int virq;
    
        domain = irq_data->np ? irq_find_host(irq_data->np) : irq_default_domain;--A 
        if (!domain) { 
            return 0; 
        }
    
    
        if (domain->ops->xlate == NULL)--------------B 
            hwirq = irq_data->args[0]; 
        else { 
            if (domain->ops->xlate(domain, irq_data->np, irq_data->args,----C 
                        irq_data->args_count, &hwirq, &type)) 
                return 0; 
        }
    
        /* Create mapping */ 
        virq = irq_create_mapping(domain, hwirq);--------D 
        if (!virq) 
            return virq;
    
        /* Set type if specified and different than the current one */ 
        if (type != IRQ_TYPE_NONE && 
            type != irq_get_trigger_type(virq)) 
            irq_set_irq_type(virq, type);---------E 
        return virq; 
    }

    A:这里的代码主要是找到irq domain。这是根据传递进来的参数irq_data的np成员来寻找的

    struct of_phandle_args { 
        struct device_node *np;---指向了外设对应的interrupt controller的device node 
        int args_count;-------该外设定义的interrupt相关属性的个数 
        uint32_t args[MAX_PHANDLE_ARGS];----具体的interrupt相当属性的定义 
    };

    B:如果没有定义xlate函数,那么取interrupts属性的第一个cell作为HW interrupt ID。

    C:解铃还需系铃人,interrupts属性最好由interrupt controller(也就是irq domain)解释。如果xlate函数能够完成属性解析,那么将输出参数hwirq和type,分别表示HW interrupt ID和interupt type(触发方式等)

    D:解析完了,最终还是要调用 irq_create_mapping 函数来创建HW interrupt ID和IRQ number的映射关系

    E:如果有需要,调用irq_set_irq_type函数设定trigger type

    irq_create_mapping 函数建立HW interrupt ID和IRQ number的映射关系。该接口函数以irq domain和HW interrupt ID为参数,返回IRQ number。具体的代码如下:

    unsigned int irq_create_mapping(struct irq_domain *domain, 
                    irq_hw_number_t hwirq) 
    { 
        unsigned int hint; 
        int virq;
    
    如果映射已经存在,那么不需要映射,直接返回 
        virq = irq_find_mapping(domain, hwirq); 
        if (virq) { 
            return virq; 
        }
    
    
        hint = hwirq % nr_irqs;-------分配一个IRQ 描述符以及对应的irq number 
        if (hint == 0) 
            hint++; 
        virq = irq_alloc_desc_from(hint, of_node_to_nid(domain->of_node)); 
        if (virq <= 0) 
            virq = irq_alloc_desc_from(1, of_node_to_nid(domain->of_node)); 
        if (virq <= 0) { 
            pr_debug("-> virq allocation failed\n"); 
            return 0; 
        }
    
        if (irq_domain_associate(domain, virq, hwirq)) {---建立mapping 
            irq_free_desc(virq); 
            return 0; 
        }
    
        return virq; 
    }

    对于分配中断描述符这段代码,后续的文章会详细描述。这里简单略过,反正,指向完这段代码,我们就可以或者一个IRQ number以及其对应的中断描述符了。程序注释中没有使用IRQ number而是使用了virtual interrupt number这个术语。virtual interrupt number还是重点理解“virtual”这个词,所谓virtual,其实就是说和具体的硬件连接没有关系了,仅仅是一个number而已。具体建立映射的函数是irq_domain_associate函数,代码如下:

    int irq_domain_associate(struct irq_domain *domain, unsigned int virq, 
                 irq_hw_number_t hwirq) 
    { 
        struct irq_data *irq_data = irq_get_irq_data(virq); 
        int ret;
    
        mutex_lock(&irq_domain_mutex); 
        irq_data->hwirq = hwirq; 
        irq_data->domain = domain; 
        if (domain->ops->map) { 
            ret = domain->ops->map(domain, virq, hwirq);---调用irq domain的map callback函数 
        }
    
        if (hwirq < domain->revmap_size) { 
            domain->linear_revmap[hwirq] = virq;----填写线性映射lookup table的数据 
        } else { 
            mutex_lock(&revmap_trees_mutex); 
            radix_tree_insert(&domain->revmap_tree, hwirq, irq_data);--向radix tree插入一个node 
            mutex_unlock(&revmap_trees_mutex); 
        } 
        mutex_unlock(&irq_domain_mutex);
    
        irq_clear_status_flags(virq, IRQ_NOREQUEST); ---该IRQ已经可以申请了,因此clear相关flag
    
        return 0; 
    }

     

    参考文献 & 鸣谢:

    http://www.wowotech.net/linux_kenrel/irq-domain.html

     

    展开全文
  • zynq-7000中断系统使用说明,包括中断数目,优先级,中断寄存器等
  • 改变0号中断程序的功能,重新编写一个0号中断程序,它的功能是在屏幕中间显示“overflow!”。 一、什么叫中断,什么叫0号中断? 任何一个通用CPU,可以在执行完当前正在执行的指令之后,检测到CPU外部发送过来的...

    ——王爽 《汇编语言(第3版)》实验12 清华大学出版社

    案例:
    改变0号中断程序的功能,重新编写一个0号中断程序,它的功能是在屏幕中间显示“overflow!”。

    一、什么叫中断,什么叫0号中断?

    任何一个通用CPU,可以在执行完当前正在执行的指令之后,检测到CPU外部发送过来的(外中断)或者内部产生的(内中断)一种特殊信息,并且可以对所接收的信息进行处理,这种特殊的信息,叫做中断信息

    什么情况的发生会产生中断信息?
    (1)除法溢出,比如,执行div指令产生的除法溢出。
    (2)单步执行。
    (3)执行into指令。
    (4)执行int指令。

    下面引入中断类型码的概念:
    CPU要对这4种情况可以产生需要及时处理的中断信息进行不同的处理,就要知道这四种中断信息的来源。中断类型码用来标识中断信息的来源。
    上面4种中断源对应的中断类型码:
    (1)除法溢出 0
    (2)单步执行 1
    (3)执行info指令 4
    (4)int指令 int指令后面跟的n就是中断类型码

    0号中断,就是中断类型码为0的中断,就是除法溢出中断。

    二、关于除法溢出的解释

    div指令:除法指令。
    在这里插入图片描述
    什么叫除法溢出?分为两种情况:
    (1)除数为0,会发生溢出。
    (2)商的精度损失:
         (2.1)如果除数是字(16位),则被除数(32位)存在dx和ax里,(除后商存在ax里,余数存在dx里)如果除后商大于一个字,就会产生精度损失溢出。范围65535。
        (2.2)如果除数是字节(8位),则被除数(16位)存在ax里,(除后商存在al里,余数存在ah里)如果除后商大于一个字节,就会产生精度损失溢出。范围255。

    三、中断过程及中断向量表

    8086CPU在收到中断信息后,引发的中断过程:
    (1)(从中断信息中)获得中断类型码。
    (2)标志寄存器的值入栈。因为在中断过程中要改变标志寄存器的值,先保存。
    (3)设置标志寄存器的第8位TF和第9位IF的值为0。
    (4)CS的内容入栈。
    (5)IP的值入栈
    (6)从内存地址为中断类型码*4中断类型码*4+2的两个字单元中读取中断处理程序的入口地址设置IP和CS。

    简洁描述中断过程:
    (1)取得中断类型码N
    (2)pushf
    (3)TF=0,IF=0
    (4)push CS
    (5)push IP
    (6)(IP)=(N4),(CS)=(N4+2)

    中断向量表:用来处理程序入口地址的列表。
    中断向量表在内存中保存,其中存放着256个中断源所对应的中断处理程序的入口。8086支持256个中断,但系统要处理的中断事件远没有256个。故在中断向量表中,许多单元是空的。内存单元:0000:0000 ~ 0000:03FF1024个单元。每个表项占两个字,高地址字存放段地址,低地址字存放偏移地址

    iret指令,中断返回指令,描述:
    (1)pop ip
    (2)pop cs
    (3)popf

    四、案例分析

    案例:
    改变0号中断程序的功能,重新编写一个0号中断程序,它的功能是在屏幕中间显示“overflow!”。

    分析:
    0号中断程序,即除法溢出。编程实现:当发生除法溢出,屏幕中央输出“overflow!”,返回DOS。
    (1)当发生除法溢出时,产生0号中断信息,从而引发中断过程。
        a.取得中断地址码0
        b.标志寄存器入栈,TF、IF设置为0
        c.CS、IP入栈
        d.(IP)=(0 * 4),(CS)=(0 * 4+2)
    (2)当中断0发生时,CPU将转去执行中断处理程序
        a.相关处理
        b.向显示缓冲区送字符串“overflow!”
        c.返回DOS
    (3)现在的问题是,do0应存放在内存中。因为除法溢出随时都可能发生,CPU随时都可能将CS:IP指向do0的入口,执行程序。只需要找到一块别的不会用到的内存区,把do0传送到其中,而中断向量表(0000:0000~0000:03FF)有许多空的单元。【可以将do0传送到内存0000:0200处
    为什么是这个空间?因为这个空间是中断向量表为空的部分。一般来说,中断向量表的0000:0200~0000:02FF都是空的。
    (4)将中断处理程序do0放到0000:0200后,若要使除法溢出时,CPU转去执行do0,就必须将do0的入口地址(0000:0200) 登记在中断向量表对应的表项中。
    中断向量表的对应表项:
    段地址:0 * 4+2
    偏移地址:0 *4
    也就是要将do0的段地址0存放在0000:0002字单元中,偏移地址200H存放在0000:0000字单元中

    总结:
    1.编写可以显示“overflow!”的中断处理程序:do0;
    2.将do0送入内存0000:0200中;
    3.把do0的入口地址0000:0200存在中断向量表0号表项中。

    第一步:

    assume cs:code
    code segment
    	start:do0安装程序
    	设置中断向量表
    	mov ax,4c00h
    	int 21h 
        do0: 显示字符串“overflow!”
        	mov ax,4c00h
        	int 21h
    code ends
    end start

    说明:
    1.程序执行时被加载到内存中,此时do0的代码在程序所在的内存空间中,它只是放在程序的代码段中的一段要被传送到其他单元的数据,此时我们不能说它是0号中断的中断处理程序
    2.程序中安装do0的代码执行完后,do0的代码被从程序的代码段中复制到0:200处,此时它只不过是放在0:200处的一些数据,我们也不能说它是0号中断的中断处理程序
    3.程序中设置中断向量表的代码执行完毕后,在0号表项中填入了do0的入口地址0:200,此时0:200处的信息,即do0的代码,就变成了0号中断的中断处理程序。此时,当0号中断发出时,CPU将执行0:200处的代码。

    可以 使用movsb指令,将do0的代码送入0:200处,

    第二步:do0安装程序。(将do0处的代码复制到0:200处,使用movsb)
    使用rep movsb:
    1.目的地址es:di 0:200
    2.源地址ds:si cs:offset do0
    3.传输长度cx do0(传输长度就是代码部分长度)
    4.传输方向:cld正向,std负向。 (cld)

    assume cs:code
    code segment
    	start:  设置es:di指向目的地址
    		设置ds:si指向源地址
    		设置cx为传输长度
    		设置传输方向为正
    		rep movsb		
    
    		设置中断向量表
    
    		mov ax,4c00h
    		int 21h
    
    	d0:	显示字符串“overflow!”
    		mov ax,4c00h
    		int 21h
    code ends
    end start	

    代码实现:

    assume cs:code
    code segment
    	start:	mov ax,cs
    		mov ds,ax
    		mov si,offset do0	;设置ds:si指向源地址
    
    		mov ax,0
    		mov es,ax
    		mov di,200h		;设置es:di指向目的地址
    
    		mov cx,do0部分代码长度	;设置cx为传输长度
    		cld			;设置传输方向为正
    		rep movsb
    
    		设置中断向量表
    
    		mov ax,4c00h
    		int 21h
    
    	do0:	显示字符串“overflow!”
    		mov ax,4c00h
    		int 21h
    code ends		
    end start

    问题:怎么计算do0的长度?
    可以利用编译器来计算do0的长度,
    offset do0end-offset do0
    do0end nop
    (-是用来表示两个常数的减法的)

    assume cs:code
    code segment
    	start:	mov ax,cs
    		mov ds,ax	
    		mov si,offset do0	;设置ds:si指向源地址
    
    		mov ax,0
    		mov es,ax
    		mov di,200h		;设置es:di指向目的地址
    
    		mov cx,offset do0end-offset do0		;设置cx为传输长度
    		cld			;正向传输方向
    		rep movsb
    
    		设置中断向量表
    		mov ax,4c00h
    		int 21h
    
    	do0:	显示字符串“overflow!”
    		mov ax,4c00h
    		int 21h
    do0end:	nop
    code segment		
    end start

    第三步:do0程序,主要任务是显示字符串
    注意:“overflow!”不能再data段用db定义,因为如果在data段定义,程序执行完后会直接返回,它所占的内存空间将被系统释放,其中存放的“overflow!”也将被其他信息覆盖。即使do0被放在了0:200处,随时会因为除法溢出而被CPU执行,但本该取出的“overflow!”很可能会被其他信息覆盖。

    assume cs:code
    code segment
    	start:	mov ax,cs
    		mov ds,ax
    		mov si,offset do0	;ds:si指向源地址
    
    		mov ax,0
    		mov es,0
    		mov di,200h		;es:di指向目标地址
    
    		mov cx offset do0end-offset do0		;设置cx为传输长度
    		cld
    		rep movsb
    
    		设置中断向量表
    		mov ax,4c00h
    		int 21h
    
    	do0:	jmp short do0start
    		db  'overflow!'
       do0start:	mov ax,cs
       		mov ds,ax
       		mov si,202h	;设置ds:si指向字符串
    
    		mov ax,0b800h
    		mov es,ax
    		mov di,12*160+36*2	;设置es:di指向显存空间的中间位置
    		
    		mov cx,9		;设置cx为字符串长度
    	s:	mov al,[si]
    		mov es:di,al
    		inc si
    		add di,2
    		loop s
    
    		mov ax,4c00h
    		int 21h
    do0end:	nop
    code ends
    end start
    

    问题1:jmp short do0start 的作用:
    因为在程序开始的“overflow!”不是可以指向的代码,所以在“overflow!”之前加上一条jmp的指令,转移到正式的do0程序。当除法发生溢出时,CPU执行0:200处的jmp指令,跳过后面的字符串,转到正式的do0处执行。

    问题2:“overflow!”存在哪?
    段地址:“overflow!”和do0的代码处于同一段中,当除法发生溢出时,CS中必然存放着do0和段地址,也就是“overflow!”的段地址。
    偏移地址0:200处的指令为jmp short do0start,这条指令占两个字节,所以“overflow!”的偏移地址为202h

    第四步:设置中断向量表
    作用:将do0的入口地址0:200,写入中断向量表的0号表项中,使do0成为0号中断的中断处理程序。(0号表项的地址为0:0,其中0:0单元存放偏移地址,0:2单元存放段地址)

    mov	word ptr es:[0*4],200h
    mov	word ptr es:[0*4+2],0

    五、代码

    assume cs:code
    code segment
    	start:	mov ax,cs
    		mov ds,ax
    		mov si,offset do0
    		mov ax,0
    		mov es,ax
    		mov di,200h
    		mov cx,offset do0end-offset do0
    		cld
    		rep movsb
    		mov word ptr es:[0*4],200h
    		mov word ptr es:[0*4+2],0
    
    	do0:	jmp short do0start
    		db  'overflow!'
    	
       do0start:	mov ax,cs
       		mov ds,ax
       		mov si,202h
    
    		mov ax,0b800h
    		mov es,ax
    		mov di,12*160+36*2
    		
    		mov cx,9
    	s:	mov al,[si]
    		mov es:[di],al
    		inc si
    		add di,2
    		loop s
    
    		mov ax,4c00h
    		int 21h
    do0end:nop
    code ends
    end start
    展开全文
  • ![图片说明]... 我替换了0号中断 我想在除法错误的情况后 再返回回去 可是出现这种情况 求解 ![图片说明](https://img-ask.csdn.net/upload/201604/15/1460693669_264918.png)
  • 网卡与中断

    2020-05-25 20:10:24
    要是既想中断服务例程运行的快,又想中断例程完成的任务多,我们把中断处理成两部分执行。中断上半部:接收中断立即执行,但有严格的超时限制。中断下半部:允许稍后完成。(下半部只是将任务推迟一点,让...
  • 查看linux 中断

    千次阅读 2021-05-14 17:22:13
    这篇文章主要是介绍如何详细的查看linux软中断信息。涉及linux软中断原理部分请参考:http://book.51cto.com/art/200912/168622.htm一、利用sysstat 中的工具包mpstatps:图片是截取个人电脑,所以没什么压力:16时32...
  • linux下查看中断请求记录。通过cpu的中断请求的响应,可以看出cpu都在为哪些设备干活,干的活有多少量等信息。[~]$ cat /proc/interruptsCPU0 CPU1 CPU2 CPU30: 1383283707 0 0 0 IO-APIC-edge timer1: ...
  • Linux性能优化(十六)——中断绑定

    千次阅读 2022-02-20 15:39:11
    计算机中,中断是一种电信号,由硬件产生并直接送到中断控制器上,再由中断控制器向CPU发送中断信号,CPU检测到信号后,中断当前工作转而处理中断信号。CPU会通知操作系统已经产生中断,操作系统就会对中断进行处理...
  • 看了几天的ZYNQ,针对中断小生分享一些自己的理解 Zynq的PS是基于ARM架构,使用了两个Cortex-A9处理器(CPU)以及GIC pl390中断控制器(单核Zynq则只有一个GIC)。 1.系统框架 GIC是通用中断控制器(Generic ...
  • 文章目录1 中断1.1 中断控制器1.2 中断域1.3 中断控制器驱动初始化1.4 Linux中断处理1.5 中断线程化1.6 禁止/开启中断1.7 禁止/开启单个中断1.8 中断亲和性1.9 处理器间中断 重要:本系列文章内容摘自<Linux内核...
  • 中断向量表

    千次阅读 2021-01-21 13:34:06
    中断向量表(interrupt vector table,IVT)是中断源的识别标志,可...中断类型号和中断向量之间有下面的关系: 中断类型×4=存放中断向量的首地址 有了存放中断向量的首地址,从该地址开始的4个存储单元中取出的就
  • 以下例子,可以查找出中断的数字号码,并且不需要原始数据为唯一数值。同时还可以考虑修改成其他方式以满足通用的需求。 例子仅供大家参考,不是最好,但是提供的是一种思路。也可以考虑使用 函数直接返回列表。看...
  • Arduino中断

    千次阅读 2022-01-14 16:14:27
    attachInterrupt() 说明 attachInterrupt()函数是用于为Arduino开发板设置和执行ISR(中断服务程序)用的 ISR(中断服务程序)顾名思义就是中断Arduino当前...以下列表说明支持中断的引脚有哪些: Arduino控制板
  • ARM裸机篇(五)——异常和中断

    千次阅读 2022-04-20 18:42:31
    文章目录一、异常与中断的引入1.异常与中断的处理流程2.ARM处理器程序运行的过程3.程序被中断时,怎么保存现场二、ARM处理器模式和寄存器1.处理器模式2.寄存器2.1 协处理器三、Cortex-A7 中断
  • Linux驱动学习记录-12.Linuxgpio中断

    千次阅读 2021-10-22 16:28:00
    这里介绍imx6u的重点,配置寄存器,设置服务中断函数。...每个中断都有一个中断号,linux有一个int变量表示中断号。 1.申请中断 int request_irq( unsigned int irq, irq_handler_t handler, unsigned long fl
  • 1、中断概念 中断是处理器用于异步处理外围设备请求的一种机制,是操作系统中外围设备的基石,此外系统调度、核间交互等都是离不开中断的。 其概要分布图主要如下: 硬件层:对应具体的外设与soc的物理连接,中断...
  • 8.4-中断系统

    2022-03-29 22:47:26
    8.4-中断系统小结(cpu响应中断)_PacosonSWJTU的博客-CSDN博客_cpu响应中断的步骤【README】本文转自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐;【1】中断系统1)作用:用中断系统...
  • linux中断中断亲和性,IPI中断

    千次阅读 2020-09-16 16:43:18
    1.1 同步中断和异步中断 1.2 中断上下文 1.3 中断处理程序栈 1.4 中断处理程序的重入 1.5 中断的返回 2 顶半部和底半部(推后执行的工作) 2.1 简介 2.2 软中断 2.3 tasklet 2.4 工作队列 2.5 内核定时器 ...
  • 编写0号中断处理程序,使得在除法溢出时,在屏幕中间显示字符串'divide error!',然后返回dos。 前面讲到,内存0000:0000~0000:03FF,大小为1KB的空间是系统存放中断处理程序入口地址的中断向量表。8086支持256个...
  • 汇编各种中断

    千次阅读 2019-06-06 11:40:00
    BIOS中断:   1、显示服务(Video Service——INT 10H) 00H —设置显示器模式  01H —设置光标形状  02H —设置光标位置  03H —读取光标信息  04H —读取光笔位置  05H —设置显示页  06H、07H...
  • DOS中断大全

    千次阅读 2019-01-31 18:55:08
    DOS中断: 1、字符功能调用类(Character-Oriented Function) 01H、07H和08H —从标准输入设备输入字符 02H —字符输出 03H —辅助设备的输入 04H —辅助设备的输出 05H —打印输出 06H —控制台输入/输出 09H —...
  • 目录一、STM32F4的外部中断1. STM32F4的外部中断个数2. STM32F4中供IO口使用的外部中断 一、STM32F4的外部中断 1. STM32F4的外部中断个数 STM32F4的每个IO都可以作为外部中断输入 但并不是所有IO的中断可以同时打开...
  • 但如果此时发生了某一事件B请求CPU迅速去处理(中断发生),CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务). 待CPU将事件B处理完毕后, 再回到原来被中断的地方继续执行程序(中断返回),这一过程称为中断...
  • 本文所描述的为Cortex-A7中断系统 简述 中断是什么? 中断(Interrupt)是指处理器接收到来自硬件或软件的信号,提示发生了某个事件,应该被注意,这种情况就称为中断。 通常,在接收到来自外围硬件(相对于中央处理...
  • fpga中断流程梳理

    千次阅读 2021-06-20 13:43:50
    中断分为中断系统和中断源系统,因此两个系统都需要一定的配置。并且需要把中断源系统挂载到中断系统上去。 pl向ps发出中断请求 1.获取配置和初始化中断,此时初始化的是arm cpu的中断系统SGI,然后需要注册中断处理...
  • Arduino中的中断

    万次阅读 多人点赞 2019-04-13 22:14:55
    什么是中断中断(Interrupt)是一种在计算机中被广泛应用的一种重要的技术,它是一种CPU事件处理机制。其本身可以理解为一个信号,这个信号由某个硬件或软件产生并由处理器处理。当处理器接收到中断信号时会暂停...
  • 处理器控制指令与中断指令 1. 标志位操作指令 汇编格式 操作 作用 CLC CF = 0 清零 进位标志位 STC CF = 1 置1 进位标志位 CMC CF = !CF 取反 进位标志位 CLD DF = 0 清零 方向标志位 或 串操作从底...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 106,709
精华内容 42,683
关键字:

中断号列表