「这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战」。
概述
-
中断
顾名思义,程序运行到一半暂时断开,官方一点说就是,由于软件或者硬件信号,使得cpu暂停当前任务,转而执行另一段子程序
可以形象理解为游戏中暂时搁置主线任务临时去完成支线任务
中断的分类:
-
**外中断 (硬中断):**由外部设备(比如网卡,或者硬盘 键盘 鼠标)引发的中断,比如当网卡收到数据包的时候,就会发出一个中断
-
**内中断(软中断):**由执行的中断指令产生的,可以通过程序控制触发
我们接下来要学习的是内中断知识,如果我们想要通过代码发出一个中断,那么需要使用中断指令
int
int 21h ;执行中断码为21H的中断指令
cpu接收到中断信号后,暂停当前正在执行的指令,临时去执行中断码对应的内容
中断码不止一个,每个码代表着不同的含义,部分中断码列表如下:
中断 功能 入口参数 出口参数 INT16 键盘输入 AH=0H读键盘 AH=10读扩展键盘 AH=键盘扫描码 AL=字符ascii码 INT20 程序正常退出 CS=PSP段地址 INT21 系统功能调用 AH=功能号 INT22 程序结束处理 INT23 Ctrl-Break处理 AL=0(忽略) INT24 严重错误处理 AL=驱动器号 AL=1(重试)AL=2(通过INT 23H终止)Cy=1出错 INT25 绝对磁盘读 CX=读入扇区数DX=起始逻辑扇区数DS:BX=缓冲区地址AL=驱动器号 Cy=0正确 INT26 绝对磁盘写 CX=写盘扇区数DX=起始逻辑扇区数DS:BX=缓冲区地址 INT27 驻留退出 CS=PSP段地址DX=程序末地址+1 二、DOS功能调用
功能号在AH中,并设好其余的入口参数,向DOS发出INT21H命令,最后获得出口参数。
调用号 功能 入口参数 出口参数 00H 程序终止 CS=PSP段地址 01H 键盘输入字符 AL=输入的字符 02H 显示输出 DL=显示的字符 03H 串行设备输入 AL=输入的字符 04H 串行设备输出 DL=输出的字符 05H 打印输出 DL=输出的字符 06H 直接控制台I/O DL=0FFH(输入请求)DL=字符(输出请求) AL=输入的字符 07H 直接控制台I/O(不显示输入) AL=输入的字符 08H 键盘输入字符(无回显) AL=输入的字符 09H 显示字符串 DS:DX=缓冲区首址 0AH 输入字符串 DS:DX=缓冲区首址 0BH 检查标准输入状态 AL=00无按键AL=0FFH有按键 0CH 清除输入缓冲区并执行指定的标准输入功能 AL=功能号(01/06/07/08/0AH)DS:DX=缓冲区(0AH功能) AL=输入的数据(功能01/06/07/08) 0DH 初始化磁盘状态 0EH 选择缺省的驱动器 DL=驱动器号(0=A,1=B..) AL=逻辑驱动器数 0FH 打开文件 DS:DX=未打开的FCB首址 AL=00成功,0FFH失败 10H 关闭文件 DS:DX=打开的FCB首址 AL=00成功,0FFH失败 11H 查找第一匹配目录 DS:DX=未打开的FCB首址 AL=00成功,0FFH失败 12H 查找下一匹配目录 DS:DX=未打开的FCB首址 AL=00成功,0FFH失败 13H 删除文件 DS:DX=未打开的FCB首址 AL=00成功,0FFH失败 14H 顺序读 DS:DX=打开的FCB首址 AL=00成功,01文件结束02缓冲区太小03缓冲区不满 15H 顺序写 DS:DX=打开的FCB首址 AL=00成功,01盘满02缓冲区太小 16H 创建文件 DS:DX=未打开的FCB首址 AL=00成功0FFH目录区满 17H 文件换名 DS:DX=被修改的FCB首址 AL=00成功,0FFH未找到目录项或文件重名 *18H 保留未用 19H 取缺省驱动器号 AL=驱动器号(0=A,1=B..) 1AH 设置磁盘缓冲区DTA DS:DX=磁盘缓冲区首址 *1BH 取缺省驱动器的磁盘格式信息 AL=每簇的扇区数CX=每扇区的字节数DX=数据区总簇数-1DS:BX=介质描述字节 *1CH 取指定驱动器的磁盘格式信息 DL=驱动器号(0=缺省,1=A..) AL=每簇的扇区数CX=每扇区的字节数DX=数据区总簇数-1DS:BX=介质描述字节 *1DH 保留未用 *1EH 保留未用 *1FH 取缺省驱动器的DPB DS:BX=DPB首址 *20H 保留未用 21H 随机读一个记录 DS:DX=打开的FCB首址 AL=00成功,01文件结束02缓冲区太小03缓冲区不满 22H 随机写一个记录 DS:DX=打开的FCB首址 AL=00成功,01盘满02缓冲区太小 23H 取文件大小 DS:DX=未打开的FCB首址 AL=00成功,0FFH失败 24H 设置随机记录号 DS:DX=打开的FCB首址 25H 设置中断向量 AL=中断号DS:DX=中断程序入口 *26H 创建新的PSP DS:DX=新的PSP段地址 27H 随机读若干记录 DS:DX=打开的FCB首址CX=要读入的记录数 AL=00成功,01文件结束AL=02缓冲区太小AL=03缓冲区不满CX=读入的块数 28H 随机写若干记录 DS:DX=打开的FCB首址CX=要写入的记录数 AL=00成功,01盘满AL=02缓冲区太小AL=03缓冲区不满CX=已写的块数 29H 分析文件名 AL=分析控制标记DS:SI=要分析的字符串ES:DI=未打开的FCB首址 AL=00未通配符01有通配符0FFH驱动器字母无效ES:DI=未打开的FCB 2AH 取系统日期 CX=年(1980-2099)DH=月,DL=日,AL=星期(0=星期日) 2BH 置系统日期 CX=年,DH=月,DL=日 AL=00成功,0FFH失败 2CH 取系统时间 CH=时(0-23),CL=分,DH=秒,DL=百分之几秒 2DH 置系统时间 CX=时,分DX=秒,百分秒 AL=00成功,0FFH失败 2EH 设置/复位校验开关 AL=0关闭,1打开 2FH 取磁盘传输地址DTA ES:BX=DTA首地址 30H 取DOS版本 AL,AH=DOS主、次版本 31H 结束并驻留 AL=返回码,DX=内存大小 *32H 取指定驱动器的DPB DS:BX=DPB首址 33H 取或置Ctrl-Break标志 AL=0:取,1:置,DL=标志 DL=标志(取功能)0:关1:开 *34H 取DOS中断标志 ES:BX=DOS中断标志 35H 取中断向量地址 AL=中断号 ES:BX=中断程序入口 36H 取磁盘的自由空间 DL=驱动器号(0=缺省,1=A AX=FF驱动器无效其它每簇扇区数BX=自由簇数CX=每扇区字节数BX=文件区所占簇数 *37H 取/置参数分隔符取/置设备名许可标记 AL=0:取分隔符,1:置分隔符,DL=分隔符2:取许可标记3:置许可标记,DL=许可标记 DL=分隔符(功能0)DL=许可标记(功能2) 38H 取国家信息 AL=0,DS:DX=缓冲区首址 39H 创建子目录 DS:DX=路径字符串 CF=0成功,1失败,AX=错误码 3AH 删除子目录 DS:DX=路径字符串 CF=0成功,1失败,AX=错误码 3BH 设置子目录 DS:DX=路径字符串 CF=0成功,1失败,AX=错误码 3CH 创建文件 DS:DX=带路径的文件名CX=属性1-只读2-隐蔽4-系统 CF=0成功,AX=文件号CF=1失败,AX=错误码 3DH 打开文件 DS:DX=带路径的文件名AL=方式0-读1-写2-读写 CF=0成功,AX=文件号CF=1失败,AX=错误码 3EH 关闭文件 BX=文件号 CF=0成功CF=1失败,AX=错误码 3FH 读文件或设备 BX=文件号CX=字节数 CF=0成功DX:AX=新的指针位置 40H 写文件或设备 DS:DX=缓冲区首址 CF=1失败,AX=错误码 41H 删除文件 DS:DX=带路径的文件名 CF=0成功,1失败,AX=错误码 42H 移动文件指针 AL=方式0-正向1-相对2-反向BX=文件号,CX:DX=移动的位移量 CF=0成功,DX:AX=新的文件指针CF=1失败,AX=错误码 43H 取/置文件属性 AL=0:取1:置,CX=新属性DS:DX=带路径的文件名 CX=属性(功能0)1-只读2-隐蔽4-系统20H-归档 44H 设备输入/输出控制:设置/取得与打开设备的句柄相关联信息,或发送/接收控制字符串至设备句柄 AL=0/1取/置设备信息2/3读/写设备控制通道4/5同功能2/36/7取输入/输出状态BX=句柄(功能0-3,6-7)BL=驱动器号(功能4-5)CX=字节数(功能2-5)DS:DX=缓冲区(功能2-5) CF=0成功DX=设备信息(功能0)AL=状态(功能6/7)0未准备,1准备AX=传送的字节数(功能2-5) 45H 复制文件号(对于一个打开的文件返回一个新的文件号) BX=文件号 CF=0成功,AX=新文件号CF=1失败,AX=错误码 46H 强行复制文件号 BX=现存的文件号,CX=第2文件号 CF=0成功,1失败AX=错误码 47H 取当前目录 DL=驱动器号DS:SI=缓冲区首址 CF=0成功,1失败AX=错误码 48H 分配内存 BX=所需的内存节数 CF=0成功,AX=分配的段数,CF=1失败,AX=错误码BX=最大可用块大小 49H 释放内存 ES=释放块的段值 CF=1失败,AX=错误码 4AH 修改分配内存 ES=修改块的段值BX=新长度(以节为单位) CF=1失败,AX=错误码BX=最大可用块大小 4BH 装载程序运行程序 AL=0装载并运行1获得执行信息3装载但不运行DS:DX=带路径的文件名ES:BX=装载用的参数块 CF=1失败,AX=错误码 4CH 带返回码的结束 AL=进程返回码 4DH 取由31H/4CH带回的返回码 AL=进程返回码AH=类型码,0-正常结束1-由Ctrl-Break结束2-由严重设备错误而结束3-由调用31H而结束 4EH 查找第一个匹配项 DS:DX=带路径的文件名CX=属性 CF=1失败,AX=错误码 4FH 查找下一个匹配项 CF=1失败,AX=错误码 *50H 建立当前的PSP段地址 BX=PSP段地址 *51H 读当前的PSP段地址 BX=PSP段地址 *52H 取DOS系统数据区首址 ES:BX=DOS数据区首址 *53H 为块设备建立DPB DS:SI=BPB,ES:DI=DPB 54H 取校验开关设定值 AL=标志值(0:关,1:开) *55H 由当前PSP建立新PSP DX=PSP段地址 56H 文件换名 DS:DX=带路径的旧文件名ES:DI=带路径的新文件名 CF=1失败,AX=错误码 57H 取/置文件时间及日期 AL=0/1取/置,BX=文件号CX=时间,DX=日期 CF=0成功,CX=时间,DX=日期 -
-
打印字符串
data segment str db 'hello pangshu!$' ;$ 表示结尾标记 data ends code segment start: mov ax,data mov ds,ax ;业务逻辑代码 mov dx,offset str;获取别名对应数据的偏移地址 mov ah, 9h ;9h表示调用显存 从dx总读取偏移地址对应的数据 int 21h ;退出程序 mov ah, 4ch int 21h code ends end start
今天的文章x86汇编语言之内中断分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/19303.html