<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>8259 on 软件开发大郭的技术博客</title>
		<link>https://blog.grabbyte.com/tags/8259/</link>
		<description>Recent content in 8259 on 软件开发大郭的技术博客</description>
		<generator>Hugo</generator>
		<language>en</language>
		
		
		
		
			<lastBuildDate>Wed, 28 Jun 2023 09:00:00 +0800</lastBuildDate>
		
			<atom:link href="https://blog.grabbyte.com/tags/8259/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>DOS编程：自定义中断程序的技术实现</title>
				<link>https://blog.grabbyte.com/p/2023/06/28-0900.html</link>
				<pubDate>Wed, 28 Jun 2023 09:00:00 +0800</pubDate>
				<guid>https://blog.grabbyte.com/p/2023/06/28-0900.html</guid>
				<description>&lt;h2 id=&#34;概述&#34;&gt;概述&lt;/h2&gt;&#xA;&lt;p&gt;上一篇&lt;a href=&#34;https://blog.grabbyte.com/p/2023/06/28.html&#34;&gt;《BIOS中断服务》&lt;/a&gt;列举了系统已经提供的各种中断功能号，这些都是&amp;quot;调用别人写好的中断&amp;quot;。这篇讲反过来的事情——&lt;strong&gt;自己写一个中断处理程序，挂到中断向量表上&lt;/strong&gt;，让系统在特定事件发生时执行你的代码。&lt;/p&gt;&#xA;&lt;p&gt;这是 TSR、驻留程序、硬件驱动、热键工具的共同基础，在&lt;a href=&#34;https://blog.grabbyte.com/p/2023/06/28-1730.html&#34;&gt;《DOS下TSR程序实现原理》&lt;/a&gt;中提到的定时器劫持，本质上就是这里要讲的技术在时间关键场景下的应用。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;中断的两大类&#34;&gt;中断的两大类&lt;/h2&gt;&#xA;&lt;p&gt;写自定义中断程序之前，先要分清两类完全不同的中断：&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;类型&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;触发方式&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;例子&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;特点&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;软件中断&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;程序主动执行 &lt;code&gt;INT n&lt;/code&gt; 指令&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;INT 21h（DOS服务）、INT 10h（BIOS显示）、INT 33h（鼠标）&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;可预测，程序想调用才会触发&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;硬件中断&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;外部设备通过 8259 PIC 发信号&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;IRQ0（定时器）、IRQ1（键盘）、IRQ6（软盘）&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;随时可能发生，不受当前代码控制&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;自定义中断程序可以针对这两类中的任意一种，但编写规则和风险完全不同——软件中断你可以设计自己的调用约定，硬件中断则必须遵守严格的硬件协议（尤其是 EOI 应答），否则会导致系统挂死。&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
