博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
汇编语言 内部中断
阅读量:3960 次
发布时间:2019-05-24

本文共 1610 字,大约阅读时间需要 5 分钟。

内部中断不需要硬件支持,不受IF标志控制,不执行中断总线周期,除单步中断可通过TF标志允许或禁止外,其余都是不可屏蔽的中断。内部中断分为以下几种:

(1)除法错误中断。CPU在执行触发指令时,若发现除数为0或者所得的商超过了寄存器能容纳的范围,则自动产生一个类型为0的除法错误中断。
(2)单步中断。如果CPU的单步标志TF置1,那么每执行完一条指令后,会自动产生类型为1的单步中断,CPU响应中断后,暂停执行下条指令,转到单步中断服务程序去执行,其结果是将CPU的内部寄存器和有关存储期的内容显示出来,便于跟踪程序的执行过程,实现动态排错。

中断向量表

  1. 中断服务程序的入口地址通常被称为中断向量或中断矢量。8086可处理256类中断,类型号为0~255(0 ~ FFH)。每类中断有一个入口地址,需用4个字节存储CS和IP,256类中断的入口地址要占用1K字节,它们位于内存0000 ~ 003FFH的区域中,存储了这些地址的连续空间称为中断向量表或中断矢量表。

  2. 类型号为0~4的5个中断被定义为专用中断,它们分别是:除法错误中断、单步中断、不可屏蔽中断、断点中断和溢出中断,它们的中断服务程序的入口地址分别存放在00H、04H、08H、0CH和10H开始的4个连续单元中。

    CPU 通过中断类型码找到中断向量表和程序地址的位置。

I/O ADDR INT TYPE(16进制) FUNCTION
00 ~ 03 0 除法错误中断
04 ~ 07 1 单步中断
08 ~ 0B 2 非屏蔽中断
0C ~ 0F 3 断点中断
10 ~ 13 4 溢出中断
14 ~ 17 5 打印屏幕
18 ~ 1F 6/7 保留
assume cs:code, ds:data, ss:stackdata segment		db 128 dup(0)data endsstack segment stack		db 128 dup(0)stack endscode segment		start:	mov ax, stack				mov ss, ax				mov sp, 128								int 0   ; 除法错误								mov ax, 4C00H				int 21H				code endsend start

在这里插入图片描述

; 以下程序实现 1 ÷ 0 的结果assume cs:code, ds:data, ss:stackdata segment		db 256 dup(0)data endsstack segment stack			db 128 dup(0)stack endscode segmentstart:					mov ax, stack			mov ss, ax			mov sp, 128						mov ax, 1			mov bl, 0			div bl					mov ax, 4C00H			int 21					code endsend start

在这里插入图片描述

例如:
在这里插入图片描述
如上图

  • 0号中断源对应的中断处理程序的入口地址为: F000:1060
  • 1号中断源对应的中断处理程序的入口地址为: 01A3:13BB
  • 2号中断源对应的中断处理程序的入口地址为: 0070:0008
  • 3号中断源对应的中断处理程序的入口地址为: 01A3:13B1

总结:

存储N号中断源的中断处理程序入口的偏移地址的内存单元的地址

  • 段地址:N * 4 + 2
  • 偏移地址: N * 4

中断过程

1.取得中断类型码
2.保存标志位寄存器 → pushf
3.将标志位寄存器的第 8 TF 和 第9位 IF 设置为0
4.push cs
5.push ip
6.cs = N4+2 ip=N4

中断处理程序返回的方法

ss:sp     ip cs pushf

iret 指令可实现以下的指令

  • pop ip
  • pop cs
  • popf

转载地址:http://sbqzi.baihongyu.com/

你可能感兴趣的文章
文件上传漏洞之.htaccess
查看>>
常见网络安全设备默认口令
查看>>
第三周任务,利用文件上传漏洞
查看>>
ctfhub 投稿彩蛋
查看>>
【Shiro_exploit】PYTHON报错解决:ModuleNotFoundError: No module named 'requests'
查看>>
一次很折腾的扩容,记录一下之后再整理
查看>>
VirtualBox虚拟机网络配置
查看>>
oracle vm virtualbox虚拟机下,CentOS7系统网络配置
查看>>
Windows 10下Docker使用经验谈
查看>>
centos下nmap安装和基础命令
查看>>
ubuntu出现有线已连接却无法上网
查看>>
一句话命令
查看>>
解决Linux CentOS中cp -f 复制强制覆盖的命令无效的方法
查看>>
wdcpv3升级到v3.2后,多PHP版本共存的安装方法
查看>>
centos tar压缩与解压缩
查看>>
Centos 7防火墙firewalld/iptables开放80端口
查看>>
centos 7 yum源文件配置详解及163 yum源更换
查看>>
PHP统计当前网站的访问人数,访问信息,被多少次访问。
查看>>
Windows10远程报错CredSSP加密oracle修正
查看>>
Windows server 2016 设置多用户登陆
查看>>