<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>OS Basics on Yuanye Ma's Blog</title><link>/categories/os-basics/</link><description>Recent content in OS Basics on Yuanye Ma's Blog</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>yuanye.ma@qq.com (Yuanye Ma)</managingEditor><webMaster>yuanye.ma@qq.com (Yuanye Ma)</webMaster><lastBuildDate>Wed, 15 Jan 2020 16:01:23 +0800</lastBuildDate><atom:link href="/categories/os-basics/index.xml" rel="self" type="application/rss+xml"/><item><title>x86汇编从实模式到保护模式实验</title><link>/os-basics/2020-01-15-x86%E6%B1%87%E7%BC%96%E4%BB%8E%E5%AE%9E%E6%A8%A1%E5%BC%8F%E5%88%B0%E4%BF%9D%E6%8A%A4%E6%A8%A1%E5%BC%8F%E5%AE%9E%E9%AA%8C/</link><pubDate>Wed, 15 Jan 2020 16:01:23 +0800</pubDate><author>yuanye.ma@qq.com (Yuanye Ma)</author><guid>/os-basics/2020-01-15-x86%E6%B1%87%E7%BC%96%E4%BB%8E%E5%AE%9E%E6%A8%A1%E5%BC%8F%E5%88%B0%E4%BF%9D%E6%8A%A4%E6%A8%A1%E5%BC%8F%E5%AE%9E%E9%AA%8C/</guid><description>&lt;h1 id="x86汇编从实模式到保护模式实验"&gt;x86汇编从实模式到保护模式实验&lt;/h1&gt;
&lt;h2 id="实验一"&gt;实验一&lt;/h2&gt;
&lt;p&gt;实验环境：MacOS High Sierra&lt;/p&gt;
&lt;h3 id="安装nasm"&gt;安装nasm&lt;/h3&gt;
&lt;p&gt;nasm是一个开源的汇编语言编译器，可以将汇编代码编程成x86平台可以执行的二进制代码&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-1"&gt;1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-2"&gt;2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-3"&gt;3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-4"&gt;4&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;# 安装homebrew&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ruby -e &lt;span style="color:#4070a0"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;$(&lt;/span&gt;curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install&lt;span style="color:#007020;font-weight:bold"&gt;)&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#34;&lt;/span&gt; &amp;lt; /dev/null 2&amp;gt; /dev/null
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;# 安装nasm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;brewinstall nasm
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Vim 编辑器&amp;ndash;用于编辑代码&lt;/p&gt;
&lt;p&gt;xxd 命令可以以二进制或者十六进制的形式查看二进制文件，配合vim可以当做十六进制查看器使用。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-1"&gt;1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-2"&gt;2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-3"&gt;3&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;vim test.bin
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;# 输入 :%!xxd 可以十六进制形式查看&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;# xxd -r 可以写二进制文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="写入代码并编译"&gt;写入代码，并编译&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-1"&gt;1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-2"&gt;2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-3"&gt;3&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;vim test.asm
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;# 粘贴写入代码&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;nasm -f bin -o test.bin test.asm &lt;span style="color:#60a0b0;font-style:italic"&gt;# 编译生成二进制文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="创建虚拟机镜像并启动虚拟机查看实验结果"&gt;创建虚拟机镜像，并启动虚拟机查看实验结果&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-1"&gt;1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-2"&gt;2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-3"&gt;3&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;# 创建软盘镜像&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dd &lt;span style="color:#007020;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;./test.bin &lt;span style="color:#bb60d5"&gt;of&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;os.img &lt;span style="color:#bb60d5"&gt;count&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#40a070"&gt;1&lt;/span&gt; &lt;span style="color:#bb60d5"&gt;bs&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;1440k
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;# bs：一个块多少个字节 count：多少个块 软盘大小1.44MB &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;打开virtualbox-&amp;gt;创建虚拟机-&amp;gt;操作系统类型：Other-&amp;gt;Other unknow -&amp;gt; 不要硬盘。&lt;/p&gt;
&lt;p&gt;设置虚拟机-&amp;gt;存储-&amp;gt;注册-&amp;gt;选中上边创建的&lt;code&gt;os.img&lt;/code&gt;。开启虚拟机。引导设置为软盘&lt;/p&gt;
&lt;p&gt;此外可以通过以下方式将img转换为vdi的硬盘&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-1"&gt;1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-2"&gt;2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-3"&gt;3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-4"&gt;4&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;qemu-img convert -f raw -O vpc ./test.img ./test.vdi
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;# 此时需要将虚拟机的引导方式修改为硬盘启动&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;# 也可以通过以下命令转换，但是磁盘文件太小是会出错&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;VBoxManage convertdd test.img os.vdi &lt;span style="color:#60a0b0;font-style:italic"&gt;# convertdd指将raw硬盘转换为vdi硬盘&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;![image-20200114204303405](/Users/kevin/Library/Application Support/typora-user-images/image-20200114204303405.png)&lt;/p&gt;
&lt;h3 id="创建一个虚拟硬盘并写入mbr"&gt;创建一个虚拟硬盘，并写入MBR&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-1"&gt;1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-2"&gt;2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-3"&gt;3&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dd &lt;span style="color:#007020;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;./test.bin &lt;span style="color:#bb60d5"&gt;of&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;./os.img &lt;span style="color:#bb60d5"&gt;bs&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#40a070"&gt;512&lt;/span&gt; &lt;span style="color:#bb60d5"&gt;count&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#40a070"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dd &lt;span style="color:#007020;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;/dev/zero &lt;span style="color:#bb60d5"&gt;of&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;./os.img &lt;span style="color:#bb60d5"&gt;seek&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#40a070"&gt;1&lt;/span&gt; &lt;span style="color:#bb60d5"&gt;bs&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#40a070"&gt;512&lt;/span&gt; &lt;span style="color:#bb60d5"&gt;count&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#40a070"&gt;2000000&lt;/span&gt; &lt;span style="color:#60a0b0;font-style:italic"&gt;# 创建了一个大小为1G的硬盘，seek是跳过多少块再开始写&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;VBoxManage convertdd os.img os.vdi
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;然后将此硬盘镜像设置为虚拟机的启动硬盘，可以得到和上边实验相同的结果。&lt;/p&gt;
&lt;h3 id="bochs"&gt;Bochs&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://bochs.sourceforge.net/getcurrent.html"&gt;bochs&lt;/a&gt;是一个开源的x86模拟器，可以单步调试，可以查看CPU的寄存器值。各个版本的&lt;a href="https://sourceforge.net/projects/bochs/files/"&gt;下载链接&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-16"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-16"&gt;16&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-17"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-17"&gt;17&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-18"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-18"&gt;18&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-19"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-19"&gt;19&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-20"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-20"&gt;20&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-21"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-21"&gt;21&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-22"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-22"&gt;22&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-23"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-23"&gt;23&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;# 下载Bochs代码&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wget https://sourceforge.net/projects/bochs/files/bochs/2.6.11/bochs-2.6.11.tar.gz/download
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;# 解压并进入代码目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tar -zxvf ./download &lt;span style="color:#666"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="color:#007020"&gt;cd&lt;/span&gt; ./bochs-2.6.11
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;# 配置编译环境&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;brew install sdl &lt;span style="color:#60a0b0;font-style:italic"&gt;# 依赖项&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;chmod u+x ./configure
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;./configure --enable-ne2000 &lt;span style="color:#4070a0;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --enable-all-optimizations &lt;span style="color:#4070a0;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --enable-cpu-level&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#40a070"&gt;6&lt;/span&gt; &lt;span style="color:#4070a0;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --enable-x86-64 &lt;span style="color:#4070a0;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --enable-vmx&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#40a070"&gt;2&lt;/span&gt; &lt;span style="color:#4070a0;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --enable-pci &lt;span style="color:#4070a0;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --enable-usb &lt;span style="color:#4070a0;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --enable-usb-ohci &lt;span style="color:#4070a0;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --enable-e1000 &lt;span style="color:#4070a0;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --enable-debugger &lt;span style="color:#4070a0;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --enable-disasm &lt;span style="color:#4070a0;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --disable-debugger-gui &lt;span style="color:#4070a0;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --with-sdl &lt;span style="color:#4070a0;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --prefix&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bb60d5"&gt;$HOME&lt;/span&gt;/opt/bochs
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;# 编译安装&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;# 报错 eth_socket.cc:98:10: fatal error: &amp;#39;linux/types.h&amp;#39; file not found&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="https://blog.nswebfrog.com/2017/02/03/config-bochs/"&gt;参考1&lt;/a&gt;&lt;a href="https://blog.csdn.net/yjk13703623757/article/details/86825542"&gt;参考2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;bochs在macos上编译的时候遇到&lt;code&gt;fatal error: 'linux/types.h' file not found&lt;/code&gt;错误，暂时不知道怎么解决。&lt;/p&gt;
&lt;h3 id="代码解释"&gt;代码解释&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-10"&gt; 10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-11"&gt; 11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-12"&gt; 12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-13"&gt; 13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-14"&gt; 14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-15"&gt; 15&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-16"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-16"&gt; 16&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-17"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-17"&gt; 17&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-18"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-18"&gt; 18&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-19"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-19"&gt; 19&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-20"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-20"&gt; 20&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-21"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-21"&gt; 21&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-22"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-22"&gt; 22&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-23"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-23"&gt; 23&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-24"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-24"&gt; 24&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-25"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-25"&gt; 25&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-26"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-26"&gt; 26&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-27"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-27"&gt; 27&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-28"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-28"&gt; 28&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-29"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-29"&gt; 29&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-30"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-30"&gt; 30&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-31"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-31"&gt; 31&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-32"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-32"&gt; 32&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-33"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-33"&gt; 33&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-34"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-34"&gt; 34&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-35"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-35"&gt; 35&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-36"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-36"&gt; 36&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-37"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-37"&gt; 37&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-38"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-38"&gt; 38&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-39"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-39"&gt; 39&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-40"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-40"&gt; 40&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-41"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-41"&gt; 41&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-42"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-42"&gt; 42&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-43"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-43"&gt; 43&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-44"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-44"&gt; 44&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-45"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-45"&gt; 45&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-46"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-46"&gt; 46&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-47"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-47"&gt; 47&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-48"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-48"&gt; 48&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-49"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-49"&gt; 49&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-50"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-50"&gt; 50&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-51"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-51"&gt; 51&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-52"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-52"&gt; 52&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-53"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-53"&gt; 53&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-54"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-54"&gt; 54&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-55"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-55"&gt; 55&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-56"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-56"&gt; 56&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-57"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-57"&gt; 57&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-58"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-58"&gt; 58&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-59"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-59"&gt; 59&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-60"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-60"&gt; 60&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-61"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-61"&gt; 61&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-62"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-62"&gt; 62&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-63"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-63"&gt; 63&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-64"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-64"&gt; 64&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-65"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-65"&gt; 65&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-66"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-66"&gt; 66&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-67"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-67"&gt; 67&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-68"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-68"&gt; 68&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-69"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-69"&gt; 69&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-70"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-70"&gt; 70&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-71"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-71"&gt; 71&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-72"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-72"&gt; 72&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-73"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-73"&gt; 73&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-74"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-74"&gt; 74&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-75"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-75"&gt; 75&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-76"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-76"&gt; 76&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-77"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-77"&gt; 77&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-78"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-78"&gt; 78&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-79"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-79"&gt; 79&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-80"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-80"&gt; 80&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-81"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-81"&gt; 81&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-82"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-82"&gt; 82&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-83"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-83"&gt; 83&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-84"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-84"&gt; 84&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-85"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-85"&gt; 85&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-86"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-86"&gt; 86&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-87"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-87"&gt; 87&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-88"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-88"&gt; 88&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-89"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-89"&gt; 89&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-90"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-90"&gt; 90&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-91"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-91"&gt; 91&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-92"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-92"&gt; 92&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-93"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-93"&gt; 93&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-94"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-94"&gt; 94&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-95"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-95"&gt; 95&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-96"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-96"&gt; 96&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-97"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-97"&gt; 97&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-98"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-98"&gt; 98&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-99"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-99"&gt; 99&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-100"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-100"&gt;100&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-101"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-101"&gt;101&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-102"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-102"&gt;102&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-103"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-103"&gt;103&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;;&lt;span style=""&gt;代码清单&lt;/span&gt;&lt;span style="color:#40a070"&gt;5&lt;/span&gt;&lt;span style="color:#666"&gt;-&lt;/span&gt;&lt;span style="color:#40a070"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov ax,&lt;span style="color:#40a070"&gt;0xb800&lt;/span&gt; ;&lt;span style=""&gt;指向文本模式的显示缓冲区&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov es,ax
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;;&lt;span style=""&gt;以下显示字符串&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#34;Label offset:&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x00&lt;/span&gt;],&lt;span style="color:#4070a0"&gt;&amp;#39;L&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x01&lt;/span&gt;],&lt;span style="color:#40a070"&gt;0x07&lt;/span&gt; ;&lt;span style=""&gt;黑底白字&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x02&lt;/span&gt;],&lt;span style="color:#4070a0"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x03&lt;/span&gt;],&lt;span style="color:#40a070"&gt;0x07&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x04&lt;/span&gt;],&lt;span style="color:#4070a0"&gt;&amp;#39;b&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x05&lt;/span&gt;],&lt;span style="color:#40a070"&gt;0x07&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x06&lt;/span&gt;],&lt;span style="color:#4070a0"&gt;&amp;#39;e&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x07&lt;/span&gt;],&lt;span style="color:#40a070"&gt;0x07&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x08&lt;/span&gt;],&lt;span style="color:#4070a0"&gt;&amp;#39;l&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x09&lt;/span&gt;],&lt;span style="color:#40a070"&gt;0x07&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x0a&lt;/span&gt;],&lt;span style="color:#4070a0"&gt;&amp;#39; &amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x0b&lt;/span&gt;],&lt;span style="color:#40a070"&gt;0x07&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x0c&lt;/span&gt;],&lt;span style="color:#4070a0"&gt;&amp;#34;o&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x0d&lt;/span&gt;],&lt;span style="color:#40a070"&gt;0x07&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x0e&lt;/span&gt;],&lt;span style="color:#4070a0"&gt;&amp;#39;f&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x0f&lt;/span&gt;],&lt;span style="color:#40a070"&gt;0x07&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x10&lt;/span&gt;],&lt;span style="color:#4070a0"&gt;&amp;#39;f&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x11&lt;/span&gt;],&lt;span style="color:#40a070"&gt;0x07&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x12&lt;/span&gt;],&lt;span style="color:#4070a0"&gt;&amp;#39;s&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x13&lt;/span&gt;],&lt;span style="color:#40a070"&gt;0x07&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x14&lt;/span&gt;],&lt;span style="color:#4070a0"&gt;&amp;#39;e&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x15&lt;/span&gt;],&lt;span style="color:#40a070"&gt;0x07&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x16&lt;/span&gt;],&lt;span style="color:#4070a0"&gt;&amp;#39;t&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x17&lt;/span&gt;],&lt;span style="color:#40a070"&gt;0x07&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x18&lt;/span&gt;],&lt;span style="color:#4070a0"&gt;&amp;#39;:&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x19&lt;/span&gt;],&lt;span style="color:#40a070"&gt;0x07&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov ax,number ;&lt;span style=""&gt;取得标号&lt;/span&gt;number的偏移地址
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov bx,&lt;span style="color:#40a070"&gt;10&lt;/span&gt; ; &lt;span style=""&gt;除数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;;&lt;span style=""&gt;设置数据段的基地址&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov cx,cs
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov ds,cx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;;&lt;span style=""&gt;求个位上的数字&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov dx,&lt;span style="color:#40a070"&gt;0&lt;/span&gt; ; &lt;span style=""&gt;被除数是&lt;/span&gt;&lt;span style="color:#002070;font-weight:bold"&gt;DX&lt;/span&gt;:AX &lt;span style="color:#40a070"&gt;32&lt;/span&gt;&lt;span style=""&gt;位&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;div bx ; &lt;span style=""&gt;除数是&lt;/span&gt;BX &lt;span style="color:#40a070"&gt;16&lt;/span&gt;&lt;span style=""&gt;位，&lt;/span&gt; &lt;span style=""&gt;商在&lt;/span&gt;AX&lt;span style=""&gt;，余数在&lt;/span&gt;DX
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov [&lt;span style="color:#40a070"&gt;0x7c00&lt;/span&gt;&lt;span style="color:#666"&gt;+&lt;/span&gt;number&lt;span style="color:#666"&gt;+&lt;/span&gt;&lt;span style="color:#40a070"&gt;0x00&lt;/span&gt;],dl ; dl中保存的是余数的低8位 ;&lt;span style=""&gt;保存个位上的数字&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;;&lt;span style=""&gt;求十位上的数字&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;xor dx,dx ; &lt;span style=""&gt;清空&lt;/span&gt;dx寄存器的值
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;div bx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov [&lt;span style="color:#40a070"&gt;0x7c00&lt;/span&gt;&lt;span style="color:#666"&gt;+&lt;/span&gt;number&lt;span style="color:#666"&gt;+&lt;/span&gt;&lt;span style="color:#40a070"&gt;0x01&lt;/span&gt;],dl ;&lt;span style=""&gt;保存十位上的数字&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;;&lt;span style=""&gt;求百位上的数字&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;xor dx,dx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;div bx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov [&lt;span style="color:#40a070"&gt;0x7c00&lt;/span&gt;&lt;span style="color:#666"&gt;+&lt;/span&gt;number&lt;span style="color:#666"&gt;+&lt;/span&gt;&lt;span style="color:#40a070"&gt;0x02&lt;/span&gt;],dl ;&lt;span style=""&gt;保存百位上的数字&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;;&lt;span style=""&gt;求千位上的数字&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;xor dx,dx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;div bx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov [&lt;span style="color:#40a070"&gt;0x7c00&lt;/span&gt;&lt;span style="color:#666"&gt;+&lt;/span&gt;number&lt;span style="color:#666"&gt;+&lt;/span&gt;&lt;span style="color:#40a070"&gt;0x03&lt;/span&gt;],dl ;&lt;span style=""&gt;保存千位上的数字&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;;&lt;span style=""&gt;求万位上的数字&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;xor dx,dx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;div bx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov [&lt;span style="color:#40a070"&gt;0x7c00&lt;/span&gt;&lt;span style="color:#666"&gt;+&lt;/span&gt;number&lt;span style="color:#666"&gt;+&lt;/span&gt;&lt;span style="color:#40a070"&gt;0x04&lt;/span&gt;],dl ;&lt;span style=""&gt;保存万位上的数字&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;;&lt;span style=""&gt;以下用十进制显示标号的偏移地址&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov al,[&lt;span style="color:#40a070"&gt;0x7c00&lt;/span&gt;&lt;span style="color:#666"&gt;+&lt;/span&gt;number&lt;span style="color:#666"&gt;+&lt;/span&gt;&lt;span style="color:#40a070"&gt;0x04&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;add al,&lt;span style="color:#40a070"&gt;0x30&lt;/span&gt; ; &lt;span style=""&gt;要显示数字的&lt;/span&gt;ASCII
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x1a&lt;/span&gt;],al
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x1b&lt;/span&gt;],&lt;span style="color:#40a070"&gt;0x04&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov al,[&lt;span style="color:#40a070"&gt;0x7c00&lt;/span&gt;&lt;span style="color:#666"&gt;+&lt;/span&gt;number&lt;span style="color:#666"&gt;+&lt;/span&gt;&lt;span style="color:#40a070"&gt;0x03&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;add al,&lt;span style="color:#40a070"&gt;0x30&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x1c&lt;/span&gt;],al
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x1d&lt;/span&gt;],&lt;span style="color:#40a070"&gt;0x04&lt;/span&gt; ; &lt;span style=""&gt;黑底红字，无闪烁，无加亮&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov al,[&lt;span style="color:#40a070"&gt;0x7c00&lt;/span&gt;&lt;span style="color:#666"&gt;+&lt;/span&gt;number&lt;span style="color:#666"&gt;+&lt;/span&gt;&lt;span style="color:#40a070"&gt;0x02&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;add al,&lt;span style="color:#40a070"&gt;0x30&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x1e&lt;/span&gt;],al
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x1f&lt;/span&gt;],&lt;span style="color:#40a070"&gt;0x04&lt;/span&gt; ; &lt;span style=""&gt;设置显示模式&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov al,[&lt;span style="color:#40a070"&gt;0x7c00&lt;/span&gt;&lt;span style="color:#666"&gt;+&lt;/span&gt;number&lt;span style="color:#666"&gt;+&lt;/span&gt;&lt;span style="color:#40a070"&gt;0x01&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;add al,&lt;span style="color:#40a070"&gt;0x30&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x20&lt;/span&gt;],al
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x21&lt;/span&gt;],&lt;span style="color:#40a070"&gt;0x04&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov al,[&lt;span style="color:#40a070"&gt;0x7c00&lt;/span&gt;&lt;span style="color:#666"&gt;+&lt;/span&gt;number&lt;span style="color:#666"&gt;+&lt;/span&gt;&lt;span style="color:#40a070"&gt;0x00&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;add al,&lt;span style="color:#40a070"&gt;0x30&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x22&lt;/span&gt;],al
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x23&lt;/span&gt;],&lt;span style="color:#40a070"&gt;0x04&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x24&lt;/span&gt;],&lt;span style="color:#4070a0"&gt;&amp;#39;D&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:&lt;span style="color:#40a070"&gt;0x25&lt;/span&gt;],&lt;span style="color:#40a070"&gt;0x07&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;;&lt;span style=""&gt;无限循环&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#002070;font-weight:bold"&gt;infi&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;jmp near infi
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;number db &lt;span style="color:#40a070"&gt;0&lt;/span&gt;,&lt;span style="color:#40a070"&gt;0&lt;/span&gt;,&lt;span style="color:#40a070"&gt;0&lt;/span&gt;,&lt;span style="color:#40a070"&gt;0&lt;/span&gt;,&lt;span style="color:#40a070"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;times &lt;span style="color:#40a070"&gt;203&lt;/span&gt; db &lt;span style="color:#40a070"&gt;0&lt;/span&gt; ; &lt;span style=""&gt;重复定义&lt;/span&gt;&lt;span style="color:#40a070"&gt;203&lt;/span&gt;&lt;span style=""&gt;个&lt;/span&gt;&lt;span style="color:#40a070"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;db &lt;span style="color:#40a070"&gt;0x55&lt;/span&gt;,&lt;span style="color:#40a070"&gt;0xaa&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;div指令：&lt;/p&gt;
&lt;p&gt;被除数是32位时存储在 （DX:AX） 除数是16位的跟在div指令后，商存在AX，余数在DX中&lt;/p&gt;
&lt;p&gt;被除数是16位时存储在 AX中，除数是8位的跟在div指令后，商在AL,余数在AH中&lt;/p&gt;
&lt;p&gt;DB是伪指令，即没有对应的机器码，只是给编译器用的。DB表示声明一个字节数据，此外还有DW(两个字),DD（双字）,DQ（四字）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-16"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-16"&gt;16&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-17"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-17"&gt;17&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-18"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-18"&gt;18&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-19"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-19"&gt;19&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-20"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-20"&gt;20&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-21"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-21"&gt;21&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-22"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-22"&gt;22&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-23"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-23"&gt;23&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-24"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-24"&gt;24&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-25"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-25"&gt;25&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-26"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-26"&gt;26&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-27"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-27"&gt;27&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-28"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-28"&gt;28&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-29"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-29"&gt;29&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-30"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-30"&gt;30&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-31"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-31"&gt;31&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-32"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-32"&gt;32&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-33"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-33"&gt;33&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-34"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-34"&gt;34&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-35"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-35"&gt;35&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-36"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-36"&gt;36&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-37"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-37"&gt;37&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-38"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-38"&gt;38&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-39"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-39"&gt;39&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-40"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-40"&gt;40&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-41"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-41"&gt;41&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-42"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-42"&gt;42&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-43"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-43"&gt;43&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-44"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-44"&gt;44&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-45"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-45"&gt;45&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-46"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-46"&gt;46&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-47"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-47"&gt;47&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-48"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-48"&gt;48&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-49"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-49"&gt;49&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-50"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-50"&gt;50&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-51"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-51"&gt;51&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-52"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-52"&gt;52&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-53"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-53"&gt;53&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-54"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-54"&gt;54&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;;&lt;span style=""&gt;代码清单&lt;/span&gt;&lt;span style="color:#40a070"&gt;6&lt;/span&gt;&lt;span style="color:#666"&gt;-&lt;/span&gt;&lt;span style="color:#40a070"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;jmp near start
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mytext db &lt;span style="color:#4070a0"&gt;&amp;#39;L&amp;#39;&lt;/span&gt;,&lt;span style="color:#40a070"&gt;0x07&lt;/span&gt;,&lt;span style="color:#4070a0"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;,&lt;span style="color:#40a070"&gt;0x07&lt;/span&gt;,&lt;span style="color:#4070a0"&gt;&amp;#39;b&amp;#39;&lt;/span&gt;,&lt;span style="color:#40a070"&gt;0x07&lt;/span&gt;,&lt;span style="color:#4070a0"&gt;&amp;#39;e&amp;#39;&lt;/span&gt;,&lt;span style="color:#40a070"&gt;0x07&lt;/span&gt;,&lt;span style="color:#4070a0"&gt;&amp;#39;l&amp;#39;&lt;/span&gt;,&lt;span style="color:#40a070"&gt;0x07&lt;/span&gt;,&lt;span style="color:#4070a0"&gt;&amp;#39; &amp;#39;&lt;/span&gt;,&lt;span style="color:#40a070"&gt;0x07&lt;/span&gt;,&lt;span style="color:#4070a0"&gt;&amp;#39;o&amp;#39;&lt;/span&gt;,&lt;span style="color:#40a070"&gt;0x07&lt;/span&gt;,\
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#4070a0"&gt;&amp;#39;f&amp;#39;&lt;/span&gt;,&lt;span style="color:#40a070"&gt;0x07&lt;/span&gt;,&lt;span style="color:#4070a0"&gt;&amp;#39;f&amp;#39;&lt;/span&gt;,&lt;span style="color:#40a070"&gt;0x07&lt;/span&gt;,&lt;span style="color:#4070a0"&gt;&amp;#39;s&amp;#39;&lt;/span&gt;,&lt;span style="color:#40a070"&gt;0x07&lt;/span&gt;,&lt;span style="color:#4070a0"&gt;&amp;#39;e&amp;#39;&lt;/span&gt;,&lt;span style="color:#40a070"&gt;0x07&lt;/span&gt;,&lt;span style="color:#4070a0"&gt;&amp;#39;t&amp;#39;&lt;/span&gt;,&lt;span style="color:#40a070"&gt;0x07&lt;/span&gt;,&lt;span style="color:#4070a0"&gt;&amp;#39;:&amp;#39;&lt;/span&gt;,&lt;span style="color:#40a070"&gt;0x07&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;number db &lt;span style="color:#40a070"&gt;0&lt;/span&gt;,&lt;span style="color:#40a070"&gt;0&lt;/span&gt;,&lt;span style="color:#40a070"&gt;0&lt;/span&gt;,&lt;span style="color:#40a070"&gt;0&lt;/span&gt;,&lt;span style="color:#40a070"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#002070;font-weight:bold"&gt;start&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mov ax,&lt;span style="color:#40a070"&gt;0x7c0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mov ds,ax ;&lt;span style=""&gt;设置数据段基地址&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mov ax,&lt;span style="color:#40a070"&gt;0xb800&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mov es,ax ;&lt;span style=""&gt;设置附加段基地址&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; cld ; &lt;span style=""&gt;清除&lt;/span&gt;DF位&lt;span style=""&gt;，&lt;/span&gt;DF&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#40a070"&gt;0&lt;/span&gt;&lt;span style=""&gt;表示&lt;/span&gt;movsw为正方向&lt;span style=""&gt;，&lt;/span&gt; std指令设置DF&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#40a070"&gt;1&lt;/span&gt; &lt;span style=""&gt;传送方向为从高地址到低地址&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mov si,mytext ; movsw的源&lt;span style=""&gt;（&lt;/span&gt;source&lt;span style=""&gt;）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mov di,&lt;span style="color:#40a070"&gt;0&lt;/span&gt; ; movsw的目的&lt;span style=""&gt;（&lt;/span&gt;dist&lt;span style=""&gt;）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mov cx,(number&lt;span style="color:#666"&gt;-&lt;/span&gt;mytext)&lt;span style="color:#666"&gt;/&lt;/span&gt;&lt;span style="color:#40a070"&gt;2&lt;/span&gt; ; (numbner&lt;span style="color:#666"&gt;-&lt;/span&gt;mytext)&lt;span style="color:#666"&gt;/&lt;/span&gt;&lt;span style="color:#40a070"&gt;2&lt;/span&gt;&lt;span style=""&gt;是需要&lt;/span&gt;movsw的次数&lt;span style=""&gt;，&lt;/span&gt;cx是计数寄存器cx&lt;span style="color:#666"&gt;==&lt;/span&gt;&lt;span style="color:#40a070"&gt;0&lt;/span&gt;&lt;span style=""&gt;时&lt;/span&gt;rep结束 &lt;span style="color:#40a070"&gt;13&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; rep movsw ; &lt;span style=""&gt;重复&lt;/span&gt;movsw&lt;span style=""&gt;，每次&lt;/span&gt;mov一个word及两个字节 &lt;span style=""&gt;起始&lt;/span&gt;&lt;span style="color:#002070;font-weight:bold"&gt;DS&lt;/span&gt;:SI &lt;span style=""&gt;目的&lt;/span&gt;&lt;span style="color:#002070;font-weight:bold"&gt;ES&lt;/span&gt;:DI
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mov ax,number ;&lt;span style=""&gt;得到标号所代表的偏移地址&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ;&lt;span style=""&gt;计算各个数位&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mov bx,ax
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mov cx,&lt;span style="color:#40a070"&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mov si,&lt;span style="color:#40a070"&gt;10&lt;/span&gt; ; &lt;span style=""&gt;除数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#002070;font-weight:bold"&gt;digit&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; xor dx,dx ; &lt;span style=""&gt;清空&lt;/span&gt;dx寄存器的值
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; div si
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mov [bx],dl ; &lt;span style=""&gt;保存数位，保存位置为&lt;/span&gt;number
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; inc bx ; bx值增加1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; loop digit ; cx &lt;span style="color:#666"&gt;!=&lt;/span&gt; &lt;span style="color:#40a070"&gt;0&lt;/span&gt; &lt;span style=""&gt;就跳转回&lt;/span&gt;digit标签处
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ;&lt;span style=""&gt;显示各个数位&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mov bx,number
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mov si,&lt;span style="color:#40a070"&gt;4&lt;/span&gt; ; &lt;span style=""&gt;显示位数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#002070;font-weight:bold"&gt;show&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mov al,[bx&lt;span style="color:#666"&gt;+&lt;/span&gt;si]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; add al,&lt;span style="color:#40a070"&gt;0x30&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mov ah,&lt;span style="color:#40a070"&gt;0x04&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mov [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:di],ax
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; add di,&lt;span style="color:#40a070"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; dec si ; si &lt;span style=""&gt;自减&lt;/span&gt;&lt;span style="color:#40a070"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; jns show ; SF&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#40a070"&gt;0&lt;/span&gt;&lt;span style=""&gt;则跳转&lt;/span&gt; SF&lt;span style=""&gt;（&lt;/span&gt;Sign Flag&lt;span style=""&gt;）如果前边&lt;/span&gt;dec执行后最高位为0则SF&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#40a070"&gt;0&lt;/span&gt;,&lt;span style=""&gt;否则置&lt;/span&gt;&lt;span style="color:#40a070"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mov word [&lt;span style="color:#002070;font-weight:bold"&gt;es&lt;/span&gt;:di],&lt;span style="color:#40a070"&gt;0x0744&lt;/span&gt; ; &lt;span style="color:#40a070"&gt;0x07&lt;/span&gt; &lt;span style=""&gt;表示黑底白字&lt;/span&gt; &lt;span style="color:#40a070"&gt;0x44&lt;/span&gt;&lt;span style=""&gt;是字母&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#39;D&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; jmp near &lt;span style=""&gt;$&lt;/span&gt; ; &lt;span style=""&gt;死循环&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; times &lt;span style="color:#40a070"&gt;510&lt;/span&gt;&lt;span style="color:#666"&gt;-&lt;/span&gt;(&lt;span style=""&gt;$&lt;/span&gt;&lt;span style="color:#666"&gt;-&lt;/span&gt;&lt;span style=""&gt;$$&lt;/span&gt;) db &lt;span style="color:#40a070"&gt;0&lt;/span&gt; ; &lt;span style=""&gt;一个块&lt;/span&gt;&lt;span style="color:#40a070"&gt;512&lt;/span&gt;B&lt;span style=""&gt;，减去&lt;/span&gt;&lt;span style="color:#40a070"&gt;55&lt;/span&gt;aa还有510个块, &lt;span style=""&gt;$代表行首地址，$$代表当前段的起始地址&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; db &lt;span style="color:#40a070"&gt;0x55&lt;/span&gt;,&lt;span style="color:#40a070"&gt;0xaa&lt;/span&gt; ; MBR分区标记
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;movsw指令&lt;/p&gt;
&lt;p&gt;movsw和movsb指令执行时，原始数据串的地址由DS:SI指定，要传送的目的地址为ES:DI，传送次数为CX，movsb每次传送一个字节，movsw每次传送两个字节。&lt;/p&gt;
&lt;p&gt;正向传送时，没传送一个字节（movsb）或者一个字（movsw）SI和DI加1或者2；&lt;/p&gt;
&lt;p&gt;反向传送时，没传送一个字节（movsb）或者一个字（movsw）SI和DI减1或者2；&lt;/p&gt;
&lt;p&gt;传送方向由标志寄存器（FLAGS）的DF位指定，0为正，1为负。cls清零DF位，std将DF位置1.&lt;/p&gt;
&lt;p&gt;单纯的movsw或者movsb指令只能执行1此，需要加上rep前缀，只要CX不为0就一直执行movsw或者movsb。&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>X86汇编</title><link>/os-basics/2019-07-05-x86%E6%B1%87%E7%BC%96/</link><pubDate>Fri, 05 Jul 2019 16:01:23 +0800</pubDate><author>yuanye.ma@qq.com (Yuanye Ma)</author><guid>/os-basics/2019-07-05-x86%E6%B1%87%E7%BC%96/</guid><description>&lt;h1 id="x86汇编"&gt;X86汇编&lt;/h1&gt;
&lt;p&gt;在网上无意间看到“编程达人”的一个讲汇编的视频，觉得讲的挺好的，刚好我也一直没学明白这个东西，然后就花了半天时间看完了，看到头昏脑涨就记住了下边这些东西。&lt;/p&gt;
&lt;h2 id="通用寄存器"&gt;通用寄存器&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: center"&gt;32位&lt;/th&gt;
&lt;th style="text-align: center"&gt;16位&lt;/th&gt;
&lt;th style="text-align: center"&gt;8位&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;EAX&lt;/td&gt;
&lt;td style="text-align: center"&gt;AX&lt;/td&gt;
&lt;td style="text-align: center"&gt;AL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;EBX&lt;/td&gt;
&lt;td style="text-align: center"&gt;BX&lt;/td&gt;
&lt;td style="text-align: center"&gt;BL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;ECX&lt;/td&gt;
&lt;td style="text-align: center"&gt;CX&lt;/td&gt;
&lt;td style="text-align: center"&gt;CL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;EDX&lt;/td&gt;
&lt;td style="text-align: center"&gt;DX&lt;/td&gt;
&lt;td style="text-align: center"&gt;DL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;ESP&lt;/td&gt;
&lt;td style="text-align: center"&gt;SP&lt;/td&gt;
&lt;td style="text-align: center"&gt;AH&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;EBP&lt;/td&gt;
&lt;td style="text-align: center"&gt;BP&lt;/td&gt;
&lt;td style="text-align: center"&gt;CH&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;ESI&lt;/td&gt;
&lt;td style="text-align: center"&gt;SI&lt;/td&gt;
&lt;td style="text-align: center"&gt;DH&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;EDI&lt;/td&gt;
&lt;td style="text-align: center"&gt;DI&lt;/td&gt;
&lt;td style="text-align: center"&gt;BH&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;mov eax, 1
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="使用内存"&gt;使用内存&lt;/h2&gt;
&lt;p&gt;1.把立即数写入内存&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-1"&gt;1&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov byte ptr &lt;span style="color:#002070;font-weight:bold"&gt;ds&lt;/span&gt;:[&lt;span style="color:#40a070"&gt;0018FF&lt;/span&gt;F0], &lt;span style="color:#40a070"&gt;1&lt;/span&gt; &lt;span style=""&gt;#&lt;/span&gt; &lt;span style=""&gt;将立即数&lt;/span&gt;&lt;span style="color:#40a070"&gt;1&lt;/span&gt; &lt;span style=""&gt;写入内存地址&lt;/span&gt;[&lt;span style="color:#40a070"&gt;0018FF&lt;/span&gt;F0]&lt;span style=""&gt;中，写入长度为一个字节&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;2.把寄存器的值写入内存&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-1"&gt;1&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov DWORD ptr &lt;span style="color:#002070;font-weight:bold"&gt;ds&lt;/span&gt;:[&lt;span style="color:#40a070"&gt;0018FF&lt;/span&gt;F0], eax &lt;span style=""&gt;#&lt;/span&gt; &lt;span style=""&gt;将立即数&lt;/span&gt;&lt;span style="color:#40a070"&gt;1&lt;/span&gt; &lt;span style=""&gt;写入内存地址&lt;/span&gt;[&lt;span style="color:#40a070"&gt;0018FF&lt;/span&gt;F0]&lt;span style=""&gt;中，写入长度为一个字节&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;3.把内存中的值写入寄存器&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-1"&gt;1&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov EAX, BWORD PTR &lt;span style="color:#002070;font-weight:bold"&gt;DS&lt;/span&gt;:[&lt;span style="color:#40a070"&gt;0018FF&lt;/span&gt;F0]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;4.内存到内存需要特殊的指令&lt;br&gt;
后边会有&lt;/p&gt;
&lt;p&gt;内存地址的五种表示形式&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;形式一： [立即数]&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;形式二： [reg] reg代表八个通用寄存器中的任何一个&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-1"&gt;1&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov dword ptr &lt;span style="color:#002070;font-weight:bold"&gt;ds&lt;/span&gt;:[eax], &lt;span style="color:#40a070"&gt;12345678&lt;/span&gt; &lt;span style=""&gt;#&lt;/span&gt; &lt;span style=""&gt;其中&lt;/span&gt;eax中保存内存的地址
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;形式三：[reg+立即数]&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-1"&gt;1&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov dword ptr &lt;span style="color:#002070;font-weight:bold"&gt;ds&lt;/span&gt;:[eax&lt;span style="color:#666"&gt;+&lt;/span&gt;&lt;span style="color:#40a070"&gt;4&lt;/span&gt;], &lt;span style="color:#40a070"&gt;12345678&lt;/span&gt; &lt;span style=""&gt;#&lt;/span&gt; &lt;span style=""&gt;其中&lt;/span&gt;eax&lt;span style="color:#666"&gt;+&lt;/span&gt;&lt;span style="color:#40a070"&gt;4&lt;/span&gt;&lt;span style=""&gt;中保存内存的地址&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;形式四：[reg+reg*{1,2,4,8}]&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-1"&gt;1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-2"&gt;2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-3"&gt;3&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov eax, &lt;span style="color:#40a070"&gt;13ff&lt;/span&gt;c4
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov ecx, &lt;span style="color:#40a070"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov dword ptr &lt;span style="color:#002070;font-weight:bold"&gt;ds&lt;/span&gt;:[eax&lt;span style="color:#666"&gt;+&lt;/span&gt;ecx&lt;span style="color:#666"&gt;*&lt;/span&gt;&lt;span style="color:#40a070"&gt;4&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;形式五：&lt;code&gt;[reg+reg*{1,2,4,8}+立即数] &lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="存储模式"&gt;存储模式&lt;/h2&gt;
&lt;p&gt;大端模式：数据高位在低地址，数据低位在高地址&lt;/p&gt;
&lt;p&gt;小端模式：数据低位在低地址&lt;/p&gt;
&lt;p&gt;&lt;code&gt;0x1A2C3E4F&lt;/code&gt;的小端模式&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;地址&lt;/th&gt;
&lt;th&gt;数字&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0x00&lt;/td&gt;
&lt;td&gt;4F&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x01&lt;/td&gt;
&lt;td&gt;3E&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x02&lt;/td&gt;
&lt;td&gt;2C&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x03&lt;/td&gt;
&lt;td&gt;1A&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;80x86一般都是小端模式&lt;/p&gt;
&lt;h2 id="汇编指令"&gt;汇编指令&lt;/h2&gt;
&lt;h3 id="基础指令"&gt;基础指令&lt;/h3&gt;
&lt;p&gt;1.mov&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;格式&lt;/th&gt;
&lt;th&gt;解释&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;mov r/m8, r8&lt;/td&gt;
&lt;td&gt;r代表通用寄存器，8代表是8位的&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mov r/m16, r16&lt;/td&gt;
&lt;td&gt;m代表内存&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mov r/m32, r32&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mov r8, r/m8&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mov r16, r/m16&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mov r32, r/m32&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mov r8, imm8&lt;/td&gt;
&lt;td&gt;imm8 代表8位立即数&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mov r16, imm16&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mov r32, imm32&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;2.ADD&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;格式&lt;/th&gt;
&lt;th&gt;解释&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ADD r/m8, imm8&lt;/td&gt;
&lt;td&gt;中间那个表示目的地址&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ADD r/m32, r32&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ADD r32, r/m32&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;3.SUB和add指令类似&lt;/p&gt;
&lt;p&gt;4.AND&lt;/p&gt;
&lt;p&gt;5.OR&lt;/p&gt;
&lt;p&gt;6.XOR&lt;/p&gt;
&lt;p&gt;7.NOT&lt;/p&gt;
&lt;h3 id="连续复制数据指令"&gt;连续复制数据指令&lt;/h3&gt;
&lt;p&gt;8.MOVS 移动数据， 内存-内存&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指令&lt;/th&gt;
&lt;th&gt;简写&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MOVS BYTE PTR ES:[EDI], BYTE PTR DS:[ESI]&lt;/td&gt;
&lt;td&gt;MOVSB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MOVS WORD PTR ES:[EDI], WORD PTR DS:[ESI]&lt;/td&gt;
&lt;td&gt;MOVSW&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MOVS DWORD PTR ES:[EDI], DWORD PTR DS:[ESI]&lt;/td&gt;
&lt;td&gt;MOVSD&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;EDI：存储一个地址，目标地址
ESI：存储的是一个地址，源数据的地址&lt;/p&gt;
&lt;p&gt;EDI和ESI内的地址会根据EFI的第十位DF的值改变，&lt;strong&gt;0 ：自增， 1：自减&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;9.STOS： 将AL/AX/EAX的值存储到[EDI]指定的内存单元&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;格式&lt;/th&gt;
&lt;th&gt;解释&lt;/th&gt;
&lt;th&gt;简写&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;STOS BYTE PTR ES:[EDI]&lt;/td&gt;
&lt;td&gt;将AL中的内容写到[EDI]指向的内存空间，EDI内的地址+1/-1(由DF位确定)&lt;/td&gt;
&lt;td&gt;STOSB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;STOS WORD PTR ES:[EDI]&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;STOSW&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;STOS DWORD PTR ES:[EDI]&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;STOSD&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;10.REP : 按照计数寄存器（ECX）中指定的次数重复执行字符串指令&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;MOV ECX, 10
REP MOVS DWORD PTR ES:[EDI], DWORD PTR DS:[ESI] #或者 REP MOVSD
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="堆栈操作"&gt;堆栈操作&lt;/h3&gt;
&lt;p&gt;ESP寄存器存储栈顶指针，从大地址逐渐减小，向低地址生长。&lt;/p&gt;
&lt;p&gt;11.push : 向堆栈中压入数据，并修改esp的值。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;格式&lt;/th&gt;
&lt;th&gt;同义&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;PUSH r32&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PUSH r16&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PUSH m32&lt;/td&gt;
&lt;td&gt;PUSH DWORD PTR DS:[18FFA4]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PUSH m16&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PUSH imm8/imm16/imm32&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;12.pop：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;格式&lt;/th&gt;
&lt;th&gt;同义&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;POP r32&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;POP r16&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;POP m32&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;POP m16&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="修改eip的指令"&gt;修改EIP的指令&lt;/h3&gt;
&lt;p&gt;EIP寄存器里边存储的是CPU下一时刻应该执行的指令。&lt;/p&gt;
&lt;p&gt;13.jmp ：寄存器/立即数/内存地址&lt;br&gt;
14.call : 先push下一行地址，然后jmp，&lt;br&gt;
15.ret ： ADD ESP, 4; MOV EIP, [ESP-4];&lt;/p&gt;
&lt;h2 id="函数"&gt;函数&lt;/h2&gt;
&lt;h3 id="函数调用"&gt;函数调用&lt;/h3&gt;
&lt;p&gt;jmp 来执行函数&lt;/p&gt;
&lt;p&gt;call 来调用函数&lt;/p&gt;
&lt;p&gt;ret 返回call调用的函数&lt;/p&gt;
&lt;h3 id="参数传递"&gt;参数传递&lt;/h3&gt;
&lt;p&gt;寄存器传参：ecx,edx存储参数，eax存储返回值。&lt;/p&gt;
&lt;p&gt;堆栈传参：先将参数压入堆栈，然后call调用函数，eax存储返回值。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-1"&gt;1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-2"&gt;2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-3"&gt;3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-4"&gt;4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-5"&gt;5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-6"&gt;6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-7"&gt;7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-8"&gt;8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-9"&gt;9&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;push &lt;span style="color:#40a070"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;push &lt;span style="color:#40a070"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;call &lt;span style="color:#40a070"&gt;41840&lt;/span&gt;d
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;add esp, &lt;span style="color:#40a070"&gt;8&lt;/span&gt; &lt;span style=""&gt;#外平栈&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#40a070"&gt;41840&lt;/span&gt;&lt;span style="color:#002070;font-weight:bold"&gt;d&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov eax, dword ptr &lt;span style="color:#002070;font-weight:bold"&gt;ds&lt;/span&gt;:[esp&lt;span style="color:#666"&gt;+&lt;/span&gt;&lt;span style="color:#40a070"&gt;8&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov eax, dword ptr &lt;span style="color:#002070;font-weight:bold"&gt;ds&lt;/span&gt;:[esp&lt;span style="color:#666"&gt;+&lt;/span&gt;&lt;span style="color:#40a070"&gt;4&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ret &lt;span style=""&gt;#&lt;/span&gt; ret &lt;span style="color:#40a070"&gt;8&lt;/span&gt; &lt;span style=""&gt;内平栈&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;堆栈平衡：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;如果要返回父程序，则当我们在堆栈中进行堆栈操作的时候，一定要保证在RET指令前，ESP指向的是我们压入栈中的地址。&lt;/li&gt;
&lt;li&gt;如果通过堆栈传递参数，那么在函数执行完毕后，要平衡参数导致的堆栈变化。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="esp寻址"&gt;ESP寻址&lt;/h2&gt;
&lt;p&gt;调用函数的时候要保存现场，函数返回前要恢复现场。&lt;/p&gt;
&lt;h2 id="ebp寻址"&gt;EBP寻址&lt;/h2&gt;
&lt;p&gt;EBP寄存器保存的是栈底的地址。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-16"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-16"&gt;16&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-17"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-17"&gt;17&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-18"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-18"&gt;18&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-19"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-19"&gt;19&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;PUSH &lt;span style="color:#40a070"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;PUSH &lt;span style="color:#40a070"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;CALL &lt;span style="color:#40a070"&gt;4183&lt;/span&gt;EE
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#40a070"&gt;4183&lt;/span&gt;&lt;span style="color:#002070;font-weight:bold"&gt;EE&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;# 保存
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;PUSH EBP
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MOV EBP, ESP
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;# 执行函数
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MOV EAX, DWORD PTR &lt;span style="color:#002070;font-weight:bold"&gt;SS&lt;/span&gt;:[EBP&lt;span style="color:#666"&gt;+&lt;/span&gt;&lt;span style="color:#40a070"&gt;8&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ADD EAX, DWORD PTR &lt;span style="color:#002070;font-weight:bold"&gt;SS&lt;/span&gt;:[EBP&lt;span style="color:#666"&gt;+&lt;/span&gt;C]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;# 准备返回
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MOV ESP, EBP
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;POP EBP
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;# 返回
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ret &lt;span style="color:#40a070"&gt;8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="jcc指令"&gt;JCC指令&lt;/h2&gt;
&lt;p&gt;标志寄存器EFL&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;31-12&lt;/th&gt;
&lt;th&gt;11&lt;/th&gt;
&lt;th&gt;10&lt;/th&gt;
&lt;th&gt;9&lt;/th&gt;
&lt;th&gt;8&lt;/th&gt;
&lt;th&gt;7&lt;/th&gt;
&lt;th&gt;6&lt;/th&gt;
&lt;th&gt;5&lt;/th&gt;
&lt;th&gt;4&lt;/th&gt;
&lt;th&gt;3&lt;/th&gt;
&lt;th&gt;2&lt;/th&gt;
&lt;th&gt;1&lt;/th&gt;
&lt;th&gt;0&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;OF&lt;/td&gt;
&lt;td&gt;DF&lt;/td&gt;
&lt;td&gt;IF&lt;/td&gt;
&lt;td&gt;TF&lt;/td&gt;
&lt;td&gt;SF&lt;/td&gt;
&lt;td&gt;ZF&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;AF&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;PF&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;CF&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;溢出&lt;/td&gt;
&lt;td&gt;方向&lt;/td&gt;
&lt;td&gt;中断使能&lt;/td&gt;
&lt;td&gt;单步&lt;/td&gt;
&lt;td&gt;符号&lt;/td&gt;
&lt;td&gt;零&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;辅助进位&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;奇偶&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;进位&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;CF (Carry flag)：若算术操作产生的结果在最高有效位发生进位或者借位将其置1，反之清零。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;PF（parity flag）: 如果结果的最低有效字节（最低位的一个字节）包含偶数个1，则置1，否则清零。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;AF (Auxiliary Carry Flag):如果算术操作在结果的第三位发生进位或者借位则将该标志置1，主要应用于BCD运算。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ZF (Zero Flag): 如果运算的结果为0，则设置为1，否则清零，经常和cmp或者test等指令一起使用&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-1"&gt;1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-2"&gt;2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-3"&gt;3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-4"&gt;4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-5"&gt;5&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov eax, &lt;span style="color:#40a070"&gt;100&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mov ecx, &lt;span style="color:#40a070"&gt;100&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cmp eax, ecx &lt;span style=""&gt;#&lt;/span&gt; cmp指令相当于SUB指令&lt;span style=""&gt;，但是相减的结果不保存到第一个操作数中&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;test eax, eax &lt;span style=""&gt;#&lt;/span&gt; test指令相当于AND指令&lt;span style=""&gt;，但是与的结果并不保存在第一个操作数中&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;SF (Sign Flag): 该标志被设置为有符号整数的最高有效位，0为正，反之为负&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;OF (Overflow flag) ：溢出标志用于反映有符号数加减运算所得出结果是否溢出。&lt;/p&gt;
&lt;p&gt;如果是无符号数运算，是否溢出看CF位；&lt;/p&gt;
&lt;p&gt;有符号数看OF&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;DF （Direction Flag）：这个方向标志控制串指令（MOVS, CMPS, SCAS, LODS以及STOS）。设置DF标志使得串指令自动递减，清除该标志则使得串指令自动递增。STD和CLD指令分别用于设置以及清除DF标志。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指令&lt;/th&gt;
&lt;th&gt;意义&lt;/th&gt;
&lt;th&gt;标志位&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;JE, JZ&lt;/td&gt;
&lt;td&gt;结果为零则跳转（相等时跳转）&lt;/td&gt;
&lt;td&gt;ZF=1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JNE, JNZ&lt;/td&gt;
&lt;td&gt;结果不为零则跳转（不相等时跳转）&lt;/td&gt;
&lt;td&gt;ZF=0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JS&lt;/td&gt;
&lt;td&gt;结果为负则跳转&lt;/td&gt;
&lt;td&gt;SF=1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;hellip;&lt;/td&gt;
&lt;td&gt;&amp;hellip;&lt;/td&gt;
&lt;td&gt;&amp;hellip;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h1 id="清华大学-汇编语言程序设计"&gt;清华大学-汇编语言程序设计&lt;/h1&gt;
&lt;h2 id="基础知识"&gt;基础知识&lt;/h2&gt;
&lt;p&gt;各类指令集初步&lt;/p&gt;
&lt;p&gt;数制与整数表示&lt;/p&gt;
&lt;p&gt;浮点数表示&lt;/p&gt;
&lt;h2 id="x86汇编att风格"&gt;X86汇编（AT&amp;amp;T风格）&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;AT&amp;amp;T风格的汇编&lt;/p&gt;
&lt;p&gt;movl source, dist&lt;/p&gt;
&lt;p&gt;其中mov后边的l表示操作的字长， AT&amp;amp;T先原地址后目标地址&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="80x86计算机组成与保护模式"&gt;80x86计算机组成与保护模式&lt;/h3&gt;
&lt;p&gt;​ 80386有三种工作模式：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-1"&gt;1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-2"&gt;2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-3"&gt;3&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt;-&lt;/span&gt; &lt;span style=""&gt;实模式：操作相当于一个可进行&lt;/span&gt;&lt;span style="color:#40a070"&gt;32&lt;/span&gt;&lt;span style=""&gt;位快速运算的&lt;/span&gt;&lt;span style="color:#40a070"&gt;8086&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt;-&lt;/span&gt; &lt;span style=""&gt;保护模式：是&lt;/span&gt;&lt;span style="color:#40a070"&gt;80&lt;/span&gt;x86设计目标全部达到的工作模式&lt;span style=""&gt;，通过对程序使用的存储区采用分段、分页的存储管理机制，以达到分级使用、互不干扰的保护目的。能为每个任务提供一台虚拟处理器，使每个任务单独执行，快速切换。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt;-&lt;/span&gt; &lt;span style=""&gt;虚拟&lt;/span&gt;&lt;span style="color:#40a070"&gt;8086&lt;/span&gt;&lt;span style=""&gt;模式：保护模式下同时模拟多个&lt;/span&gt;&lt;span style="color:#40a070"&gt;8086&lt;/span&gt;&lt;span style=""&gt;处理器&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="x86指令系统与寻址方式"&gt;X86指令系统与寻址方式&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;间接寻址 &lt;code&gt; （R）: Mem[Reg[R]]&lt;/code&gt; 表示寄存器R指定内存的地址，例：&lt;code&gt;movl (%ecx), %eax&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;基址+偏移量&lt;/code&gt; 寻址 &lt;code&gt; D(R) : Mem[Reg[R]+D]&lt;/code&gt; 寄存器R指定内存起始地址，常数D给出偏移量， 例，&lt;code&gt;movl 8(%ebp), %edx&lt;/code&gt;表示把&lt;code&gt;%ebp&lt;/code&gt;中取出一个数加上8作为内存的地址。&lt;/li&gt;
&lt;li&gt;变址寻址 &lt;code&gt;D(Rb, Ri, S) : Mem[Reg[Rb] + S* Reg[Ri] +D]&lt;/code&gt;, 常量D给出地址偏移量，基址寄存器Rb是8个通用寄存器之一，索引寄存器Ri，S是比例因子，取值为1，2，4，8。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;leal src, dist &lt;/code&gt;指令将&lt;code&gt;src&lt;/code&gt;表示的地址计算出来并传递给&lt;code&gt;dist&lt;/code&gt;。 比如：&lt;code&gt;leal (%edx, %edx, 2), %edx&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;C与x86汇编&lt;/p&gt;
&lt;p&gt;x86汇编语言程序格式与基本编程&lt;/p&gt;
&lt;h1 id="att和intel汇编格式主要区别"&gt;AT&amp;amp;T和Intel汇编格式主要区别&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;在Intel格式中大多使用大写字母，而AT&amp;amp;T格式中都使用小写字母&lt;/li&gt;
&lt;li&gt;在AT&amp;amp;T格式中，寄存器名上要加上“%”作为前缀，而Intel格式则不带前缀。&lt;/li&gt;
&lt;li&gt;在AT&amp;amp;T格式中，指令的源操作数在前，目标在后，恰好和Intel格式完全相反。&lt;/li&gt;
&lt;li&gt;在AT&amp;amp;T格式中，访问内存指令的操作数大小由操作码后缀来决定。用作操作码后缀的字母有b(表示8位)，w(表示16位), l(32位)。而在Intel格式中，则是在表示内存单元的操作数前面加上“BYTE PTR” , &amp;ldquo;WORD PTR&amp;rdquo;, &amp;ldquo;DWORD PTR&amp;quot;来表示的。&lt;/li&gt;
&lt;li&gt;AT&amp;amp;T中的立即数要加上&amp;rdquo;$&amp;ldquo;作为前缀，Intel格式不带前缀。&lt;/li&gt;
&lt;li&gt;AT&amp;amp;T格式中，绝对转移或者调用指令jump/call的操作数，要加上&amp;rdquo;*&amp;ldquo;作为前缀。Intel格式不用。&lt;/li&gt;
&lt;li&gt;间接寻址的一般格式：Intel格式：&lt;code&gt;SECTION:[BASE + INDEX*SCALE+DISP]&lt;/code&gt;;AT&amp;amp;T格式：&lt;code&gt;section:disp(base, index, scale)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;远程的转移指令和子程序调用指令的操作码名称，在AT&amp;amp;T中为&amp;quot;ljmp&amp;quot;和&amp;quot;lcall&amp;rdquo;，而在Intel格式中为“JMP FAR”和&amp;quot;CALL FAR&amp;quot;。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="linux内核中的汇编语言规则"&gt;&lt;a href="https://blog.csdn.net/armlinuxww/article/details/13168075"&gt;linux内核中的汇编语言规则&lt;/a&gt;&lt;/h1&gt;
&lt;h1 id="哈工大李治军操作系统"&gt;哈工大李治军操作系统&lt;/h1&gt;
&lt;h2 id="linux内核中使用了三种汇编"&gt;linux内核中使用了三种汇编&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;as86汇编：能产生16位代码的Intel 8086汇编。 主要构成了bootsect, setup代码。&lt;/li&gt;
&lt;li&gt;GNU as汇编：能产生32位代码的AT&amp;amp;T系统V语法。主要构成保护模式代码。&lt;/li&gt;
&lt;li&gt;GNU内嵌汇编：进程调度代码。&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>GDT LDT IDT TSS</title><link>/os-basics/2019-04-15-gdt-ldt-idt-tss/</link><pubDate>Mon, 15 Apr 2019 16:01:23 +0800</pubDate><author>yuanye.ma@qq.com (Yuanye Ma)</author><guid>/os-basics/2019-04-15-gdt-ldt-idt-tss/</guid><description>&lt;h1 id="gdt-ldt-idt-tss"&gt;GDT LDT IDT TSS&lt;/h1&gt;
&lt;p&gt;和一个段有关的信息需要8个字节来描述，所以称之为&lt;strong&gt;段描述符（Segment Descriptor）&lt;/strong&gt;，每个段都需要一个描述符。为了存放这些描述符，需要在内存中开辟出一段空间。在这段空间中，所有的描述符都是挨在一起的，集中存放的，这就构成了描述符表。&lt;/p&gt;
&lt;p&gt;i386中，除了段描述符，还有一种描述符叫做“&lt;strong&gt;门描述符&lt;/strong&gt;”，描述控制转移的入口点，也就是异常控制中断的入口点，通过这种门可以实现特权级的转变和任务的切换。&lt;/p&gt;
&lt;h2 id="gdt--gdtr"&gt;GDT &amp;amp; GDTR&lt;/h2&gt;
&lt;p&gt;GDT : &lt;strong&gt;Global Descriptor Table&lt;/strong&gt; , 全局描述符表，用来存放全局的段描述符。&lt;/p&gt;
&lt;p&gt;GDTR ： &lt;strong&gt;Global Descriptor Table Register&lt;/strong&gt;， 用来保存全局描述符表（GDT）的起始地址。&lt;/p&gt;
&lt;p&gt;整个系统中，全局描述符表GDT只有一张(一个处理器对应一个GDT)，GDT可以被放在内存的任何位置，但CPU必须知道GDT的入口，也就是基地址放在哪里，Intel的设计者门提供了一个寄存器GDTR用来存放GDT的入口地址，程序员将GDT设定在内存中某个位置之后，可以通过LGDT指令将GDT的入口地址装入此寄存器，从此以后，CPU就根据此寄存器中的内容作为GDT的入口来访问GDT了。GDTR中存放的是GDT在内存中的基地址和其表长界限。&lt;/p&gt;
&lt;p&gt;&lt;img src="/os-basics/2019-04-15-gdt-ldt-idt-tss/1.png" alt="image-20201120211741700"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;全局描述符表线性基地址：保存的是全局描述符表在内存中的起始线性地址；&lt;/li&gt;
&lt;li&gt;16位的全局描述符表边界：在数值上等于表的大小（总字节数）减一，16位决定了表最大65536字节（64KB），又因为每个描述符占8个字节，所以最多能有8192个描述符；&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;**段选择子（Selector）**由GDTR访问全局描述符表是通过“段选择子”（实模式下的段寄存器）来完成的。段选择子是一个16位的寄存器（同实模式下的段寄存器相同）。&lt;/p&gt;
&lt;p&gt;&lt;img src="/os-basics/2019-04-15-gdt-ldt-idt-tss/2.png" alt="image-20201120213926975"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;描述符索引 ： 指示段描述符在GDT中的下标；&lt;/li&gt;
&lt;li&gt;TI ： 描述符表指示器（Table Indicator）0表示此描述符在GDT中，1表示此描述符在LDT中；&lt;/li&gt;
&lt;li&gt;RPL：请求特权级，表示给出当前选择子的那个程序的特权级；&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="/os-basics/2019-04-15-gdt-ldt-idt-tss/3.png" alt="image-20201120212305819"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;G ：粒度（Granularity）位，解释段界限的含义，0表示段界限以字节为单位；1表示段界限以4KB为单位；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;S ： 类型（Descriptor Type）位，0表示是一个系统段；1表示是一个代码段或者数据段；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;DPL : 表示描述符的特权级( Descriptor Privilege Level)。 对应CPU的0,1,2,3特权级，数字越小特权级越高；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;P ： 段存在（Segment Present）位，描述此段是否在内存中，在为1，不在为0；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;D/B：默认的操作数大小，如果代码段的D位为0，那么处理器在这个段上执行时，将使用16位指令指针寄存器IP来取指令，否则用32位的取指令；对于栈段，此位为B位，用于在进行隐式的栈操作时，是使用SP寄存器还是ESP寄存器，如果该位为0，使用SP,否则使用ESP；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;L： 64位代码段标志，保留给64位系统使用，否则填0；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;TYPE段共4位，用于指示描述符的子类型，X表示是否可执行。E表示数据段的扩展方向，E=0表示向上扩展，也就是向高地址方向扩展，即普通数据段；E=1表示向下扩展，即栈段；W=0表示不可写入；C=0表示非依从代码段，这样的代码段可以从与它特权级相同的代码段调用；C=1表示允许从低特权级的程序转移到该段执行。&lt;/p&gt;
&lt;p&gt;&lt;img src="/os-basics/2019-04-15-gdt-ldt-idt-tss/4.png" alt="image-20201120213542008"&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="ldt--ldtr"&gt;LDT &amp;amp; LDTR&lt;/h2&gt;
&lt;p&gt;为了有效地在任务之间实施隔离，处理器建议每个任务都应该具有自己的描述符表，称之为局部描述符表LDT（Local Descriptor Table），并且将属于自己的段放在LDT中。&lt;/p&gt;
&lt;p&gt;局部描述符表可以有若干张，每个任务可以有一张。我们可以这样理解GDT和LDT：GDT为一级描述符表，LDT为二级描述符表。&lt;/p&gt;
&lt;p&gt;为了追踪和访问这些LDT，处理器使用了局部描述符表寄存器LDTR。在一个多任务系统中，会有很多任务在轮流执行，正在执行的那个任务，称为当前任务（Current Task）,因为LDTR只有一个，所以，它只指向当前任务的LDT。每当发生任务切换时，LDTR的内容会被更新。&lt;/p&gt;
&lt;h2 id="idt--idtr"&gt;IDT &amp;amp; IDTR&lt;/h2&gt;
&lt;p&gt;中断描述符表（Interrupt Descriptor Table, IDT）保存的是和中断过程有关的描述符，包括中断门、陷阱门和任务门，整个系统中只有一个IDT。&lt;/p&gt;
&lt;p&gt;中断描述符表寄存器（Interrupt Descriptor Table Register,IDTR）保存着中断描述符表在内存中的线性基地址和界限。&lt;/p&gt;
&lt;p&gt;&lt;img src="/os-basics/2019-04-15-gdt-ldt-idt-tss/5.png" alt="image-20201120221137076"&gt;&lt;/p&gt;
&lt;p&gt;中断描述符表的每一行是一个门描述符。&lt;/p&gt;
&lt;p&gt;门描述符：中断门(Interrupt Gate)，陷阱门（Trap Gate） 任务门(Task Gate)和调用门(Interrupt Gate)，其中中断门和陷阱门必须存放在IDT中，任务门和调用门可以存储在GDT\LDT和IDT中。除了任务门外其他三种门的结构基本相同， 中断门，陷阱门，调用门结构如下图所示。任务门结构在下一小节&lt;code&gt;TSS&amp;amp;TR&lt;/code&gt;后边有贴图。&lt;/p&gt;
&lt;p&gt;&lt;img src="/os-basics/2019-04-15-gdt-ldt-idt-tss/6.png" alt="image-gate"&gt;&lt;/p&gt;
&lt;p&gt;中断i发生 -&amp;gt;确定与中断或异常关联的向量i-&amp;gt; 通过查询IDT的第i项目 -&amp;gt; 得到中断描述符（门）-&amp;gt; 得到段选择符 -&amp;gt; 查询GDT - &amp;gt;得到段描述符 -&amp;gt; 得到段的基地址 -&amp;gt; 段基地址加上中断描述符中的偏移地址 -&amp;gt; 得到中断服务程序的入口地址。 过程中或检查特权级，如果特权级发生了变化还会发生栈切换。&lt;/p&gt;
&lt;p&gt;中断门和陷阱门的唯一区别在于，通过中断门进入中断服务程序时CPU会自动关闭中断，也就是将CPU中的&lt;code&gt;EFLAGS&lt;/code&gt;寄存器的&lt;code&gt;IF&lt;/code&gt;标志位清成0，即防止中断嵌套。而通过陷阱门进入服务程序时则维持&lt;code&gt;IF&lt;/code&gt;标志位不变。&lt;/p&gt;
&lt;h2 id="tss--tr"&gt;TSS &amp;amp; TR&lt;/h2&gt;
&lt;p&gt;任务状态段(Task State Segment : TSS）是一个专门用来保存任务运行&lt;strong&gt;现场&lt;/strong&gt;的数据结构，其中包括CPU中所有与具体进程有关的寄存器的内容（包含页面目录指针CR3），还包括了三个堆栈指针。中断发生时，CPU在中断向量表中找到相应的表项。如果找到的表项是一个&lt;strong&gt;任务门&lt;/strong&gt;，并且通过了优先级别的检查，CPU就会将当前任务的运行现场保存相应的TSS中，并将任务门所指向的TSS作为当前任务，将其内容装入CPU中各个寄存器，从而完成一次任务的切换。&lt;/p&gt;
&lt;p&gt;任务寄存器TR用来指向当前任务的TSS。 TR寄存器在处理器中也是只有一个，当任务切换发生时，TR寄存器的内容会跟着指向新的任务的TSS。这个过程是这样的：首先，处理器将当前任务的现场信息保存到由TR寄存器指向的TSS, 然后，再使TR寄存器指向新的TSS，并从新任务的TSS中恢复现场。&lt;/p&gt;
&lt;p&gt;&lt;img src="/os-basics/2019-04-15-gdt-ldt-idt-tss/7.png" alt="image-20201120220217034"&gt;&lt;/p&gt;
&lt;p&gt;进入中断服务函数，或者发生任务切换时，栈也要发生切换，TSS中除了保存有常规的寄存器内容外，还有三个额外的堆栈指针（&lt;code&gt;SS&lt;/code&gt;和&lt;code&gt;ESP&lt;/code&gt;），这三个额外的堆栈指针分别用于当CPU在目标代码段中的运行级别为0,1,2时的栈。图中的&lt;code&gt;SS0&lt;/code&gt; &lt;code&gt;ESP0&lt;/code&gt; &lt;code&gt;SS1&lt;/code&gt; &lt;code&gt;ESP1&lt;/code&gt;等就对应不同级别下的栈。&lt;/p&gt;
&lt;p&gt;&lt;img src="/os-basics/2019-04-15-gdt-ldt-idt-tss/task_gate.png" alt="image-task_gate"&gt;&lt;/p&gt;
&lt;h2 id="dpl--cpl--rpl"&gt;DPL &amp;amp; CPL &amp;amp; RPL&lt;/h2&gt;
&lt;p&gt;DPL : Descriptor Privilege Level, 存放在段描述符中，用于表示段的特权级;&lt;/p&gt;
&lt;p&gt;CPL : Current Privilege Level, 代表当前执行程序的特权级;&lt;/p&gt;
&lt;p&gt;RPL : Request Privilege Level, 请求特权级，存放在段选择子中.&lt;/p&gt;
&lt;p&gt;每个段描述符中都有一个&lt;code&gt;DPL&lt;/code&gt;位段，即&lt;strong&gt;描述项优先级别&lt;/strong&gt;位段。当CPU通过中断门找到一个代码段描述符，并进而转入相应的服务程序时，就把这个代码段描述项装入CPU中，而描述项的&lt;code&gt;DPL&lt;/code&gt;就变成CPU的当前运行级别，即&lt;code&gt;CPL&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;而中断门也有一个&lt;code&gt;DPL&lt;/code&gt;，当通过&lt;code&gt;int&lt;/code&gt;指令进入一个中断服务程序时，在指令中给出一个中断向量，CPU先根据该中断向量找到中断门，将中断门的&lt;code&gt;DPL&lt;/code&gt;和当前CPU的&lt;code&gt;CPL&lt;/code&gt;进行对比，&lt;code&gt;CPL&lt;/code&gt;必须小于等于&lt;code&gt;DPL&lt;/code&gt;才能通过该中断门。穿过门后再对比CPU的&lt;code&gt;CPL&lt;/code&gt;和段描述符的&lt;code&gt;DPL&lt;/code&gt;。&lt;/p&gt;</description></item><item><title>GNU C 内联汇编</title><link>/os-basics/2019-04-15-gnu-c-%E5%B5%8C%E5%85%A5%E6%B1%87%E7%BC%96/</link><pubDate>Mon, 15 Apr 2019 16:01:23 +0800</pubDate><author>yuanye.ma@qq.com (Yuanye Ma)</author><guid>/os-basics/2019-04-15-gnu-c-%E5%B5%8C%E5%85%A5%E6%B1%87%E7%BC%96/</guid><description>&lt;h1 id="gnu-c-内联汇编"&gt;GNU C 内联汇编&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;内核代码中有很多内联汇编，为了更好的读懂内核，上网搜罗了一些内联汇编的文章在这里，方便自己随时查阅。&lt;a href="https://dirtysalt.github.io/html/gcc-asm.html"&gt;这篇文章&lt;/a&gt;比较有价值，特别是后半段引用的中国科大BBS站的一些邮件列表，“对 《gcc中的内嵌汇编语言》一文的补充说明”中的一些例子描述的很好，能够帮助更好的理解内联汇编。这里摘抄一些。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://www.linuxprobe.com/gcc-how-to.html"&gt;参考二&lt;/a&gt; &lt;a href="https://sites.google.com/site/wyylview/linux-qian-ru-hui-bian"&gt;参考三&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="基本形式"&gt;基本形式&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-16"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-16"&gt;16&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-17"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-17"&gt;17&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-18"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-18"&gt;18&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-19"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-19"&gt;19&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-20"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-20"&gt;20&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-21"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-21"&gt;21&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-22"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-22"&gt;22&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-23"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-23"&gt;23&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;__asm__ &lt;span style="color:#06287e"&gt;__volatile__&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#4070a0"&gt;&amp;#34;xorps %%xmm0,%%xmm1&lt;/span&gt;&lt;span style="color:#4070a0;font-weight:bold"&gt;\n\t&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#4070a0"&gt;&amp;#34;1:&lt;/span&gt;&lt;span style="color:#4070a0;font-weight:bold"&gt;\n\t&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#4070a0"&gt;&amp;#34;movdqa %%xmm0,%%xmm1&lt;/span&gt;&lt;span style="color:#4070a0;font-weight:bold"&gt;\n\t&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#4070a0"&gt;&amp;#34;pcmpgtd (%1)&lt;/span&gt;,&lt;span style="color:#666"&gt;%%&lt;/span&gt;xmm1&lt;span style=""&gt;\&lt;/span&gt;n&lt;span style=""&gt;\&lt;/span&gt;t&lt;span style="color:#4070a0"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#4070a0"&gt;&amp;#34;andps %%xmm1,%%xmm0&lt;/span&gt;&lt;span style="color:#4070a0;font-weight:bold"&gt;\n\t&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#4070a0"&gt;&amp;#34;andnps (%1),%%xmm1&lt;/span&gt;&lt;span style="color:#4070a0;font-weight:bold"&gt;\n\t&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#4070a0"&gt;&amp;#34;orps %%xmm1,%%xmm0&lt;/span&gt;&lt;span style="color:#4070a0;font-weight:bold"&gt;\n\t&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#4070a0"&gt;&amp;#34;addq $16,%1&lt;/span&gt;&lt;span style="color:#4070a0;font-weight:bold"&gt;\n\t&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#4070a0"&gt;&amp;#34;subq $4,%2&lt;/span&gt;&lt;span style="color:#4070a0;font-weight:bold"&gt;\n\t&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#4070a0"&gt;&amp;#34;jnz 1b&lt;/span&gt;&lt;span style="color:#4070a0;font-weight:bold"&gt;\n\t&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#4070a0"&gt;&amp;#34;movdqu %%xmm0,(%3)&lt;/span&gt;&lt;span style="color:#4070a0;font-weight:bold"&gt;\n\t&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#4070a0"&gt;&amp;#34;movl (%3),%%eax&lt;/span&gt;&lt;span style="color:#4070a0;font-weight:bold"&gt;\n\t&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#4070a0"&gt;&amp;#34;cmpl 4(%3),%%eax&lt;/span&gt;&lt;span style="color:#4070a0;font-weight:bold"&gt;\n\t&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#4070a0"&gt;&amp;#34;cmovll 4(%3),%%eax&lt;/span&gt;&lt;span style="color:#4070a0;font-weight:bold"&gt;\n\t&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#4070a0"&gt;&amp;#34;cmpl 8(%3),%%eax&lt;/span&gt;&lt;span style="color:#4070a0;font-weight:bold"&gt;\n\t&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#4070a0"&gt;&amp;#34;cmovll 8(%3),%%eax&lt;/span&gt;&lt;span style="color:#4070a0;font-weight:bold"&gt;\n\t&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#4070a0"&gt;&amp;#34;cmpl 12(%3),%%eax&lt;/span&gt;&lt;span style="color:#4070a0;font-weight:bold"&gt;\n\t&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#4070a0"&gt;&amp;#34;cmovll 12(%3),%%eax&lt;/span&gt;&lt;span style="color:#4070a0;font-weight:bold"&gt;\n\t&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#4070a0"&gt;&amp;#34;movl %%eax,%0&lt;/span&gt;&lt;span style="color:#4070a0;font-weight:bold"&gt;\n\t&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#666"&gt;:&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#34;=m&amp;#34;&lt;/span&gt;(mx) &lt;span style="color:#60a0b0;font-style:italic"&gt;//输出部分
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#666"&gt;:&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#34;r&amp;#34;&lt;/span&gt;(a),&lt;span style="color:#4070a0"&gt;&amp;#34;r&amp;#34;&lt;/span&gt;((&lt;span style="color:#902000"&gt;long&lt;/span&gt; &lt;span style="color:#902000"&gt;long&lt;/span&gt;)N),&lt;span style="color:#4070a0"&gt;&amp;#34;r&amp;#34;&lt;/span&gt;(tmp) &lt;span style="color:#60a0b0;font-style:italic"&gt;//输入部分
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#666"&gt;:&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#34;eax&amp;#34;&lt;/span&gt;); &lt;span style="color:#60a0b0;font-style:italic"&gt;//clobber
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;GNU C 内联汇编以关键字&lt;code&gt;__asm__&lt;/code&gt;开头，表示后边部分为汇编代码; &lt;code&gt;__volatile__&lt;/code&gt;表示告诉编译器，不要优化后边的代码，严禁将后边的汇编语句和其他语句进行重组优化。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;寄存器使用&lt;code&gt;%%&lt;/code&gt;开头；&lt;/li&gt;
&lt;li&gt;立即数使用&lt;code&gt;$&lt;/code&gt;开头；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;%0 %1 %2&lt;/code&gt;用来引用输入输出部分的内容；&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;内联汇编一共分为四部分 ： &lt;code&gt;instruction&lt;/code&gt; \ &lt;code&gt;output operand&lt;/code&gt;\ &lt;code&gt;input operand&lt;/code&gt; \ &lt;code&gt;clobber&lt;/code&gt;不同部分之间以冒号分割。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;instruction&lt;/code&gt; : 是汇编指令，每条指令最好以&lt;code&gt;&amp;quot;\n\t&amp;quot;&lt;/code&gt;结尾；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;output operand&lt;/code&gt; : 是输出部分。 每个输出部分使用 , （逗号）分隔. &amp;ldquo;=&amp;ldquo;作为修饰符, &amp;ldquo;m&amp;quot;是约束符，表示存放位置, ()里面表示对应C程序变量。例如: 。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;input operand&lt;/code&gt; ： 是输入部分。 和输出部分规则一样。例如：。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;clobber&lt;/code&gt; : 这个部分是告诉gcc在这条指令里面我们会修改什么值.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="操作数限定字符"&gt;操作数限定字符&lt;/h2&gt;
&lt;p&gt;操作数限定字符串中利用规定的限定字符来描述相应的操作数，一些常用的限定字符有：（还有一些没有涉及的限定字符，参见gcc.info）&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;m&amp;rdquo;:操作数是内存变量。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;o&amp;rdquo;:操作数是内存变量，但它的寻址方式必须是“偏移量”类型的，
也就是基址寻址或者基址加变址寻址。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;V&amp;rdquo;:操作数是内存变量，其寻址方式非“偏移量”类型。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;quot; &amp;ldquo;:操作数是内存变量，其地址自动增量。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;r&amp;rdquo;:操作数是通用寄存器。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;i&amp;rdquo;:操作数是立即操作数。（其值可在汇编时确定）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;n&amp;rdquo;:操作数是立即操作数。有些系统不支持除字(双字节)以外的
立即操作数，这些操作数要用&amp;quot;n&amp;quot;而不是&amp;quot;i&amp;quot;来描述。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;g&amp;rdquo;:操作数可以是立即数，内存变量或者寄存器，只要寄存器属
于通用寄存器。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;X&amp;rdquo;:操作数允许是任何类型。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;0&amp;rdquo;,&amp;ldquo;1&amp;rdquo;,&amp;hellip;,&amp;ldquo;9&amp;rdquo;:操作数与某个指定的操作数匹配。也就是说，
该操作数就是指定的那个操作数。例如，如果用&amp;quot;0&amp;quot;来描述&amp;rdquo;%1&amp;quot;操作
数，那么&amp;rdquo;%1&amp;quot;引用的其实就是&amp;rdquo;%0&amp;quot;操作数。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;p&amp;rdquo;:操作数是一个合法的内存地址（指针）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;=&amp;quot;:操作数在指令中是只写的（输出操作数）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;+&amp;quot;:操作数在指令中是读-写类型的（输入-输出操作数）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;a&amp;rdquo;:寄存器EAX。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;b&amp;rdquo;:寄存器EBX。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;c&amp;rdquo;:寄存器ECX。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;c&amp;rdquo;:寄存器ECX。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;d&amp;rdquo;:寄存器EDX。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;q&amp;rdquo;:寄存器&amp;quot;a&amp;rdquo;,&amp;ldquo;b&amp;rdquo;,&amp;ldquo;c&amp;quot;或者&amp;quot;d&amp;rdquo;。-&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;A&amp;rdquo;:寄存器&amp;quot;a&amp;quot;或者&amp;quot;d&amp;rdquo;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;f&amp;rdquo;:浮点数寄存器。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;t&amp;rdquo;:第一个浮点数寄存器。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;u&amp;rdquo;:第二个浮点数寄存器。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;D&amp;rdquo;:寄存器di。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;S&amp;rdquo;:寄存器si。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;I&amp;rdquo;:0-31之间的立即数。（用于32位的移位指令）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;J&amp;rdquo;:0-63之间的立即数。（用于64位的移位指令）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;N&amp;rdquo;:0-255之间的立即数。(用于&amp;quot;out&amp;quot;指令）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;G&amp;rdquo;:标准的80387浮点常数。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="gcc-对内嵌汇编语言的处理方式"&gt;gcc 对内嵌汇编语言的处理方式&lt;/h2&gt;
&lt;p&gt;gcc在编译内嵌汇编语言时,采取的步骤如下&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;变量输入: 根据限定符的内容将输入操作数放入合适的寄存器,如果限定符指定为立即数(&amp;ldquo;1i&amp;rdquo;)或内存变量(&amp;ldquo;m&amp;rdquo;),则该步被省略,如果限定符没有具体指定输入操作数的类型(如常用的&amp;quot;g&amp;rdquo;),gcc会视需要决定是否将该操作数输入到某个寄存器.这样每个占位符都与某个寄存器,内存变量,或立即数形成了一一对应的关系.这就是对第二个冒号后内容的解释.如&lt;code&gt;::&amp;quot;a&amp;quot;(foo),&amp;quot;i&amp;quot;(100),&amp;quot;m&amp;quot;(bar)&lt;/code&gt;表示%0对应eax寄存器,%1对应100,%2对应内存变量bar.&lt;/li&gt;
&lt;li&gt;生成代码: 然后根据这种一一对应的关系(还应包括输出操作符),用这些寄存器,内存变量,或立即数来取代汇编代码中的占位符(则有点像宏操作),注意,则一步骤并不检查由这种取代操作所生成的汇编代码是否合法,例如,如果有这样一条指令&lt;code&gt;asm(&amp;quot;movl %0,%1&amp;quot;::&amp;quot;m&amp;quot;(foo),&amp;quot;m&amp;quot;(bar));&lt;/code&gt;如果你用&lt;code&gt;gcc -c -S&lt;/code&gt;选项编译该源文件,那么在生成的汇编文件中,你将会看到生成了&lt;code&gt;movl foo,bar&lt;/code&gt;这样一条指令,这显然是错误的.这个错误在稍后的编译检查中会被发现.&lt;/li&gt;
&lt;li&gt;变量输出: 按照输出限定符的指定将寄存器的内容输出到某个内存变量中,如果输出操作数的限定符指定为内存变量(&amp;ldquo;m&amp;rdquo;),则该步骤被省略.这就是对第一个冒号后内容的解释, 如&lt;code&gt;:asm(&amp;quot;mov %0,%1&amp;quot;:&amp;quot;=m&amp;quot;(foo),&amp;quot;=a&amp;quot;(bar):);&lt;/code&gt;编译后为
&lt;pre tabindex="0"&gt;&lt;code class="language-assembly" data-lang="assembly"&gt; #APP
movl foo,eax
#NO_APP
movl eax,bar
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;该语句虽然有点怪怪的,但它很好的体现了gcc的运作方式.　&lt;/p&gt;</description></item><item><title>x86平台Linux中断机制</title><link>/os-basics/2019-04-15-x86%E5%B9%B3%E5%8F%B0%E9%80%9A%E7%94%A8%E4%B8%AD%E6%96%AD/</link><pubDate>Mon, 15 Apr 2019 16:01:23 +0800</pubDate><author>yuanye.ma@qq.com (Yuanye Ma)</author><guid>/os-basics/2019-04-15-x86%E5%B9%B3%E5%8F%B0%E9%80%9A%E7%94%A8%E4%B8%AD%E6%96%AD/</guid><description>&lt;h1 id="x86平台linux中断机制"&gt;x86平台Linux中断机制&lt;/h1&gt;
&lt;p&gt;[toc]&lt;/p&gt;
&lt;h2 id="基础知识"&gt;基础知识&lt;/h2&gt;
&lt;p&gt;NMI不能被IF禁止，其中断向量号由系统固定分配。&lt;/p&gt;
&lt;p&gt;外部中断一般可分为非屏蔽中断和可屏蔽中断。对于非屏蔽中断，cpu直接在对应的中断向量表中取得中断入口地址，执行中断处理程序。而对于可屏蔽中断，一般是用8259A等中断管理器来管理。cpu从中断管理器中得到一个中断请求时，会去检查一下中断允许标志IF，若IF为1则取出中断类型码，从中断向量表中取得中断入口地址，执行中断处理程序。若IF为0，cpu将不响应外部提出的中断请求。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;IRQ&lt;/strong&gt; : &lt;code&gt;Interrupt ReQuest&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PIC&lt;/strong&gt; : &lt;code&gt;Programmable Interrupt Controller&lt;/code&gt; 可编程中断控制器&lt;/p&gt;
&lt;p&gt;向量：每个中断和异常，由0-255之间的数来标识，Intel把这个无符号的整数叫做向量（&lt;code&gt;vector&lt;/code&gt;）&lt;/p&gt;
&lt;p&gt;PIC的作用：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;监视IRQ线，检查产生的信号。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果有引发信号出现在IRQ线上：&lt;/p&gt;
&lt;p&gt;a. 把接收到的引发信号转换成对应的向量。&lt;br&gt;
b. 把这个向量存放在中断控制器的一个I/O端口，从而允许CPU通过数据总线读取此向量。&lt;br&gt;
c. 把引发信号发送到处理器的&lt;code&gt;INTR&lt;/code&gt;引脚，即产生一个中断。&lt;br&gt;
d. 等待，直到CPU通过把这个中断信号写进可编程中断控制器的一个I/O端口来确认，这种情况发生时，清&lt;code&gt;INTR&lt;/code&gt;线。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;返回第1步。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;IRQ线从0开始编号，因此&lt;code&gt;IRQn&lt;/code&gt;关联的Intel的缺省向量是&lt;code&gt;n+32&lt;/code&gt;(CPU保留了一部分向量来处理异常)。可以通过向中断控制器端口发布合适的指令，修改IRQ和向量之间的映射，以及有选择的禁止或者激活相应的IRQ，此禁止只是告诉PIC暂时不向CPU发布此IRQ中断，而一旦此IRQ被再次激活，PIC又会发送此IRQ给CPU 。可屏蔽中断的全局屏蔽或者非屏蔽，由CPU的&lt;code&gt;eflags&lt;/code&gt;寄存器的&lt;code&gt;IF&lt;/code&gt;标志位决定，&lt;code&gt;cli&lt;/code&gt;和&lt;code&gt;sti&lt;/code&gt;指令分别清楚和设置该标志。&lt;/p&gt;
&lt;p&gt;传统的PIC由两片8259A外部芯片级联组成，只能作为单处理器的PIC。在SMP体系结构中，中断需要传递给系统中的每个CPU，为此Intel从Pentiun III开始引入I/O高级可编程控制器（&lt;code&gt;I/O Advanded Programmable Interrupt Controller, I/O APIC&lt;/code&gt;）用以代替老式的8259A PIC。&lt;/p&gt;
&lt;p&gt;多APIC结构：&lt;strong&gt;&lt;code&gt;APIC&lt;/code&gt;总线&lt;/strong&gt;把“前端”&lt;strong&gt;I/O APIC&lt;/strong&gt;连接到&lt;strong&gt;本地APIC&lt;/strong&gt;。来自设备的&lt;code&gt;IRQ&lt;/code&gt;线连接到&lt;code&gt;I/O APIC&lt;/code&gt;，相对于本地APIC来说，&lt;code&gt;I/O APIC&lt;/code&gt;起路由作用。 &lt;code&gt;I/O APIC&lt;/code&gt;中的中断重定向表将每个外部IRQ信号转换为一条消息，然后，通过&lt;code&gt;APIC&lt;/code&gt;总线发送给一个或多个CPU的本地&lt;code&gt;APIC&lt;/code&gt;单元。多&lt;code&gt;APIC&lt;/code&gt;系统还允许&lt;code&gt;CPU&lt;/code&gt;产生处理器间中断（&lt;code&gt;interprocessor interrupt&lt;/code&gt;, 简称&lt;code&gt;IPI&lt;/code&gt;）。&lt;/p&gt;
&lt;p&gt;目前大部分单处理器系统都包含一个I/O APIC芯片，可以用以下两种方式进行配置：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;作为一种标准的8259A方式的外部PIC连接到CPU。本地APIC被禁止，LINT0和LINT1本地IRQ线分别配置为INTR和NMI引脚。&lt;/li&gt;
&lt;li&gt;作为一种标准的I/O APIC。本地APIC被激活，且所有的外部中断都通过I/O APIC接收。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="/os-basics/2019-04-15-x86%E5%B9%B3%E5%8F%B0%E9%80%9A%E7%94%A8%E4%B8%AD%E6%96%AD/image-20201214121629804.png" alt="image-20201214121629804"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;中断请求队列&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;由于硬件的限制，很多外部设备不得不共享中断线，例如，一些PC配置可以把同一条中断线分配给网卡和图形卡。由此看来，让每个中断源都必须占用一条中断线是不现实的。所以，仅仅中断描述符表并不能提供中断产生的所有信息，内核必须对中断线给出进一步的描述。在Linux设计中，专门为每个中断请求IRQ设置了一个队列，这就是我们所说的中断请求队列。&lt;/p&gt;
&lt;h3 id="关于io-apic的一些更详细的资料"&gt;关于I/O APIC的一些更详细的资料&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://blog.csdn.net/jk198310/article/details/9250355"&gt;PIC 、APIC(IOAPIC LAPIC)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.csdn.net/GerryLee93/article/details/106474994/"&gt;1. IO APIC&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Linux kernel version : &lt;strong&gt;linux 2.6.30.4&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="基本数据结构"&gt;基本数据结构&lt;/h2&gt;
&lt;p&gt;由于通用中断门是让多个中断源共享的，而且允许这种公用的结构在系统运行的过程中动态地变化，所以IDT的初始化阶段只是为每个中断向量，也即每个表项准备一个“中断请求队列”， 从而形成一个中断请求队列的数组，这就是数组&lt;code&gt;irq_desc[]&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;每个队列头部中除了&lt;code&gt;action&lt;/code&gt;用来维持一个由&lt;strong&gt;中断服务程序描述项目&lt;/strong&gt;构成的&lt;strong&gt;单链队列&lt;/strong&gt;外，还有个指针&lt;code&gt;handler&lt;/code&gt;指向另一个数据结构，即&lt;code&gt;hw_interrupt_type&lt;/code&gt;数据结构，此结构主要是一些函数指针，用于该队列，或者该共用“中断通道”的控制，并不对具体的中断源服务。具体的函数取决于&lt;strong&gt;所用的中断控制器&lt;/strong&gt;(比如 i8259A)。其中，函数指针&lt;code&gt;enable&lt;/code&gt;和&lt;code&gt;disable&lt;/code&gt;用于开启和关闭其所属的通道，&lt;code&gt;ack&lt;/code&gt;用于对中断控制器的相应，而&lt;code&gt;end&lt;/code&gt;则用于每次中断服务返回的前夕，这些函数都是在&lt;code&gt;init_IRQ()&lt;/code&gt;函数中调用&lt;code&gt;init_ISA_irqs()&lt;/code&gt;设置好的。 [这两段摘自《Linux内核源代码情景分析》3.3小节]&lt;/p&gt;
&lt;p&gt;&lt;img src="/os-basics/2019-04-15-x86%E5%B9%B3%E5%8F%B0%E9%80%9A%E7%94%A8%E4%B8%AD%E6%96%AD/image-20201214121841163.png" alt="image-20201214121841163"&gt;&lt;/p&gt;
&lt;h3 id="irq_desc_t"&gt;irq_desc_t&lt;/h3&gt;
&lt;p&gt;每个中断向量都有自己的&lt;code&gt;irq_desc_t&lt;/code&gt;描述符，所有这些描述符组织在一起形成了&lt;code&gt;irq_desc&lt;/code&gt;数组。&lt;/p&gt;
&lt;p&gt;根据前一段书中的描述，&lt;code&gt;irq_desc&lt;/code&gt;数组应该就是作者所说的中断请求队列数组，数组中的每一项即每一个&lt;code&gt;struct irq_desc&lt;/code&gt;结构都描述一个“中断请求队列”，&lt;code&gt;struct irqaction&lt;/code&gt;即中断服务程序构成的队列，队列中每一项都对应一个中断服务程序。&lt;code&gt;hw_interrupt_type&lt;/code&gt;在较新版本的内核中被&lt;code&gt;struct irq_chip&lt;/code&gt;取代，指代此中断通道的操作函数。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-16"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-16"&gt;16&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-17"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-17"&gt;17&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-18"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-18"&gt;18&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-19"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-19"&gt;19&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-20"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-20"&gt;20&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-21"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-21"&gt;21&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-22"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-22"&gt;22&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-23"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-23"&gt;23&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-24"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-24"&gt;24&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-25"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-25"&gt;25&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-26"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-26"&gt;26&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-27"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-27"&gt;27&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-28"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-28"&gt;28&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-29"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-29"&gt;29&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-30"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-30"&gt;30&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-31"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-31"&gt;31&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-32"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-32"&gt;32&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-33"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-33"&gt;33&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-34"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-34"&gt;34&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-35"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-35"&gt;35&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-36"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-36"&gt;36&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-37"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-37"&gt;37&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-38"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-38"&gt;38&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-39"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-39"&gt;39&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-40"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-40"&gt;40&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-41"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-41"&gt;41&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-42"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-42"&gt;42&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-43"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-43"&gt;43&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-44"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-44"&gt;44&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-45"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-45"&gt;45&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-46"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-46"&gt;46&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-47"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-47"&gt;47&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-48"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-48"&gt;48&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-49"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-49"&gt;49&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-50"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-50"&gt;50&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-51"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-51"&gt;51&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-52"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-52"&gt;52&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-53"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-53"&gt;53&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-54"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-54"&gt;54&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-55"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-55"&gt;55&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-56"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-56"&gt;56&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-57"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-57"&gt;57&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-58"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-58"&gt;58&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-59"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-59"&gt;59&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-60"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-60"&gt;60&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-61"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-61"&gt;61&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-62"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-62"&gt;62&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-63"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-63"&gt;63&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-64"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-64"&gt;64&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-65"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-65"&gt;65&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-66"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-66"&gt;66&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-67"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-67"&gt;67&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-68"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-68"&gt;68&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-69"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-69"&gt;69&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-70"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-70"&gt;70&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-71"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-71"&gt;71&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-72"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-72"&gt;72&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-73"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-73"&gt;73&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-74"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-74"&gt;74&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-75"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-75"&gt;75&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-76"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-76"&gt;76&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-77"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-77"&gt;77&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-78"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-78"&gt;78&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-79"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-79"&gt;79&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-80"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-80"&gt;80&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-81"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-81"&gt;81&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-82"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-82"&gt;82&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-83"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-83"&gt;83&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-84"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-84"&gt;84&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-85"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-85"&gt;85&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-86"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-86"&gt;86&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-87"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-87"&gt;87&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-88"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-88"&gt;88&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/*include/linux/irq.h*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * struct irq_desc - interrupt descriptor
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @irq: interrupt number for this descriptor
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @timer_rand_state: pointer to timer rand state struct
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @kstat_irqs: irq stats per cpu
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @irq_2_iommu: iommu with this irq
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @handle_irq: highlevel irq-events handler [if NULL, __do_IRQ()]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @chip: low level interrupt hardware access
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @msi_desc: MSI descriptor
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @handler_data: per-IRQ data for the irq_chip methods
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @chip_data: platform-specific per-chip private data for the chip
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * methods, to allow shared chip implementations
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @action: the irq action chain
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @status: status information
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @depth: disable-depth, for nested irq_disable() calls
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @wake_depth: enable depth, for multiple set_irq_wake() callers
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @irq_count: stats field to detect stalled irqs
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @last_unhandled: aging timer for unhandled count
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @irqs_unhandled: stats field for spurious unhandled interrupts
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @lock: locking for SMP
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @affinity: IRQ affinity on SMP
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @cpu: cpu index useful for balancing
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @pending_mask: pending rebalanced interrupts
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @threads_active: number of irqaction threads currently running
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @wait_for_threads: wait queue for sync_irq to wait for threaded handlers
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @dir: /proc/irq/ procfs entry
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @name: flow handler name for /proc/interrupts output
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; irq_desc {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; irq;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; timer_rand_state &lt;span style="color:#666"&gt;*&lt;/span&gt;timer_rand_state;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; &lt;span style="color:#666"&gt;*&lt;/span&gt;kstat_irqs;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#ifdef CONFIG_INTR_REMAP
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; irq_2_iommu &lt;span style="color:#666"&gt;*&lt;/span&gt;irq_2_iommu;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;irq_flow_handler_t&lt;/span&gt; handle_irq;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; irq_chip &lt;span style="color:#666"&gt;*&lt;/span&gt;chip; &lt;span style="color:#60a0b0;font-style:italic"&gt;/*指向描述PIC对象的描述符*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; msi_desc &lt;span style="color:#666"&gt;*&lt;/span&gt;msi_desc;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;void&lt;/span&gt; &lt;span style="color:#666"&gt;*&lt;/span&gt;handler_data;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;void&lt;/span&gt; &lt;span style="color:#666"&gt;*&lt;/span&gt;chip_data; &lt;span style="color:#60a0b0;font-style:italic"&gt;/* 指向PIC对象方法所使用的的数据 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; irqaction &lt;span style="color:#666"&gt;*&lt;/span&gt;action; &lt;span style="color:#60a0b0;font-style:italic"&gt;/* IRQ action list */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; status; &lt;span style="color:#60a0b0;font-style:italic"&gt;/* IRQ status */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; depth; &lt;span style="color:#60a0b0;font-style:italic"&gt;/* nested irq disables */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; wake_depth; &lt;span style="color:#60a0b0;font-style:italic"&gt;/* nested wake enables */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; irq_count; &lt;span style="color:#60a0b0;font-style:italic"&gt;/* For detecting broken IRQs */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;long&lt;/span&gt; last_unhandled; &lt;span style="color:#60a0b0;font-style:italic"&gt;/* Aging timer for unhandled count */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; irqs_unhandled;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;spinlock_t&lt;/span&gt; lock;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#ifdef CONFIG_SMP
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;cpumask_var_t&lt;/span&gt; affinity;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; cpu;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#ifdef CONFIG_GENERIC_PENDING_IRQ
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;cpumask_var_t&lt;/span&gt; pending_mask;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;atomic_t&lt;/span&gt; threads_active;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;wait_queue_head_t&lt;/span&gt; wait_for_threads;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#ifdef CONFIG_PROC_FS
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; proc_dir_entry &lt;span style="color:#666"&gt;*&lt;/span&gt;dir;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;const&lt;/span&gt; &lt;span style="color:#902000"&gt;char&lt;/span&gt; &lt;span style="color:#666"&gt;*&lt;/span&gt;name;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;} ____cacheline_internodealigned_in_smp;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;extern&lt;/span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; irq_desc irq_desc[NR_IRQS];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/* include/linux/cache.h */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#if !defined(____cacheline_internodealigned_in_smp)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#if defined(CONFIG_SMP)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define ____cacheline_internodealigned_in_smp \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt; __attribute__((__aligned__(1 &amp;lt;&amp;lt; (INTERNODE_CACHE_SHIFT))))
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#else
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define ____cacheline_internodealigned_in_smp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/* struct irq_desc的status字段，描述IRQ线的一组状态 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/* */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; irq_desc irq_desc[NR_IRQS] __cacheline_aligned_in_smp &lt;span style="color:#666"&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; [&lt;span style="color:#40a070"&gt;0&lt;/span&gt; ... NR_IRQS&lt;span style="color:#666"&gt;-&lt;/span&gt;&lt;span style="color:#40a070"&gt;1&lt;/span&gt;] &lt;span style="color:#666"&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .status &lt;span style="color:#666"&gt;=&lt;/span&gt; IRQ_DISABLED,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .chip &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;no_irq_chip,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .handle_irq &lt;span style="color:#666"&gt;=&lt;/span&gt; handle_bad_irq,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .depth &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#40a070"&gt;1&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .lock &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#06287e"&gt;__SPIN_LOCK_UNLOCKED&lt;/span&gt;(irq_desc&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;lock),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;irq_desc_t&lt;/code&gt;描述的&lt;code&gt;depth&lt;/code&gt;字段和&lt;code&gt;IRQ_DISABLED&lt;/code&gt;标志表示&lt;code&gt;IRQ&lt;/code&gt;线是否被禁用。每次调用&lt;code&gt;disable_irq()&lt;/code&gt;或者&lt;code&gt;disale_irq_nosync()&lt;/code&gt;函数，&lt;code&gt;depth&lt;/code&gt;字段的值增加，如果&lt;code&gt;depth&lt;/code&gt;等于0，函数禁用&lt;code&gt;IRQ&lt;/code&gt;线并设置它的&lt;code&gt;IRQ_DISABLED&lt;/code&gt;标志相反，每当调用&lt;code&gt;enable_irq()&lt;/code&gt;函数，&lt;code&gt;depth&lt;/code&gt;字段的值减少，如果&lt;code&gt;depth&lt;/code&gt;变为0，函数激活&lt;code&gt;IRQ&lt;/code&gt;线并清除&lt;code&gt;IRQ_DISABLED&lt;/code&gt;标志。&lt;/p&gt;
&lt;h3 id="irq_chip"&gt;irq_chip&lt;/h3&gt;
&lt;p&gt;Linux支持多种&lt;code&gt;PIC&lt;/code&gt;，为了以统一的方式处理所有这样的设备，Linux用了一个&lt;code&gt;PIC对象&lt;/code&gt;，由&lt;code&gt;PIC&lt;/code&gt;名字和七个&lt;code&gt;PIC&lt;/code&gt;标准方法组成。定义&lt;code&gt;PIC对象&lt;/code&gt;的数据结构叫做&lt;code&gt;hw_interrupt_type&lt;/code&gt;（也叫作&lt;code&gt;hw_irq_controller&lt;/code&gt;），后来被&lt;code&gt;irq_chip&lt;/code&gt;取代，并添加了很多新的底层硬件操作函数。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-16"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-16"&gt;16&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-17"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-17"&gt;17&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-18"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-18"&gt;18&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-19"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-19"&gt;19&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-20"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-20"&gt;20&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-21"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-21"&gt;21&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-22"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-22"&gt;22&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-23"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-23"&gt;23&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-24"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-24"&gt;24&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-25"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-25"&gt;25&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-26"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-26"&gt;26&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-27"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-27"&gt;27&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-28"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-28"&gt;28&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-29"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-29"&gt;29&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-30"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-30"&gt;30&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-31"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-31"&gt;31&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-32"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-32"&gt;32&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-33"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-33"&gt;33&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-34"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-34"&gt;34&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-35"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-35"&gt;35&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-36"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-36"&gt;36&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-37"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-37"&gt;37&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-38"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-38"&gt;38&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-39"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-39"&gt;39&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-40"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-40"&gt;40&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-41"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-41"&gt;41&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-42"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-42"&gt;42&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-43"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-43"&gt;43&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-44"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-44"&gt;44&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-45"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-45"&gt;45&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-46"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-46"&gt;46&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-47"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-47"&gt;47&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-48"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-48"&gt;48&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-49"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-49"&gt;49&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-50"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-50"&gt;50&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-51"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-51"&gt;51&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-52"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-52"&gt;52&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-53"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-53"&gt;53&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/*include/linux/irq.h*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * struct irq_chip - hardware interrupt chip descriptor
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @name: name for /proc/interrupts
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @startup: start up the interrupt (defaults to -&amp;gt;enable if NULL)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @shutdown: shut down the interrupt (defaults to -&amp;gt;disable if NULL)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @enable: enable the interrupt (defaults to chip-&amp;gt;unmask if NULL)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @disable: disable the interrupt (defaults to chip-&amp;gt;mask if NULL)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @ack: start of a new interrupt
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @mask: mask an interrupt source
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @mask_ack: ack and mask an interrupt source
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @unmask: unmask an interrupt source
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @eoi: end of interrupt - chip level
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @end: end of interrupt - flow level
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @set_affinity: set the CPU affinity on SMP machines
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @retrigger: resend an IRQ to the CPU
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @set_type: set the flow type (IRQ_TYPE_LEVEL/etc.) of an IRQ
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @set_wake: enable/disable power-management wake-on of an IRQ
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @release: release function solely used by UML
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @typename: obsoleted by name, kept as migration helper
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; irq_chip {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;const&lt;/span&gt; &lt;span style="color:#902000"&gt;char&lt;/span&gt; &lt;span style="color:#666"&gt;*&lt;/span&gt;name;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#06287e"&gt;int&lt;/span&gt; (&lt;span style="color:#666"&gt;*&lt;/span&gt;startup)(&lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; irq);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;void&lt;/span&gt; (&lt;span style="color:#666"&gt;*&lt;/span&gt;shutdown)(&lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; irq);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;void&lt;/span&gt; (&lt;span style="color:#666"&gt;*&lt;/span&gt;enable)(&lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; irq);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;void&lt;/span&gt; (&lt;span style="color:#666"&gt;*&lt;/span&gt;disable)(&lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; irq);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;void&lt;/span&gt; (&lt;span style="color:#666"&gt;*&lt;/span&gt;ack)(&lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; irq);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;void&lt;/span&gt; (&lt;span style="color:#666"&gt;*&lt;/span&gt;mask)(&lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; irq);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;void&lt;/span&gt; (&lt;span style="color:#666"&gt;*&lt;/span&gt;mask_ack)(&lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; irq);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;void&lt;/span&gt; (&lt;span style="color:#666"&gt;*&lt;/span&gt;unmask)(&lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; irq);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;void&lt;/span&gt; (&lt;span style="color:#666"&gt;*&lt;/span&gt;eoi)(&lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; irq);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;void&lt;/span&gt; (&lt;span style="color:#666"&gt;*&lt;/span&gt;end)(&lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; irq);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;void&lt;/span&gt; (&lt;span style="color:#666"&gt;*&lt;/span&gt;set_affinity)(&lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; irq,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;const&lt;/span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; cpumask &lt;span style="color:#666"&gt;*&lt;/span&gt;dest);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; (&lt;span style="color:#666"&gt;*&lt;/span&gt;retrigger)(&lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; irq);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; (&lt;span style="color:#666"&gt;*&lt;/span&gt;set_type)(&lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; irq, &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; flow_type);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; (&lt;span style="color:#666"&gt;*&lt;/span&gt;set_wake)(&lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; irq, &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; on);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#60a0b0;font-style:italic"&gt;/* Currently used only by UML, might disappear one day.*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#ifdef CONFIG_IRQ_RELEASE_METHOD
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;void&lt;/span&gt; (&lt;span style="color:#666"&gt;*&lt;/span&gt;release)(&lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; irq, &lt;span style="color:#902000"&gt;void&lt;/span&gt; &lt;span style="color:#666"&gt;*&lt;/span&gt;dev_id);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#60a0b0;font-style:italic"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * For compatibility, -&amp;gt;typename is copied into -&amp;gt;name.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * Will disappear.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;const&lt;/span&gt; &lt;span style="color:#902000"&gt;char&lt;/span&gt; &lt;span style="color:#666"&gt;*&lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;typename&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="irqaction"&gt;irqaction&lt;/h3&gt;
&lt;p&gt;多个设备能共享一个单独的&lt;code&gt;IRQ&lt;/code&gt;，因此，内核要维护多个&lt;code&gt;irqaction&lt;/code&gt;描述符，其中的每个描述符涉及一个特定的硬件设备和一个特定的中断。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-16"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-16"&gt;16&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-17"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-17"&gt;17&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-18"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-18"&gt;18&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-19"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-19"&gt;19&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-20"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-20"&gt;20&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-21"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-21"&gt;21&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-22"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-22"&gt;22&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-23"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-23"&gt;23&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-24"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-24"&gt;24&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-25"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-25"&gt;25&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-26"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-26"&gt;26&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-27"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-27"&gt;27&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-28"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-28"&gt;28&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-29"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-29"&gt;29&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-30"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-30"&gt;30&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/* include/linux/interrupt.h */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * struct irqaction - per interrupt action descriptor
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @handler: interrupt handler function
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @flags: flags (see IRQF_* above)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @mask: no comment as it is useless and about to be removed
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @name: name of the device
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @dev_id: cookie to identify the device
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @next: pointer to the next irqaction for shared interrupts
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @irq: interrupt number
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @dir: pointer to the proc/irq/NN/name entry
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @thread_fn: interupt handler function for threaded interrupts
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @thread: thread pointer for threaded interrupts
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @thread_flags: flags related to @thread
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; irqaction {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;irq_handler_t&lt;/span&gt; handler; &lt;span style="color:#60a0b0;font-style:italic"&gt;/* 指向一个I/O设备的中断服务例程 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;long&lt;/span&gt; flags; &lt;span style="color:#60a0b0;font-style:italic"&gt;/* 描述IRQ和I/O设备之间的关系 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;cpumask_t&lt;/span&gt; mask;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;const&lt;/span&gt; &lt;span style="color:#902000"&gt;char&lt;/span&gt; &lt;span style="color:#666"&gt;*&lt;/span&gt;name; &lt;span style="color:#60a0b0;font-style:italic"&gt;/* I/O设备名，/proc/interrupts文件中显示 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;void&lt;/span&gt; &lt;span style="color:#666"&gt;*&lt;/span&gt;dev_id; &lt;span style="color:#60a0b0;font-style:italic"&gt;/* I/O设备的私有字段，标识设备本身(设备号)或者其驱动程序 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; irqaction &lt;span style="color:#666"&gt;*&lt;/span&gt;next; &lt;span style="color:#60a0b0;font-style:italic"&gt;/* 指向irqaction描述符链表的下一个元素，链表中的元素指向共享同一个IRQ的硬件设备 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; irq; &lt;span style="color:#60a0b0;font-style:italic"&gt;/* IRQ线 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; proc_dir_entry &lt;span style="color:#666"&gt;*&lt;/span&gt;dir; &lt;span style="color:#60a0b0;font-style:italic"&gt;/* 指向IRQn相关的/proc/irq/n目录的描述符 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;irq_handler_t&lt;/span&gt; thread_fn;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; task_struct &lt;span style="color:#666"&gt;*&lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;thread&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;long&lt;/span&gt; thread_flags;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/* 中断服务函数类型 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;typedef&lt;/span&gt; &lt;span style="color:#06287e"&gt;irqreturn_t&lt;/span&gt; (&lt;span style="color:#666"&gt;*&lt;/span&gt;&lt;span style="color:#902000"&gt;irq_handler_t&lt;/span&gt;)(&lt;span style="color:#902000"&gt;int&lt;/span&gt;, &lt;span style="color:#902000"&gt;void&lt;/span&gt; &lt;span style="color:#666"&gt;*&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="中断初始化"&gt;中断初始化&lt;/h2&gt;
&lt;p&gt;x86平台中断初始化共分为以下几步：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;中断描述符表的初步初始化&lt;/li&gt;
&lt;li&gt;中断描述符表的最终初始化&lt;/li&gt;
&lt;li&gt;&lt;code&gt;trap_init()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;early_irq_init()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;init_IRQ()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="idt初步初始化"&gt;&lt;code&gt;IDT&lt;/code&gt;初步初始化&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;声明256个门描述符的&lt;code&gt;IDT&lt;/code&gt;表空间&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-16"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-16"&gt;16&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-17"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-17"&gt;17&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-18"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-18"&gt;18&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-19"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-19"&gt;19&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-20"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-20"&gt;20&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-21"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-21"&gt;21&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-22"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-22"&gt;22&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-23"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-23"&gt;23&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-24"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-24"&gt;24&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-25"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-25"&gt;25&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/* arch/x86/kernel/head_32.S */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#002070;font-weight:bold"&gt;idt_descr&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .word IDT_ENTRIES&lt;span style="color:#666"&gt;*&lt;/span&gt;&lt;span style="color:#40a070"&gt;8&lt;/span&gt;&lt;span style="color:#666"&gt;-&lt;/span&gt;&lt;span style="color:#40a070"&gt;1&lt;/span&gt; &lt;span style=""&gt;#&lt;/span&gt; idt contains &lt;span style="color:#40a070"&gt;256&lt;/span&gt; entries
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#902000"&gt;long&lt;/span&gt; idt_table
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; 这里相当于声明了一个结构体idt_descr，包含两个元素，一个数字和idt_table的地址
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; arch/x86/include/asm/desc.h:35:extern gate_desc idt_table[];声明idt_table是一个外部变量，即head_32.S中的idt_descr中的idt_table.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; idt_table表的内容被_set_gate() -&amp;gt; write_idt_entry()填充。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define write_idt_entry(dt, entry, g) \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt; native_write_idt_entry(dt, entry, g)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;static&lt;/span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;inline&lt;/span&gt; &lt;span style="color:#902000"&gt;void&lt;/span&gt; &lt;span style="color:#06287e"&gt;native_write_idt_entry&lt;/span&gt;(gate_desc &lt;span style="color:#666"&gt;*&lt;/span&gt;idt, &lt;span style="color:#902000"&gt;int&lt;/span&gt; entry,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;const&lt;/span&gt; gate_desc &lt;span style="color:#666"&gt;*&lt;/span&gt;gate)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;memcpy&lt;/span&gt;(&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;idt[entry], gate, &lt;span style="color:#007020;font-weight:bold"&gt;sizeof&lt;/span&gt;(&lt;span style="color:#666"&gt;*&lt;/span&gt;gate));
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; _set_gate()函数被set_xxxintr_gate()调用，用以设置中断门，陷阱门等。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; 函数被set_xxxintr_gate()函数主要在
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; start_kernel()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; -&amp;gt;trap_init()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; -&amp;gt;init_IQR()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; 被调用
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;设置&lt;code&gt;IDTR&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-C" data-lang="C"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#002070;font-weight:bold"&gt;is386&lt;/span&gt;: movl &lt;span style=""&gt;$&lt;/span&gt;&lt;span style="color:#40a070"&gt;2&lt;/span&gt;,&lt;span style="color:#666"&gt;%&lt;/span&gt;ecx &lt;span style=""&gt;#&lt;/span&gt; set MP
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#40a070"&gt;2&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt; movl &lt;span style="color:#666"&gt;%&lt;/span&gt;cr0,&lt;span style="color:#666"&gt;%&lt;/span&gt;eax
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; andl &lt;span style=""&gt;$&lt;/span&gt;&lt;span style="color:#40a070"&gt;0x80000011&lt;/span&gt;,&lt;span style="color:#666"&gt;%&lt;/span&gt;eax &lt;span style=""&gt;#&lt;/span&gt; Save PG,PE,ET
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; orl &lt;span style="color:#666"&gt;%&lt;/span&gt;ecx,&lt;span style="color:#666"&gt;%&lt;/span&gt;eax
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; movl &lt;span style="color:#666"&gt;%&lt;/span&gt;eax,&lt;span style="color:#666"&gt;%&lt;/span&gt;cr0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; call check_x87
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; lgdt early_gdt_descr
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; lidt idt_descr
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ljmp &lt;span style=""&gt;$&lt;/span&gt;(__KERNEL_CS),&lt;span style=""&gt;$&lt;/span&gt;&lt;span style="color:#40a070"&gt;1f&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#40a070"&gt;1&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt; movl &lt;span style=""&gt;$&lt;/span&gt;(__KERNEL_DS),&lt;span style="color:#666"&gt;%&lt;/span&gt;eax &lt;span style=""&gt;#&lt;/span&gt; reload all the segment registers
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; movl &lt;span style="color:#666"&gt;%&lt;/span&gt;eax,&lt;span style="color:#666"&gt;%&lt;/span&gt;ss &lt;span style=""&gt;#&lt;/span&gt; after changing gdt.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;初始化256个门描述符&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-16"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-16"&gt;16&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-17"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-17"&gt;17&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-18"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-18"&gt;18&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-19"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-19"&gt;19&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-20"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-20"&gt;20&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-21"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-21"&gt;21&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-22"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-22"&gt;22&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-23"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-23"&gt;23&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-24"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-24"&gt;24&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-25"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-25"&gt;25&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-26"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-26"&gt;26&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-C" data-lang="C"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * setup_idt
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * sets up a idt with 256 entries pointing to
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * ignore_int, interrupt gates. It doesn&amp;#39;t actually load
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * idt - that can be done only after paging has been enabled
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * and the kernel moved to PAGE_OFFSET. Interrupts
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * are enabled elsewhere, when we can be relatively
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * sure everything is ok.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * Warning: %esi is live across this function.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#002070;font-weight:bold"&gt;setup_idt&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; lea ignore_int,&lt;span style="color:#666"&gt;%&lt;/span&gt;edx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; movl &lt;span style=""&gt;$&lt;/span&gt;(__KERNEL_CS &lt;span style="color:#666"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color:#40a070"&gt;16&lt;/span&gt;),&lt;span style="color:#666"&gt;%&lt;/span&gt;eax
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; movw &lt;span style="color:#666"&gt;%&lt;/span&gt;dx,&lt;span style="color:#666"&gt;%&lt;/span&gt;ax &lt;span style="color:#60a0b0;font-style:italic"&gt;/* selector = 0x0010 = cs */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; movw &lt;span style=""&gt;$&lt;/span&gt;&lt;span style="color:#40a070"&gt;0x8E00&lt;/span&gt;,&lt;span style="color:#666"&gt;%&lt;/span&gt;dx &lt;span style="color:#60a0b0;font-style:italic"&gt;/* interrupt gate - dpl=0, present */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; lea idt_table,&lt;span style="color:#666"&gt;%&lt;/span&gt;edi
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mov &lt;span style=""&gt;$&lt;/span&gt;&lt;span style="color:#40a070"&gt;256&lt;/span&gt;,&lt;span style="color:#666"&gt;%&lt;/span&gt;ecx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#002070;font-weight:bold"&gt;rp_sidt&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; movl &lt;span style="color:#666"&gt;%&lt;/span&gt;eax,(&lt;span style="color:#666"&gt;%&lt;/span&gt;edi)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; movl &lt;span style="color:#666"&gt;%&lt;/span&gt;edx,&lt;span style="color:#40a070"&gt;4&lt;/span&gt;(&lt;span style="color:#666"&gt;%&lt;/span&gt;edi)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; addl &lt;span style=""&gt;$&lt;/span&gt;&lt;span style="color:#40a070"&gt;8&lt;/span&gt;,&lt;span style="color:#666"&gt;%&lt;/span&gt;edi
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; dec &lt;span style="color:#666"&gt;%&lt;/span&gt;ecx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; jne rp_sidt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;lea指令 ： load effective address 功能是取偏移地址。&lt;/p&gt;
&lt;p&gt;mov是将数据从源传到目的&lt;/p&gt;
&lt;p&gt;lea是将源的地址传到目的&lt;/p&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;p&gt;​ movl 18(%eax), %ebx #是将内存中（%eax+18）的内容传入%ebx中；&lt;/p&gt;
&lt;p&gt;​ leal 18(%eax), %ebx #是将（18+（%eax中的值））即地址，传入%ebx;&lt;/p&gt;
&lt;p&gt;代码中，lea idt_table, %edi #即将idt_table表的地址传到%edi中。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="idt最终初始化"&gt;&lt;code&gt;IDT&lt;/code&gt;最终初始化&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;异常：由函数trap_init()实现，被系统初始化入口函数start_kernel()调用；&lt;/li&gt;
&lt;li&gt;中断：由函数init_IRQ()实现，被系统初始化入口函数start_kernel()调用；&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="trap_init"&gt;&lt;code&gt;trap_init()&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;此函数在&lt;strong&gt;x86平台linux系统调用&lt;/strong&gt;章节已经分析过。&lt;/p&gt;
&lt;h3 id="early_irq_init"&gt;&lt;code&gt;early_irq_init()&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;该函数用于初始化数组irq_desc[]；&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-16"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-16"&gt;16&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-17"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-17"&gt;17&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-18"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-18"&gt;18&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-19"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-19"&gt;19&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-20"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-20"&gt;20&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-21"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-21"&gt;21&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-22"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-22"&gt;22&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-23"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-23"&gt;23&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-24"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-24"&gt;24&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-25"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-25"&gt;25&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-26"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-26"&gt;26&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-27"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-27"&gt;27&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-28"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-28"&gt;28&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-29"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-29"&gt;29&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-30"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-30"&gt;30&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-31"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-31"&gt;31&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-32"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-32"&gt;32&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-33"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-33"&gt;33&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-34"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-34"&gt;34&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-35"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-35"&gt;35&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-36"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-36"&gt;36&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-37"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-37"&gt;37&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-38"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-38"&gt;38&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-39"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-39"&gt;39&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-40"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-40"&gt;40&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-41"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-41"&gt;41&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-42"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-42"&gt;42&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-43"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-43"&gt;43&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-44"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-44"&gt;44&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-45"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-45"&gt;45&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-46"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-46"&gt;46&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-47"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-47"&gt;47&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-48"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-48"&gt;48&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-49"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-49"&gt;49&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-50"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-50"&gt;50&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-51"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-51"&gt;51&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-52"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-52"&gt;52&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-53"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-53"&gt;53&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-54"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-54"&gt;54&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-55"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-55"&gt;55&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-56"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-56"&gt;56&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-57"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-57"&gt;57&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-58"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-58"&gt;58&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-59"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-59"&gt;59&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-60"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-60"&gt;60&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-61"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-61"&gt;61&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-62"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-62"&gt;62&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-63"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-63"&gt;63&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-64"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-64"&gt;64&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-65"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-65"&gt;65&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; init/main.c-&amp;gt;start_kernel()-&amp;gt;early_irq_init()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; early_irq_init()定义在kernel/irq/handle.c中，且针对不同的controller有不同的实现。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * Linux has a controller-independent interrupt architecture.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * Every controller has a &amp;#39;controller-template&amp;#39;, that is used
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * by the main code to do the right thing. Each driver-visible
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * interrupt source is transparently wired to the appropriate
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * controller. Thus drivers need not be aware of the
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * interrupt-controller.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * The code is designed to be easily extended with new/different
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * interrupt controllers, without having to do assembly magic or
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * having to touch the generic code.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * Controller mappings for all interrupt sources:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#902000"&gt;int&lt;/span&gt; nr_irqs &lt;span style="color:#666"&gt;=&lt;/span&gt; NR_IRQS;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#06287e"&gt;EXPORT_SYMBOL_GPL&lt;/span&gt;(nr_irqs);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#ifdef CONFIG_SPARSE_IRQ &lt;/span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/*CONFIG_SPARSE_IRQ=y支持稀有的中断号*/&lt;/span&gt;&lt;span style="color:#007020"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/* 暂时不看 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#else
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; irq_desc irq_desc[NR_IRQS] __cacheline_aligned_in_smp &lt;span style="color:#666"&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; [&lt;span style="color:#40a070"&gt;0&lt;/span&gt; ... NR_IRQS&lt;span style="color:#666"&gt;-&lt;/span&gt;&lt;span style="color:#40a070"&gt;1&lt;/span&gt;] &lt;span style="color:#666"&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .status &lt;span style="color:#666"&gt;=&lt;/span&gt; IRQ_DISABLED,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .chip &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;no_irq_chip,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .handle_irq &lt;span style="color:#666"&gt;=&lt;/span&gt; handle_bad_irq,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .depth &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#40a070"&gt;1&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .lock &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#06287e"&gt;__SPIN_LOCK_UNLOCKED&lt;/span&gt;(irq_desc&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;lock),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;static&lt;/span&gt; &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; kstat_irqs_all[NR_IRQS][NR_CPUS];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#902000"&gt;int&lt;/span&gt; __init &lt;span style="color:#06287e"&gt;early_irq_init&lt;/span&gt;(&lt;span style="color:#902000"&gt;void&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; irq_desc &lt;span style="color:#666"&gt;*&lt;/span&gt;desc;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; count;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; i;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;init_irq_default_affinity&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;printk&lt;/span&gt;(KERN_INFO &lt;span style="color:#4070a0"&gt;&amp;#34;NR_IRQS:%d&lt;/span&gt;&lt;span style="color:#4070a0;font-weight:bold"&gt;\n&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#34;&lt;/span&gt;, NR_IRQS);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; desc &lt;span style="color:#666"&gt;=&lt;/span&gt; irq_desc;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; count &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#06287e"&gt;ARRAY_SIZE&lt;/span&gt;(irq_desc);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;for&lt;/span&gt; (i &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#40a070"&gt;0&lt;/span&gt;; i &lt;span style="color:#666"&gt;&amp;lt;&lt;/span&gt; count; i&lt;span style="color:#666"&gt;++&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; desc[i].irq &lt;span style="color:#666"&gt;=&lt;/span&gt; i;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;init_alloc_desc_masks&lt;/span&gt;(&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;desc[i], &lt;span style="color:#40a070"&gt;0&lt;/span&gt;, &lt;span style="color:#007020"&gt;true&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; desc[i].kstat_irqs &lt;span style="color:#666"&gt;=&lt;/span&gt; kstat_irqs_all[i];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;return&lt;/span&gt; &lt;span style="color:#06287e"&gt;arch_early_irq_init&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; irq_desc &lt;span style="color:#666"&gt;*&lt;/span&gt;&lt;span style="color:#06287e"&gt;irq_to_desc&lt;/span&gt;(&lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; irq)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;return&lt;/span&gt; (irq &lt;span style="color:#666"&gt;&amp;lt;&lt;/span&gt; NR_IRQS) &lt;span style="color:#666"&gt;?&lt;/span&gt; irq_desc &lt;span style="color:#666"&gt;+&lt;/span&gt; &lt;span style="color:#002070;font-weight:bold"&gt;irq&lt;/span&gt; : &lt;span style="color:#007020"&gt;NULL&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; irq_desc &lt;span style="color:#666"&gt;*&lt;/span&gt;&lt;span style="color:#06287e"&gt;irq_to_desc_alloc_cpu&lt;/span&gt;(&lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; irq, &lt;span style="color:#902000"&gt;int&lt;/span&gt; cpu)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;return&lt;/span&gt; &lt;span style="color:#06287e"&gt;irq_to_desc&lt;/span&gt;(irq);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#endif &lt;/span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/* !CONFIG_SPARSE_IRQ */&lt;/span&gt;&lt;span style="color:#007020"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="init_irq"&gt;&lt;code&gt;init_IRQ()&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;init/main.c-&amp;gt;start_kernel()-&amp;gt;init_IRQ()&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-16"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-16"&gt;16&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-17"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-17"&gt;17&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-18"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-18"&gt;18&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-19"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-19"&gt;19&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-20"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-20"&gt;20&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-21"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-21"&gt;21&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-22"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-22"&gt;22&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-23"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-23"&gt;23&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-24"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-24"&gt;24&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-25"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-25"&gt;25&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-26"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-26"&gt;26&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-27"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-27"&gt;27&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-28"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-28"&gt;28&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-29"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-29"&gt;29&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-30"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-30"&gt;30&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-31"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-31"&gt;31&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-32"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-32"&gt;32&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-33"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-33"&gt;33&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-34"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-34"&gt;34&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-35"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-35"&gt;35&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-36"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-36"&gt;36&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-37"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-37"&gt;37&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-38"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-38"&gt;38&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-39"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-39"&gt;39&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-40"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-40"&gt;40&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-41"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-41"&gt;41&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-42"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-42"&gt;42&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-43"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-43"&gt;43&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-44"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-44"&gt;44&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-45"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-45"&gt;45&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-46"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-46"&gt;46&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/* early_irq_init()函数调用完紧接着就是init_IQR()函数 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/*arch/x86/kernel/paravirt.c*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#902000"&gt;void&lt;/span&gt; &lt;span style="color:#06287e"&gt;init_IRQ&lt;/span&gt;(&lt;span style="color:#902000"&gt;void&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pv_irq_ops.&lt;span style="color:#06287e"&gt;init_IRQ&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/*pv_irq_ops的定义在arch/x86/kernel/paravirt.c*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; pv_irq_ops pv_irq_ops &lt;span style="color:#666"&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .init_IRQ &lt;span style="color:#666"&gt;=&lt;/span&gt; native_init_IRQ,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .save_fl &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#06287e"&gt;__PV_IS_CALLEE_SAVE&lt;/span&gt;(native_save_fl),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .restore_fl &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#06287e"&gt;__PV_IS_CALLEE_SAVE&lt;/span&gt;(native_restore_fl),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .irq_disable &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#06287e"&gt;__PV_IS_CALLEE_SAVE&lt;/span&gt;(native_irq_disable),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .irq_enable &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#06287e"&gt;__PV_IS_CALLEE_SAVE&lt;/span&gt;(native_irq_enable),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .safe_halt &lt;span style="color:#666"&gt;=&lt;/span&gt; native_safe_halt,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .halt &lt;span style="color:#666"&gt;=&lt;/span&gt; native_halt,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#ifdef CONFIG_X86_64
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .adjust_exception_frame &lt;span style="color:#666"&gt;=&lt;/span&gt; paravirt_nop,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/* 这里的调用关系搞不清楚是通过paravirt.c中的init_IRQ还是直接调用的irqinit_32.c中的init_IRQ然后再调用的native_init_IRQ, 通过irqinit_32.c中的注释：Overridden in paravirt.c 推断应该是直接调用的irqinit_32.c中的代码*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/*arch/x86/kernel/irqinit_32.c*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/* Overridden in paravirt.c */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#902000"&gt;void&lt;/span&gt; &lt;span style="color:#06287e"&gt;init_IRQ&lt;/span&gt;(&lt;span style="color:#902000"&gt;void&lt;/span&gt;) &lt;span style="color:#06287e"&gt;__attribute__&lt;/span&gt;((weak, &lt;span style="color:#06287e"&gt;alias&lt;/span&gt;(&lt;span style="color:#4070a0"&gt;&amp;#34;native_init_IRQ&amp;#34;&lt;/span&gt;)));
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#902000"&gt;void&lt;/span&gt; __init &lt;span style="color:#06287e"&gt;native_init_IRQ&lt;/span&gt;(&lt;span style="color:#902000"&gt;void&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; i;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#60a0b0;font-style:italic"&gt;/* Execute any quirks before the call gates are initialised: */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;x86_quirk_pre_intr_init&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#60a0b0;font-style:italic"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * Cover the whole vector space, no vector can escape
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * us. (some of these will be overridden and become
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * &amp;#39;special&amp;#39; SMP interrupts)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;for&lt;/span&gt; (i &lt;span style="color:#666"&gt;=&lt;/span&gt; FIRST_EXTERNAL_VECTOR; i &lt;span style="color:#666"&gt;&amp;lt;&lt;/span&gt; NR_VECTORS; i&lt;span style="color:#666"&gt;++&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#60a0b0;font-style:italic"&gt;/* SYSCALL_VECTOR was reserved in trap_init. */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;if&lt;/span&gt; (i &lt;span style="color:#666"&gt;!=&lt;/span&gt; SYSCALL_VECTOR)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;set_intr_gate&lt;/span&gt;(i, interrupt[i&lt;span style="color:#666"&gt;-&lt;/span&gt;FIRST_EXTERNAL_VECTOR]);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#60a0b0;font-style:italic"&gt;/*略*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;_&lt;em&gt;attribute&lt;/em&gt;_((weak, alias(&amp;ldquo;native_init_IRQ&amp;rdquo;)));&lt;/p&gt;
&lt;p&gt;weak 和 alias 分别是GNU扩展的两个属性。&lt;/p&gt;
&lt;p&gt;weak 使得所修饰的符号在目标文件中作为 weak symbol 而不是 global symbol。用 nm 命令查看编译生成的目标文件可用看到所修饰的符号是一个 weak symbol，它前面的标记是 W。给函数加上weak属性时，即使函数没定义，函数被调用也可以编译成功。 若两个或两个以上全局符号（函数或变量名）名字一样，而其中之一声明为weak symbol（弱符号），则这些全局符号不会引发重定义错误。链接器会忽略弱符号，去使用普通的全局符号来解析所有对这些符号的引用，但当普通的全局符号不可用时，链接器会使用弱符号。当有函数或变量名可能被用户覆盖时，该函数或变量名可以声明为一个弱符号。&lt;/p&gt;
&lt;p&gt;而 alias 为所修饰的符号定义一个别名，前边代码中init_IRQ是native_init_IRQ的一个别名，所定义的别名和原符号名必须在同一个编译单元中定义，如native_init_IRQ和init_IRQ在同一个.c文件中，否则会编译出错。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.techbulo.com/2374.html"&gt;参考&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;其中&lt;code&gt;x86_quirk_pre_intr_init&lt;/code&gt;函数定义在&lt;code&gt;arch/x86/kernel/setup.c&lt;/code&gt;中，主要调用了&lt;code&gt;init_ISA_irqs&lt;/code&gt;函数完成中断控制器8259A的初始化。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-16"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-16"&gt;16&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-17"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-17"&gt;17&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-18"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-18"&gt;18&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-19"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-19"&gt;19&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-20"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-20"&gt;20&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-21"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-21"&gt;21&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-22"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-22"&gt;22&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-23"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-23"&gt;23&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-24"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-24"&gt;24&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-25"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-25"&gt;25&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-26"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-26"&gt;26&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-27"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-27"&gt;27&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-28"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-28"&gt;28&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-29"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-29"&gt;29&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-30"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-30"&gt;30&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-31"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-31"&gt;31&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-32"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-32"&gt;32&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-33"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-33"&gt;33&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-34"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-34"&gt;34&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-35"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-35"&gt;35&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-36"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-36"&gt;36&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-37"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-37"&gt;37&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-38"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-38"&gt;38&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-39"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-39"&gt;39&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-40"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-40"&gt;40&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-41"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-41"&gt;41&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-42"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-42"&gt;42&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-43"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-43"&gt;43&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-44"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-44"&gt;44&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-45"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-45"&gt;45&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-46"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-46"&gt;46&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-47"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-47"&gt;47&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-48"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-48"&gt;48&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-49"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-49"&gt;49&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-50"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-50"&gt;50&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-51"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-51"&gt;51&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-52"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-52"&gt;52&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-53"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-53"&gt;53&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-54"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-54"&gt;54&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-55"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-55"&gt;55&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-56"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-56"&gt;56&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-57"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-57"&gt;57&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-58"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-58"&gt;58&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-59"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-59"&gt;59&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-60"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-60"&gt;60&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-61"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-61"&gt;61&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-62"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-62"&gt;62&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-63"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-63"&gt;63&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-64"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-64"&gt;64&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-65"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-65"&gt;65&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-66"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-66"&gt;66&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-67"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-67"&gt;67&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-68"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-68"&gt;68&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-69"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-69"&gt;69&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-70"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-70"&gt;70&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-71"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-71"&gt;71&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-72"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-72"&gt;72&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-73"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-73"&gt;73&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-74"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-74"&gt;74&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-75"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-75"&gt;75&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-76"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-76"&gt;76&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-77"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-77"&gt;77&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-78"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-78"&gt;78&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-79"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-79"&gt;79&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-80"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-80"&gt;80&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-81"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-81"&gt;81&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-82"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-82"&gt;82&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-83"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-83"&gt;83&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-84"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-84"&gt;84&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-85"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-85"&gt;85&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-86"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-86"&gt;86&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-87"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-87"&gt;87&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-88"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-88"&gt;88&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-89"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-89"&gt;89&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-90"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-90"&gt;90&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-91"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-91"&gt;91&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-92"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-92"&gt;92&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-93"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-93"&gt;93&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * x86_quirk_pre_intr_init - initialisation prior to setting up interrupt vectors
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * Description:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * Perform any necessary interrupt initialisation prior to setting up
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * the &amp;#34;ordinary&amp;#34; interrupt call gates. For legacy reasons, the ISA
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * interrupts should be initialised here if the machine emulates a PC
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * in any way.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; **/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#902000"&gt;void&lt;/span&gt; __init &lt;span style="color:#06287e"&gt;x86_quirk_pre_intr_init&lt;/span&gt;(&lt;span style="color:#902000"&gt;void&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;if&lt;/span&gt; (x86_quirks&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;arch_pre_intr_init) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;if&lt;/span&gt; (x86_quirks&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#06287e"&gt;arch_pre_intr_init&lt;/span&gt;())
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;return&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;init_ISA_irqs&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/* init_ISA_irqs函数定义在arch/x86/kernel/irqinit_32.c中 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#902000"&gt;void&lt;/span&gt; __init &lt;span style="color:#06287e"&gt;init_ISA_irqs&lt;/span&gt;(&lt;span style="color:#902000"&gt;void&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; i;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#ifdef CONFIG_X86_LOCAL_APIC
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;init_bsp_APIC&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;init_8259A&lt;/span&gt;(&lt;span style="color:#40a070"&gt;0&lt;/span&gt;); &lt;span style="color:#60a0b0;font-style:italic"&gt;// 完成8259A中断控制器的初始化
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#60a0b0;font-style:italic"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * 16 old-style INTA-cycle interrupts:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;for&lt;/span&gt; (i &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#40a070"&gt;0&lt;/span&gt;; i &lt;span style="color:#666"&gt;&amp;lt;&lt;/span&gt; NR_IRQS_LEGACY; i&lt;span style="color:#666"&gt;++&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; irq_desc &lt;span style="color:#666"&gt;*&lt;/span&gt;desc &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#06287e"&gt;irq_to_desc&lt;/span&gt;(i);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; desc&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;status &lt;span style="color:#666"&gt;=&lt;/span&gt; IRQ_DISABLED;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; desc&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;action &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#007020"&gt;NULL&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; desc&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;depth &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#40a070"&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;set_irq_chip_and_handler_name&lt;/span&gt;(i, &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;i8259A_chip,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; handle_level_irq, &lt;span style="color:#4070a0"&gt;&amp;#34;XT&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#60a0b0;font-style:italic"&gt;/* for循环中初始化了16个 irq_desc_t描述符，*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/* 其中 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; irq_chip i8259A_chip &lt;span style="color:#666"&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .name &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#4070a0"&gt;&amp;#34;XT-PIC&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .mask &lt;span style="color:#666"&gt;=&lt;/span&gt; disable_8259A_irq,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .disable &lt;span style="color:#666"&gt;=&lt;/span&gt; disable_8259A_irq,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .unmask &lt;span style="color:#666"&gt;=&lt;/span&gt; enable_8259A_irq,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .mask_ack &lt;span style="color:#666"&gt;=&lt;/span&gt; mask_and_ack_8259A,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#06287e"&gt;handle_level_irq&lt;/span&gt;() &lt;span style=""&gt;定义在&lt;/span&gt; &lt;span style="color:#666"&gt;/&lt;/span&gt;kernel&lt;span style="color:#666"&gt;/&lt;/span&gt;irq&lt;span style="color:#666"&gt;/&lt;/span&gt;chip.c
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/* /kernel/irq/chip.c&amp;#34; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#902000"&gt;void&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#06287e"&gt;set_irq_chip_and_handler_name&lt;/span&gt;(&lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; irq, &lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; irq_chip &lt;span style="color:#666"&gt;*&lt;/span&gt;chip,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;irq_flow_handler_t&lt;/span&gt; handle, &lt;span style="color:#007020;font-weight:bold"&gt;const&lt;/span&gt; &lt;span style="color:#902000"&gt;char&lt;/span&gt; &lt;span style="color:#666"&gt;*&lt;/span&gt;name)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;set_irq_chip&lt;/span&gt;(irq, chip); &lt;span style="color:#60a0b0;font-style:italic"&gt;/* 设置chip */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;__set_irq_handler&lt;/span&gt;(irq, handle, &lt;span style="color:#40a070"&gt;0&lt;/span&gt;, name);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#60a0b0;font-style:italic"&gt;/* 设置handle
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; desc-&amp;gt;handle_irq = handle;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; desc-&amp;gt;name = name;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/* /kernel/irq/chip.c */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * set_irq_chip - set the irq chip for an irq
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @irq: irq number
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @chip: pointer to irq chip description structure
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#902000"&gt;int&lt;/span&gt; &lt;span style="color:#06287e"&gt;set_irq_chip&lt;/span&gt;(&lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; irq, &lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; irq_chip &lt;span style="color:#666"&gt;*&lt;/span&gt;chip)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; irq_desc &lt;span style="color:#666"&gt;*&lt;/span&gt;desc &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#06287e"&gt;irq_to_desc&lt;/span&gt;(irq);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;long&lt;/span&gt; flags;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;if&lt;/span&gt; (&lt;span style="color:#666"&gt;!&lt;/span&gt;desc) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;WARN&lt;/span&gt;(&lt;span style="color:#40a070"&gt;1&lt;/span&gt;, KERN_ERR &lt;span style="color:#4070a0"&gt;&amp;#34;Trying to install chip for IRQ%d&lt;/span&gt;&lt;span style="color:#4070a0;font-weight:bold"&gt;\n&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#34;&lt;/span&gt;, irq);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;return&lt;/span&gt; &lt;span style="color:#666"&gt;-&lt;/span&gt;EINVAL;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;if&lt;/span&gt; (&lt;span style="color:#666"&gt;!&lt;/span&gt;chip)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; chip &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;no_irq_chip;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;spin_lock_irqsave&lt;/span&gt;(&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;desc&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;lock, flags);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;irq_chip_set_defaults&lt;/span&gt;(chip);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; desc&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;chip &lt;span style="color:#666"&gt;=&lt;/span&gt; chip;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;spin_unlock_irqrestore&lt;/span&gt;(&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;desc&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;lock, flags);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;return&lt;/span&gt; &lt;span style="color:#40a070"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;之后循环调用&lt;code&gt;set_intr_gate&lt;/code&gt;函数，完成中断门的初始化。循环中的几个宏定义如下。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/*arch/x86/include/asm/irq_vectors.h*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * IDT vectors usable for external interrupt sources start
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * at 0x20:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define FIRST_EXTERNAL_VECTOR 0x20
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define NR_VECTORS 256
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;# define SYSCALL_VECTOR 0x80
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;即初始化&lt;code&gt;IDT&lt;/code&gt;从&lt;code&gt;0x20&lt;/code&gt;开始的256个中断门，并跳过&lt;code&gt;0x80&lt;/code&gt;。&lt;code&gt;set_intr_gate&lt;/code&gt;函数定义在&lt;code&gt;arch/x86/include/asm/desc.h&lt;/code&gt;中，定义如下。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-16"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-16"&gt;16&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-17"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-17"&gt;17&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-18"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-18"&gt;18&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-19"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-19"&gt;19&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-20"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-20"&gt;20&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-21"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-21"&gt;21&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * This needs to use &amp;#39;idt_table&amp;#39; rather than &amp;#39;idt&amp;#39;, and
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * thus use the _nonmapped_ version of the IDT, as the
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * Pentium F0 0F bugfix can have resulted in the mapped
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * IDT being write-protected.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;static&lt;/span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;inline&lt;/span&gt; &lt;span style="color:#902000"&gt;void&lt;/span&gt; &lt;span style="color:#06287e"&gt;set_intr_gate&lt;/span&gt;(&lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; n, &lt;span style="color:#902000"&gt;void&lt;/span&gt; &lt;span style="color:#666"&gt;*&lt;/span&gt;addr)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;BUG_ON&lt;/span&gt;((&lt;span style="color:#902000"&gt;unsigned&lt;/span&gt;)n &lt;span style="color:#666"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#40a070"&gt;0xFF&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;_set_gate&lt;/span&gt;(n, GATE_INTERRUPT, addr, &lt;span style="color:#40a070"&gt;0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;0&lt;/span&gt;, __KERNEL_CS);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; 其中 GATE_INTERRUPT定义如下
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; arch/x86/include/asm/desc_defs.h&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; enum {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; GATE_INTERRUPT = 0xE,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; GATE_TRAP = 0xF,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; GATE_CALL = 0xC,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; GATE_TASK = 0x5,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; };
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;简单总结&lt;code&gt;native_init_IRQ&lt;/code&gt;函数主要完成两个工作，&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;初始化中断控制器；
&lt;ul&gt;
&lt;li&gt;初始化&lt;code&gt;struct desc&lt;/code&gt;主要是&lt;code&gt;chip&lt;/code&gt;成员和&lt;code&gt;handle_irq&lt;/code&gt;成员。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;将&lt;code&gt;interrupt[]&lt;/code&gt;数组中的中断服务程序地址写进了&lt;code&gt;IDT&lt;/code&gt;中。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="interrupt的定义"&gt;interrupt[]的定义&lt;/h4&gt;
&lt;p&gt;&lt;a href="/os-basics/2019-04-15-x86%E5%B9%B3%E5%8F%B0%E9%80%9A%E7%94%A8%E4%B8%AD%E6%96%AD/#%e5%8f%82%e8%80%83"&gt;参考&lt;/a&gt;的第二项：中断之中断向量表IDT的初始化，有对这段代码的注释以及解释。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-16"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-16"&gt;16&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-17"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-17"&gt;17&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-18"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-18"&gt;18&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-19"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-19"&gt;19&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-20"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-20"&gt;20&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-21"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-21"&gt;21&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-22"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-22"&gt;22&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-23"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-23"&gt;23&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-24"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-24"&gt;24&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-25"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-25"&gt;25&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-26"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-26"&gt;26&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-27"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-27"&gt;27&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-28"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-28"&gt;28&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-29"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-29"&gt;29&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-30"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-30"&gt;30&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-31"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-31"&gt;31&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-32"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-32"&gt;32&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-33"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-33"&gt;33&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-34"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-34"&gt;34&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-35"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-35"&gt;35&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-36"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-36"&gt;36&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-37"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-37"&gt;37&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-38"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-38"&gt;38&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-39"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-39"&gt;39&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-C" data-lang="C"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/*arch/x86/kernel/entry_32.S*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * Build the entry stubs and pointer table with some assembler magic.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * We pack 7 stubs into a single 32-byte chunk, which will fit in a
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * single cache line on all modern x86 implementations.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.section .init.rodata,&lt;span style="color:#4070a0"&gt;&amp;#34;a&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#06287e"&gt;ENTRY&lt;/span&gt;(interrupt)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.text
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .p2align &lt;span style="color:#40a070"&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .p2align CONFIG_X86_L1_CACHE_SHIFT
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#06287e"&gt;ENTRY&lt;/span&gt;(irq_entries_start)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; RING0_INT_FRAME
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;vector&lt;span style="color:#666"&gt;=&lt;/span&gt;FIRST_EXTERNAL_VECTOR
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.&lt;span style="color:#06287e"&gt;rept&lt;/span&gt; (NR_VECTORS&lt;span style="color:#666"&gt;-&lt;/span&gt;FIRST_EXTERNAL_VECTOR&lt;span style="color:#666"&gt;+&lt;/span&gt;&lt;span style="color:#40a070"&gt;6&lt;/span&gt;)&lt;span style="color:#666"&gt;/&lt;/span&gt;&lt;span style="color:#40a070"&gt;7&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .balign &lt;span style="color:#40a070"&gt;32&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .rept &lt;span style="color:#40a070"&gt;7&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#007020;font-weight:bold"&gt;if&lt;/span&gt; vector &lt;span style="color:#666"&gt;&amp;lt;&lt;/span&gt; NR_VECTORS
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#007020;font-weight:bold"&gt;if&lt;/span&gt; vector &lt;span style="color:#666"&gt;&amp;lt;&amp;gt;&lt;/span&gt; FIRST_EXTERNAL_VECTOR
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CFI_ADJUST_CFA_OFFSET &lt;span style="color:#666"&gt;-&lt;/span&gt;&lt;span style="color:#40a070"&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .endif
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#40a070"&gt;1&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt; pushl &lt;span style=""&gt;$&lt;/span&gt;(&lt;span style="color:#666"&gt;~&lt;/span&gt;vector&lt;span style="color:#666"&gt;+&lt;/span&gt;&lt;span style="color:#40a070"&gt;0x80&lt;/span&gt;) &lt;span style="color:#60a0b0;font-style:italic"&gt;/* Note: always in signed byte range */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CFI_ADJUST_CFA_OFFSET &lt;span style="color:#40a070"&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#007020;font-weight:bold"&gt;if&lt;/span&gt; ((vector&lt;span style="color:#666"&gt;-&lt;/span&gt;FIRST_EXTERNAL_VECTOR)&lt;span style="color:#666"&gt;%&lt;/span&gt;&lt;span style="color:#40a070"&gt;7&lt;/span&gt;) &lt;span style="color:#666"&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span style="color:#40a070"&gt;6&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; jmp &lt;span style="color:#40a070"&gt;2f&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .endif
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .previous
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#902000"&gt;long&lt;/span&gt; &lt;span style="color:#40a070"&gt;1&lt;/span&gt;b
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .text
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;vector&lt;span style="color:#666"&gt;=&lt;/span&gt;vector&lt;span style="color:#666"&gt;+&lt;/span&gt;&lt;span style="color:#40a070"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .endif
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .endr
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#40a070"&gt;2&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt; jmp common_interrupt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.endr
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#06287e"&gt;END&lt;/span&gt;(irq_entries_start)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.previous
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#06287e"&gt;END&lt;/span&gt;(interrupt)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.previous
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;主要包含两行代码&lt;code&gt;pushl $(~vector+0x80) &lt;/code&gt;和&lt;code&gt;jmp common_interrupt&lt;/code&gt;,即把中断号减去256的结果保存到栈中，然后调用通用中断处理程序。之所以要减去256，是因为内核用负数表示所有的中断，正数表示系统调用。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;.rept语法&lt;/p&gt;
&lt;p&gt;.rept &lt;em&gt;count&lt;/em&gt;
Repeat the sequence of lines between the .rept directive and the next .endr directive count times.
For example, assembling
&lt;strong&gt;.rept 3
.long 0
.endr&lt;/strong&gt;
is equivalent to assembling
&lt;strong&gt;.long 0
.long 0
.long 0&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.csdn.net/waverider2012/article/details/8524175"&gt;参考&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;.IF、.ELSE、.ELSEIF 和 .ENDIF 伪指令使得程序员易于对多分支逻辑进行编码。它们让汇编器在后台生成 CMP 和条件跳转指令，这些指令显示在输出列表文件中。语法如下所示：&lt;/p&gt;
&lt;p&gt;.IF conditionl
statements
[.ELSEIF condition2
statements ]
[.ELSE
statements ]
.ENDIF&lt;/p&gt;
&lt;p&gt;方括号表示 .ELSEIF 和 .ELSE 是可选的，而 .IF 和 .ENDIF 则是必需的。condition（条件）是布尔表达式，&lt;/p&gt;
&lt;p&gt;&lt;a href="http://c.biancheng.net/view/3585.html"&gt;参考&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;数组中每个元素的初始值是标号1的地址。因此访问数组中的元素时，都会跳到标号1处，执行相应的指令。也就是，在除了0~19号和0x80号中断外，其余的所有中断在进入其自己的中断服务程序之前，必须是先条转执行common_interrupt的.&lt;/p&gt;
&lt;h4 id="common_interrupt的定义"&gt;common_interrupt的定义&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-C" data-lang="C"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * the CPU automatically disables interrupts when executing an IRQ vector,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * so IRQ-flags tracing has to follow that:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .p2align CONFIG_X86_L1_CACHE_SHIFT
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#002070;font-weight:bold"&gt;common_interrupt&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; addl &lt;span style=""&gt;$&lt;/span&gt;&lt;span style="color:#666"&gt;-&lt;/span&gt;&lt;span style="color:#40a070"&gt;0x80&lt;/span&gt;,(&lt;span style="color:#666"&gt;%&lt;/span&gt;esp) &lt;span style="color:#60a0b0;font-style:italic"&gt;/* Adjust vector into the [-256,-1] range */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; SAVE_ALL
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; TRACE_IRQS_OFF
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; movl &lt;span style="color:#666"&gt;%&lt;/span&gt;esp,&lt;span style="color:#666"&gt;%&lt;/span&gt;eax
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; call do_IRQ
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; jmp ret_from_intr
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#06287e"&gt;ENDPROC&lt;/span&gt;(common_interrupt)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CFI_ENDPROC
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;保存寄存器的值以后，栈顶的地址被存放到&lt;code&gt;eax&lt;/code&gt;寄存器，然后中断处理程序调用&lt;code&gt;do_IRQ()&lt;/code&gt;函数，执行&lt;code&gt;do_IRQ()&lt;/code&gt;的&lt;code&gt;ret&lt;/code&gt;指令时，控制跳转到&lt;code&gt;ret_from_intr()&lt;/code&gt;。&lt;/p&gt;
&lt;h4 id="do_irq函数"&gt;do_IRQ函数&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-16"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-16"&gt;16&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-17"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-17"&gt;17&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-18"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-18"&gt;18&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-19"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-19"&gt;19&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-20"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-20"&gt;20&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-21"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-21"&gt;21&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-22"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-22"&gt;22&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-23"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-23"&gt;23&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-24"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-24"&gt;24&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-25"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-25"&gt;25&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-26"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-26"&gt;26&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-27"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-27"&gt;27&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-28"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-28"&gt;28&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-29"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-29"&gt;29&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-30"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-30"&gt;30&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-31"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-31"&gt;31&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-32"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-32"&gt;32&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-33"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-33"&gt;33&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/* arch/x86/kernel/irq.c */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * do_IRQ handles all normal device IRQ&amp;#39;s (the special
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * SMP cross-CPU interrupts have their own specific
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * handlers).
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; __irq_entry &lt;span style="color:#06287e"&gt;do_IRQ&lt;/span&gt;(&lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; pt_regs &lt;span style="color:#666"&gt;*&lt;/span&gt;regs)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; pt_regs &lt;span style="color:#666"&gt;*&lt;/span&gt;old_regs &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#06287e"&gt;set_irq_regs&lt;/span&gt;(regs);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#60a0b0;font-style:italic"&gt;/* high bit used in ret_from_ code */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; vector &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#666"&gt;~&lt;/span&gt;regs&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;orig_ax; &lt;span style="color:#60a0b0;font-style:italic"&gt;// 取得对应的中断向量
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; irq;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;exit_idle&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;irq_enter&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; irq &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#06287e"&gt;__get_cpu_var&lt;/span&gt;(vector_irq)[vector];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;if&lt;/span&gt; (&lt;span style="color:#666"&gt;!&lt;/span&gt;&lt;span style="color:#06287e"&gt;handle_irq&lt;/span&gt;(irq, regs)) { &lt;span style="color:#60a0b0;font-style:italic"&gt;//调用中断处理句柄，对8259，就是handle_level_irq
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#ifdef CONFIG_X86_64
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;if&lt;/span&gt; (&lt;span style="color:#666"&gt;!&lt;/span&gt;disable_apic)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;ack_APIC_irq&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;if&lt;/span&gt; (&lt;span style="color:#06287e"&gt;printk_ratelimit&lt;/span&gt;())
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;printk&lt;/span&gt;(KERN_EMERG &lt;span style="color:#4070a0"&gt;&amp;#34;%s: %d.%d No irq handler for vector (irq %d)&lt;/span&gt;&lt;span style="color:#4070a0;font-weight:bold"&gt;\n&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; __func__, &lt;span style="color:#06287e"&gt;smp_processor_id&lt;/span&gt;(), vector, irq);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;irq_exit&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;set_irq_regs&lt;/span&gt;(old_regs);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;return&lt;/span&gt; &lt;span style="color:#40a070"&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="handle_irq"&gt;handle_irq&lt;/h4&gt;
&lt;p&gt;搜索发现此函数在&lt;code&gt;arch/x86/kernel/irq_32.c&amp;quot;&lt;/code&gt;中定义&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-16"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-16"&gt;16&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-17"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-17"&gt;17&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-18"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-18"&gt;18&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-19"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-19"&gt;19&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-20"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-20"&gt;20&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-21"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-21"&gt;21&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-22"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-22"&gt;22&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-23"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-23"&gt;23&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-24"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-24"&gt;24&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-25"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-25"&gt;25&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-26"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-26"&gt;26&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-27"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-27"&gt;27&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-28"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-28"&gt;28&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-29"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-29"&gt;29&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-30"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-30"&gt;30&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-31"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-31"&gt;31&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-32"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-32"&gt;32&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#902000"&gt;bool&lt;/span&gt; &lt;span style="color:#06287e"&gt;handle_irq&lt;/span&gt;(&lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; irq, &lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; pt_regs &lt;span style="color:#666"&gt;*&lt;/span&gt;regs)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; irq_desc &lt;span style="color:#666"&gt;*&lt;/span&gt;desc;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; overflow;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; overflow &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#06287e"&gt;check_stack_overflow&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; desc &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#06287e"&gt;irq_to_desc&lt;/span&gt;(irq);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;if&lt;/span&gt; (&lt;span style="color:#06287e"&gt;unlikely&lt;/span&gt;(&lt;span style="color:#666"&gt;!&lt;/span&gt;desc))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;return&lt;/span&gt; &lt;span style="color:#007020"&gt;false&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;if&lt;/span&gt; (&lt;span style="color:#666"&gt;!&lt;/span&gt;&lt;span style="color:#06287e"&gt;execute_on_irq_stack&lt;/span&gt;(overflow, desc, irq)) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;if&lt;/span&gt; (&lt;span style="color:#06287e"&gt;unlikely&lt;/span&gt;(overflow))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;print_stack_overflow&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; desc&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#06287e"&gt;handle_irq&lt;/span&gt;(irq, desc);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#60a0b0;font-style:italic"&gt;/* 在这里调用了之前注册的handler_irq函数
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; init_ISA_irqs()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; -&amp;gt; set_irq_chip_and_handler_name(i, &amp;amp;i8259A_chip,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; handle_level_irq, &amp;#34;XT&amp;#34;);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; -&amp;gt; __set_irq_handler(irq, handle, 0, name);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; -&amp;gt; desc-&amp;gt;handle_irq = handle;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; 即handle_level_irq
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; -&amp;gt; handle_IRQ_event(irq, action);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; -&amp;gt; do {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; ret = action-&amp;gt;handler(irq, action-&amp;gt;dev_id);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; action = action-&amp;gt;next;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; } while (action);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;return&lt;/span&gt; &lt;span style="color:#007020"&gt;true&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="注册中断"&gt;注册中断&lt;/h2&gt;
&lt;p&gt;在Linux内核申请中断的函数是&lt;code&gt;request_irq()&lt;/code&gt;,函数原型定义在&lt;code&gt;include/linux/interrupt.h&lt;/code&gt;中，&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-15-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-15-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-15-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-15-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-15-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-15-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-15-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-15-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-15-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-15-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-15-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-15-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-15-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-15-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-15-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-15-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-15-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-15-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-15-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-15-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-15-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-15-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-15-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-15-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-15-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-15-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-15-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-15-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-15-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-15-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-15-16"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-15-16"&gt;16&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-15-17"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-15-17"&gt;17&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-15-18"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-15-18"&gt;18&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#06287e"&gt;request_irq&lt;/span&gt;(&lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; irq, &lt;span style="color:#902000"&gt;irq_handler_t&lt;/span&gt; handler, &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;long&lt;/span&gt; flags,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;const&lt;/span&gt; &lt;span style="color:#902000"&gt;char&lt;/span&gt; &lt;span style="color:#666"&gt;*&lt;/span&gt;name, &lt;span style="color:#902000"&gt;void&lt;/span&gt; &lt;span style="color:#666"&gt;*&lt;/span&gt;dev);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; irq : 要申请的硬件中断号；
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; handler : 中断服务函数指针；
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; flags: 中断处理的属性，
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; 若设置了IRQF_DISABLED则表示是快速中断，快速中断在处理过程中会屏蔽其他中断。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; 若设置了IRQD_SHARED则表示多个设备共享此中断。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; 若设置了IRQF_SAMPLE_RANDOM则表示对系统产生随机数有作用。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; IRQF_TRIGGER_* 其中*可以是中断触发方式，定义在include/linux/interrupt.h中。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; name : 中断名字，/proc/interrupts文件系统中显示；
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; dev : 中断共享时可以用到，一般设置为这个设备的设备结构体或者NULL
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; 返回值：
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; 0 : 成功 ；
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; -INVAL : 表示中断号无效或处理函数指针为NULL ；
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; -EBUSY : 表示中断已经被占用且不能共享。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;关于request_irq()的最后一个参数dev&lt;/p&gt;
&lt;p&gt;中断发生时，内核并不判断是共享中断线上的哪个设备产生了中断，它会循环执行所有该中断线上注册的所有中断服务函数（irqaction-&amp;gt;handler函数）。因此irqaction-&amp;gt;handler函数需要自己判断具体的中断源。很多资料都建议将设备结构指针作为此参数的值，当中断发生时，迅速根据硬件寄存器中的信息比照传入的dev参数判断是否是本设备发出的中断。而且free_irq()函数也需要据此判断从共享中断线上移除哪一个irqaction&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;代码流程&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/*include/linux/interrupt.h*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;static&lt;/span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;inline&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; __must_check
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#06287e"&gt;request_irq&lt;/span&gt;(&lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; irq, &lt;span style="color:#902000"&gt;irq_handler_t&lt;/span&gt; handler, &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;long&lt;/span&gt; flags,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;const&lt;/span&gt; &lt;span style="color:#902000"&gt;char&lt;/span&gt; &lt;span style="color:#666"&gt;*&lt;/span&gt;name, &lt;span style="color:#902000"&gt;void&lt;/span&gt; &lt;span style="color:#666"&gt;*&lt;/span&gt;dev)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;return&lt;/span&gt; &lt;span style="color:#06287e"&gt;request_threaded_irq&lt;/span&gt;(irq, handler, &lt;span style="color:#007020"&gt;NULL&lt;/span&gt;, flags, name, dev);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;extern&lt;/span&gt; &lt;span style="color:#902000"&gt;void&lt;/span&gt; &lt;span style="color:#06287e"&gt;exit_irq_thread&lt;/span&gt;(&lt;span style="color:#902000"&gt;void&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#else
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;extern&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; __must_check
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#06287e"&gt;request_irq&lt;/span&gt;(&lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; irq, &lt;span style="color:#902000"&gt;irq_handler_t&lt;/span&gt; handler, &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;long&lt;/span&gt; flags,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;const&lt;/span&gt; &lt;span style="color:#902000"&gt;char&lt;/span&gt; &lt;span style="color:#666"&gt;*&lt;/span&gt;name, &lt;span style="color:#902000"&gt;void&lt;/span&gt; &lt;span style="color:#666"&gt;*&lt;/span&gt;dev);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;主要调用了&lt;code&gt;request_threaded_irq()&lt;/code&gt;函数，此函数定义在&lt;code&gt;kernel/irq/manage.c&lt;/code&gt;中，&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-16"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-16"&gt;16&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-17"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-17"&gt;17&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-18"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-18"&gt;18&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-19"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-19"&gt;19&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-20"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-20"&gt;20&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-21"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-21"&gt;21&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-22"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-22"&gt;22&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-23"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-23"&gt;23&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-24"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-24"&gt;24&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-25"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-25"&gt;25&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-26"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-26"&gt;26&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-27"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-27"&gt;27&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-28"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-28"&gt;28&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-29"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-29"&gt;29&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-30"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-30"&gt;30&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-31"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-31"&gt;31&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-32"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-32"&gt;32&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-33"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-33"&gt;33&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-34"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-34"&gt;34&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-35"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-35"&gt;35&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-36"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-36"&gt;36&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-37"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-37"&gt;37&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-38"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-38"&gt;38&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-39"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-39"&gt;39&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-40"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-40"&gt;40&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-41"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-41"&gt;41&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-42"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-42"&gt;42&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-43"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-43"&gt;43&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-44"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-44"&gt;44&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-45"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-45"&gt;45&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-46"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-46"&gt;46&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-47"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-47"&gt;47&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-48"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-48"&gt;48&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-49"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-49"&gt;49&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-50"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-50"&gt;50&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-51"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-51"&gt;51&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-52"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-52"&gt;52&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-53"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-53"&gt;53&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-54"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-54"&gt;54&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-55"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-55"&gt;55&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-56"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-56"&gt;56&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-57"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-57"&gt;57&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-58"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-58"&gt;58&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-59"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-59"&gt;59&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-60"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-60"&gt;60&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-61"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-61"&gt;61&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-62"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-62"&gt;62&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-63"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-63"&gt;63&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-64"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-64"&gt;64&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-65"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-65"&gt;65&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-66"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-66"&gt;66&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-67"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-67"&gt;67&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-68"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-68"&gt;68&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-69"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-69"&gt;69&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-70"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-70"&gt;70&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-71"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-71"&gt;71&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-72"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-72"&gt;72&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-73"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-73"&gt;73&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-74"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-74"&gt;74&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-75"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-75"&gt;75&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-76"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-76"&gt;76&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-77"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-77"&gt;77&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-78"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-78"&gt;78&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-79"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-79"&gt;79&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-80"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-80"&gt;80&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-81"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-81"&gt;81&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-82"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-82"&gt;82&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-83"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-83"&gt;83&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-84"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-84"&gt;84&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-85"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-85"&gt;85&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-86"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-86"&gt;86&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-87"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-87"&gt;87&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * request_threaded_irq - allocate an interrupt line
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @irq: Interrupt line to allocate
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @handler: Function to be called when the IRQ occurs.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * Primary handler for threaded interrupts
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @thread_fn: Function called from the irq handler thread
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * If NULL, no irq thread is created
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @irqflags: Interrupt type flags
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @devname: An ascii name for the claiming device
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @dev_id: A cookie passed back to the handler function
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * This call allocates interrupt resources and enables the
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * interrupt line and IRQ handling. From the point this
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * call is made your handler function may be invoked. Since
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * your handler function must clear any interrupt the board
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * raises, you must take care both to initialise your hardware
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * and to set up the interrupt handler in the right order.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * If you want to set up a threaded irq handler for your device
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * then you need to supply @handler and @thread_fn. @handler ist
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * still called in hard interrupt context and has to check
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * whether the interrupt originates from the device. If yes it
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * needs to disable the interrupt on the device and return
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * IRQ_THREAD_WAKE which will wake up the handler thread and run
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * @thread_fn. This split handler design is necessary to support
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * shared interrupts.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * Dev_id must be globally unique. Normally the address of the
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * device data structure is used as the cookie. Since the handler
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * receives this value it makes sense to use it.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * If your interrupt is shared you must pass a non NULL dev_id
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * as this is required when freeing the interrupt.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * Flags:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * IRQF_SHARED Interrupt is shared
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * IRQF_DISABLED Disable local interrupts while processing
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * IRQF_SAMPLE_RANDOM The interrupt can be used for entropy
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * IRQF_TRIGGER_* Specify active edge(s) or level
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#902000"&gt;int&lt;/span&gt; &lt;span style="color:#06287e"&gt;request_threaded_irq&lt;/span&gt;(&lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; irq, &lt;span style="color:#902000"&gt;irq_handler_t&lt;/span&gt; handler,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;irq_handler_t&lt;/span&gt; thread_fn, &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;long&lt;/span&gt; irqflags,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;const&lt;/span&gt; &lt;span style="color:#902000"&gt;char&lt;/span&gt; &lt;span style="color:#666"&gt;*&lt;/span&gt;devname, &lt;span style="color:#902000"&gt;void&lt;/span&gt; &lt;span style="color:#666"&gt;*&lt;/span&gt;dev_id)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; irqaction &lt;span style="color:#666"&gt;*&lt;/span&gt;action;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; irq_desc &lt;span style="color:#666"&gt;*&lt;/span&gt;desc;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; retval;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#60a0b0;font-style:italic"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * handle_IRQ_event() always ignores IRQF_DISABLED except for
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * the _first_ irqaction (sigh). That can cause oopsing, but
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * the behavior is classified as &amp;#34;will not fix&amp;#34; so we need to
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * start nudging drivers away from using that idiom.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;if&lt;/span&gt; ((irqflags &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt; (IRQF_SHARED&lt;span style="color:#666"&gt;|&lt;/span&gt;IRQF_DISABLED)) &lt;span style="color:#666"&gt;==&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; (IRQF_SHARED&lt;span style="color:#666"&gt;|&lt;/span&gt;IRQF_DISABLED)) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;pr_warning&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#4070a0"&gt;&amp;#34;IRQ %d/%s: IRQF_DISABLED is not guaranteed on shared IRQs&lt;/span&gt;&lt;span style="color:#4070a0;font-weight:bold"&gt;\n&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; irq, devname);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#60a0b0;font-style:italic"&gt;/*省略一些状态检查的代码*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; desc &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#06287e"&gt;irq_to_desc&lt;/span&gt;(irq);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;if&lt;/span&gt; (&lt;span style="color:#666"&gt;!&lt;/span&gt;desc)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;return&lt;/span&gt; &lt;span style="color:#666"&gt;-&lt;/span&gt;EINVAL;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; action &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#06287e"&gt;kzalloc&lt;/span&gt;(&lt;span style="color:#007020;font-weight:bold"&gt;sizeof&lt;/span&gt;(&lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; irqaction), GFP_KERNEL);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;if&lt;/span&gt; (&lt;span style="color:#666"&gt;!&lt;/span&gt;action)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;return&lt;/span&gt; &lt;span style="color:#666"&gt;-&lt;/span&gt;ENOMEM;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; action&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;handler &lt;span style="color:#666"&gt;=&lt;/span&gt; handler; &lt;span style="color:#60a0b0;font-style:italic"&gt;/* 注册中断服务函数 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; action&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;thread_fn &lt;span style="color:#666"&gt;=&lt;/span&gt; thread_fn;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; action&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;flags &lt;span style="color:#666"&gt;=&lt;/span&gt; irqflags;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; action&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;name &lt;span style="color:#666"&gt;=&lt;/span&gt; devname;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; action&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;dev_id &lt;span style="color:#666"&gt;=&lt;/span&gt; dev_id;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; retval &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#06287e"&gt;__setup_irq&lt;/span&gt;(irq, desc, action);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;if&lt;/span&gt; (retval)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;kfree&lt;/span&gt;(action);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#60a0b0;font-style:italic"&gt;/* 省略一部分 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;return&lt;/span&gt; retval;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#06287e"&gt;EXPORT_SYMBOL&lt;/span&gt;(request_threaded_irq);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;首先从&lt;code&gt;irq&lt;/code&gt;拿到&lt;code&gt;struct desc&lt;/code&gt;，然后初始化了&lt;code&gt;struct desc&lt;/code&gt;结构的&lt;code&gt;action&lt;/code&gt;结构，最后调用了&lt;code&gt;__setup_irq()&lt;/code&gt;函数。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;__setup_irq()&lt;/code&gt;函数还调用了内核线程的创建&lt;code&gt;kthread_create()&lt;/code&gt;等等，暂时不做分析。&lt;/p&gt;
&lt;h2 id="中断处理流程"&gt;中断处理流程&lt;/h2&gt;
&lt;p&gt;注册流程：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;系统初始化时 : 调用&lt;code&gt;init_IRQ()&lt;/code&gt;， 此函数间接调用&lt;code&gt;init_ISA_irq()&lt;/code&gt;函数，初始化&lt;code&gt;PIC&lt;/code&gt;以及&lt;code&gt;struct irq_desc&lt;/code&gt;数组，填充了&lt;code&gt;struct irq_desc&lt;/code&gt;元素的&lt;code&gt;handler_irq&lt;/code&gt;和&lt;code&gt;chip&lt;/code&gt;结构。之后调用&lt;code&gt;set_intr_gate()&lt;/code&gt;将&lt;code&gt;interrupts&lt;/code&gt;数组设置到系统的&lt;code&gt;IDT&lt;/code&gt;中。&lt;/li&gt;
&lt;li&gt;在内核代码中调用&lt;code&gt;request_irq()&lt;/code&gt;函数，将中断服务程序注册到&lt;code&gt;irqaction&lt;/code&gt;结构中，调用&lt;code&gt;__setup_irq()&lt;/code&gt;函数。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;中断发生时：先去IDT表中找到相应的中断门描述符，根据中断门描述符找到GDTR中相应的代码段，再根据中断门描述符中代码偏移，到相应代码段中找到中断服务程序入口，即&lt;code&gt;common_interrupt&lt;/code&gt;，此函数先保存现场，然后将中断号压入栈，调用&lt;code&gt;do_IRQ()&lt;/code&gt;函数，此函数调用&lt;code&gt;desc-&amp;gt;handle_irq&lt;/code&gt;即&lt;code&gt;handle_level_irq&lt;/code&gt;，又调用了&lt;code&gt;handle_IRQ_event()&lt;/code&gt;，此函数中循环调用&lt;code&gt;action-&amp;gt;handler()&lt;/code&gt;，间接调用到&lt;code&gt;request_irq()&lt;/code&gt;函数注册的回调函数。&lt;/p&gt;
&lt;h2 id="小结"&gt;小结&lt;/h2&gt;
&lt;p&gt;本文主要基于x86平台对应&lt;code&gt;linux 2.6.30.4&lt;/code&gt;版本的内核源码，对&lt;code&gt;linux&lt;/code&gt;中断的初始化过程进行简单分析。还有一些东西没有弄懂，留待以后分析。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;__setup_irq()&lt;/code&gt;函数；&lt;/li&gt;
&lt;li&gt;中断发生时代码执行到&lt;code&gt;action-&amp;gt;handler()&lt;/code&gt;的过程；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;free_irq()&lt;/code&gt;的执行流程；&lt;/li&gt;
&lt;li&gt;从中断中返回；&lt;/li&gt;
&lt;li&gt;软中断及&lt;code&gt;tasklet&lt;/code&gt;；&lt;/li&gt;
&lt;li&gt;一些其他细节；&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="参考"&gt;&lt;a id="参考"&gt;参考&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://home.ustc.edu.cn/~hchunhui/linux_intr.html"&gt;x86体系结构下Linux-2.6.26的中断处理&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.csdn.net/farmwang/article/details/52318573"&gt;中断之中断向量表IDT的初始化&lt;/a&gt;&lt;/p&gt;</description></item><item><title>x86平台linux系统调用分析</title><link>/os-basics/2019-04-15-x86%E5%B9%B3%E5%8F%B0linux%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8/</link><pubDate>Mon, 15 Apr 2019 16:01:23 +0800</pubDate><author>yuanye.ma@qq.com (Yuanye Ma)</author><guid>/os-basics/2019-04-15-x86%E5%B9%B3%E5%8F%B0linux%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8/</guid><description>&lt;h1 id="x86平台linux系统调用分析"&gt;x86平台linux系统调用分析&lt;/h1&gt;
&lt;p&gt;[toc]&lt;/p&gt;
&lt;p&gt;kernel version : linux 2.6.30.4&lt;/p&gt;
&lt;h2 id="x86-系统调用整体流程"&gt;x86 系统调用整体流程&lt;/h2&gt;
&lt;p&gt;&lt;img src="/os-basics/2019-04-15-x86%E5%B9%B3%E5%8F%B0linux%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8/System_Call_Procedure.jpg" alt="系统调用章节"&gt;&lt;/p&gt;
&lt;p&gt;用户空间调用&lt;code&gt;libc&lt;/code&gt;库的&lt;code&gt;syscall&lt;/code&gt;函数，此函数内嵌汇编，汇编代码先将系统调用号写入&lt;code&gt;eax&lt;/code&gt;寄存器，其他参数写入&lt;code&gt;ebx ecx edx esi edi&lt;/code&gt;五个寄存器，若参数总个数超过五个，则应该用一个单独的寄存器存放指向所有这些参数在用户空间地址的指针。然后调用&lt;code&gt;int 0x80&lt;/code&gt;指令陷入内核。&lt;/p&gt;
&lt;p&gt;&lt;img src="/os-basics/2019-04-15-x86%E5%B9%B3%E5%8F%B0linux%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8/system_call_process.png" alt="system_call_process"&gt;&lt;/p&gt;
&lt;p&gt;CPU从&lt;code&gt;IDTR&lt;/code&gt;中得到&lt;code&gt;IDT&lt;/code&gt;（中断向量表）地址，并根据中断号(0x80)找到&lt;code&gt;IDT&lt;/code&gt;下标为&lt;code&gt;0x80&lt;/code&gt;的元素，即门描述符，检查&lt;code&gt;CPL=3&lt;/code&gt;, 门描述符&lt;code&gt;DPL=0&lt;/code&gt;，不相符，发生栈切换。&lt;/p&gt;
&lt;p&gt;CPU根据寄存器&lt;code&gt;TR&lt;/code&gt;的内容找到当前&lt;code&gt;TSS&lt;/code&gt;,并根据目标代码段的&lt;code&gt;DPL&lt;/code&gt;，从&lt;code&gt;TSS&lt;/code&gt;结构中取出新的堆栈指针（SS和ESP），并装入其堆栈段寄存器&lt;code&gt;SS&lt;/code&gt;和堆栈指针&lt;code&gt;ESP&lt;/code&gt;中，达到更换堆栈的目的。这种情况下CPU不但要将&lt;code&gt;EFLAGS&lt;/code&gt;、返回地址以及出错代码压入堆栈，还要先将原来的堆栈指针也压入新堆栈中。&lt;/p&gt;
&lt;p&gt;&lt;img src="/os-basics/2019-04-15-x86%E5%B9%B3%E5%8F%B0linux%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8/stack_sw.png" alt="stack_sw"&gt;&lt;/p&gt;
&lt;p&gt;栈切换完成后，CPU从陷阱门描述符中找到中断服务程序所在内存段的段选择子和地址偏移，根据段选择子去&lt;code&gt;GDT&lt;/code&gt;或者&lt;code&gt;LDT&lt;/code&gt;中找到对应的段描述符，装入&lt;code&gt;CS&lt;/code&gt;段选择寄存器，找到段基地址，并加上地址偏移后找到中断服务程序入口地址，跳转过去运行。&lt;/p&gt;
&lt;h2 id="中断向量表idt的初始化"&gt;中断向量表IDT的初始化&lt;/h2&gt;
&lt;p&gt;基于&lt;code&gt;linux 2.6.30.4&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-16"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-16"&gt;16&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-17"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-17"&gt;17&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-18"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-18"&gt;18&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-19"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-19"&gt;19&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-20"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-20"&gt;20&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-21"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-21"&gt;21&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-22"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-22"&gt;22&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-23"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-23"&gt;23&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-24"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-24"&gt;24&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-25"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-25"&gt;25&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-26"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-26"&gt;26&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-27"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-27"&gt;27&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-28"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-28"&gt;28&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-29"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-29"&gt;29&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-30"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-30"&gt;30&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-31"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-31"&gt;31&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-32"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-32"&gt;32&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-33"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-33"&gt;33&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-34"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-34"&gt;34&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/* &amp;#34;arch/x86/kernel/traps.c&amp;#34; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#902000"&gt;void&lt;/span&gt; __init &lt;span style="color:#06287e"&gt;trap_init&lt;/span&gt;(&lt;span style="color:#902000"&gt;void&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;set_intr_gate&lt;/span&gt;(&lt;span style="color:#40a070"&gt;0&lt;/span&gt;, &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;divide_error);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;set_intr_gate_ist&lt;/span&gt;(&lt;span style="color:#40a070"&gt;1&lt;/span&gt;, &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;debug, DEBUG_STACK);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;set_intr_gate_ist&lt;/span&gt;(&lt;span style="color:#40a070"&gt;2&lt;/span&gt;, &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;nmi, NMI_STACK);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#60a0b0;font-style:italic"&gt;/* int3 can be called from all */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;set_system_intr_gate_ist&lt;/span&gt;(&lt;span style="color:#40a070"&gt;3&lt;/span&gt;, &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;int3, DEBUG_STACK);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#60a0b0;font-style:italic"&gt;/* int4 can be called from all */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;set_system_intr_gate&lt;/span&gt;(&lt;span style="color:#40a070"&gt;4&lt;/span&gt;, &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;overflow);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;set_intr_gate&lt;/span&gt;(&lt;span style="color:#40a070"&gt;5&lt;/span&gt;, &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;bounds);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;set_intr_gate&lt;/span&gt;(&lt;span style="color:#40a070"&gt;6&lt;/span&gt;, &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;invalid_op);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;set_intr_gate&lt;/span&gt;(&lt;span style="color:#40a070"&gt;7&lt;/span&gt;, &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;device_not_available);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;set_task_gate&lt;/span&gt;(&lt;span style="color:#40a070"&gt;8&lt;/span&gt;, GDT_ENTRY_DOUBLEFAULT_TSS);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;set_intr_gate&lt;/span&gt;(&lt;span style="color:#40a070"&gt;9&lt;/span&gt;, &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;coprocessor_segment_overrun);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;set_intr_gate&lt;/span&gt;(&lt;span style="color:#40a070"&gt;10&lt;/span&gt;, &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;invalid_TSS);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;set_intr_gate&lt;/span&gt;(&lt;span style="color:#40a070"&gt;11&lt;/span&gt;, &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;segment_not_present);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;set_intr_gate_ist&lt;/span&gt;(&lt;span style="color:#40a070"&gt;12&lt;/span&gt;, &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;stack_segment, STACKFAULT_STACK);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;set_intr_gate&lt;/span&gt;(&lt;span style="color:#40a070"&gt;13&lt;/span&gt;, &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;general_protection);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;set_intr_gate&lt;/span&gt;(&lt;span style="color:#40a070"&gt;14&lt;/span&gt;, &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;page_fault);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;set_intr_gate&lt;/span&gt;(&lt;span style="color:#40a070"&gt;15&lt;/span&gt;, &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;spurious_interrupt_bug);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;set_intr_gate&lt;/span&gt;(&lt;span style="color:#40a070"&gt;16&lt;/span&gt;, &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;coprocessor_error);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;set_intr_gate&lt;/span&gt;(&lt;span style="color:#40a070"&gt;17&lt;/span&gt;, &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;alignment_check);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;set_system_trap_gate&lt;/span&gt;(SYSCALL_VECTOR, &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;system_call);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#60a0b0;font-style:italic"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; SYSCALL_VECTOR
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; arch/x86/include/asm/irq_vectors.h:36:# define SYSCALL_VECTOR 0x80
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; asmlinkage int system_call(void);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;cpu_init&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;程序中首先设置中断向量表的头19个陷阱门，这些中断向量表都是CPU保留用于异常处理的。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;set_intr_gate()&lt;/code&gt; 等函数都调用了&lt;code&gt;_set_gate()&lt;/code&gt;函数设置门描述符，本文重点分析系统调用相关的内容，即 &lt;code&gt;set_system_trap_gate()&lt;/code&gt;函数。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/*&amp;#34;arch/x86/include/asm/desc.h&amp;#34; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; set_system_trap_gate(SYSCALL_VECTOR, &amp;amp;system_call);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; 参数
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; n = SYSCALL_VECTOR = 0x80;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; addr = &amp;amp;system_call
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;static&lt;/span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;inline&lt;/span&gt; &lt;span style="color:#902000"&gt;void&lt;/span&gt; &lt;span style="color:#06287e"&gt;set_system_trap_gate&lt;/span&gt;(&lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; n, &lt;span style="color:#902000"&gt;void&lt;/span&gt; &lt;span style="color:#666"&gt;*&lt;/span&gt;addr)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;BUG_ON&lt;/span&gt;((&lt;span style="color:#902000"&gt;unsigned&lt;/span&gt;)n &lt;span style="color:#666"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#40a070"&gt;0xFF&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;_set_gate&lt;/span&gt;(n, GATE_TRAP, addr, &lt;span style="color:#40a070"&gt;0x3&lt;/span&gt;, &lt;span style="color:#40a070"&gt;0&lt;/span&gt;, __KERNEL_CS);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;_set_gate()&lt;/code&gt;函数完成设置门描述符的工作。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-16"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-16"&gt;16&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-17"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-17"&gt;17&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-18"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-18"&gt;18&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-19"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-19"&gt;19&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-20"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-20"&gt;20&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-21"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-21"&gt;21&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-22"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-22"&gt;22&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-23"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-23"&gt;23&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-24"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-24"&gt;24&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-25"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-25"&gt;25&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-26"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-26"&gt;26&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-27"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-27"&gt;27&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-28"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-28"&gt;28&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-29"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-29"&gt;29&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-30"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-30"&gt;30&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-31"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-31"&gt;31&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-32"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-32"&gt;32&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-33"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-33"&gt;33&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-34"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-34"&gt;34&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; _set_gate(n, GATE_TRAP, addr, 0x3, 0, __KERNEL_CS);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; &amp;#34;arch/x86/include/asm/desc_defs.h&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; enum {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; GATE_INTERRUPT = 0xE,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; GATE_TRAP = 0xF,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; GATE_CALL = 0xC,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; GATE_TASK = 0x5,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; };
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; arch/x86/include/asm/segment.h
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; #define __KERNEL_CS (GDT_ENTRY_KERNEL_CS * 8)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; #define GDT_ENTRY_KERNEL_CS 2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;static&lt;/span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;inline&lt;/span&gt; &lt;span style="color:#902000"&gt;void&lt;/span&gt; &lt;span style="color:#06287e"&gt;_set_gate&lt;/span&gt;(&lt;span style="color:#902000"&gt;int&lt;/span&gt; gate, &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; type, &lt;span style="color:#902000"&gt;void&lt;/span&gt; &lt;span style="color:#666"&gt;*&lt;/span&gt;addr,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; dpl, &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; ist, &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; seg)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#60a0b0;font-style:italic"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; 参数如下：
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; gate = n = SYSCALL_VECTOR = 0x80;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; type = GATE_TRAP = 0xF;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; addr = &amp;amp;system_call;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; dpl = 0x3;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; ist = 0;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; seg = __KERNEL_CS = 2*8;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; gate_desc s;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;pack_gate&lt;/span&gt;(&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;s, type, (&lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;long&lt;/span&gt;)addr, dpl, ist, seg);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#60a0b0;font-style:italic"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * does not need to be atomic because it is only done once at
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * setup time
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;write_idt_entry&lt;/span&gt;(idt_table, gate, &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;s);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img src="/os-basics/2019-04-15-x86%E5%B9%B3%E5%8F%B0linux%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8/trap_gate.png" alt="trap_gate"&gt;&lt;/p&gt;
&lt;p&gt;先看看第一行&lt;code&gt;gate_desc s;&lt;/code&gt;，主要分配了门描述符的结构。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-16"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-16"&gt;16&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/*gate_desc 结构 &amp;#34;arch/x86/include/asm/desc_defs.h&amp;#34; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;typedef&lt;/span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; desc_struct gate_desc;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; desc_struct {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;union&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; a; &lt;span style="color:#60a0b0;font-style:italic"&gt;// 4字节
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; b; &lt;span style="color:#60a0b0;font-style:italic"&gt;// 4字节
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; };
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;struct&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; u16 limit0; &lt;span style="color:#60a0b0;font-style:italic"&gt;// 2字节 位移的低16位
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; u16 base0; &lt;span style="color:#60a0b0;font-style:italic"&gt;// 2字节 段选择码
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#002070;font-weight:bold"&gt;base1&lt;/span&gt;: &lt;span style="color:#40a070"&gt;8&lt;/span&gt;, &lt;span style="color:#002070;font-weight:bold"&gt;type&lt;/span&gt;: &lt;span style="color:#40a070"&gt;4&lt;/span&gt;, &lt;span style="color:#002070;font-weight:bold"&gt;s&lt;/span&gt;: &lt;span style="color:#40a070"&gt;1&lt;/span&gt;, &lt;span style="color:#002070;font-weight:bold"&gt;dpl&lt;/span&gt;: &lt;span style="color:#40a070"&gt;2&lt;/span&gt;, &lt;span style="color:#002070;font-weight:bold"&gt;p&lt;/span&gt;: &lt;span style="color:#40a070"&gt;1&lt;/span&gt;; &lt;span style="color:#60a0b0;font-style:italic"&gt;// 2字节
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#002070;font-weight:bold"&gt;limit&lt;/span&gt;: &lt;span style="color:#40a070"&gt;4&lt;/span&gt;, &lt;span style="color:#002070;font-weight:bold"&gt;avl&lt;/span&gt;: &lt;span style="color:#40a070"&gt;1&lt;/span&gt;, &lt;span style="color:#002070;font-weight:bold"&gt;l&lt;/span&gt;: &lt;span style="color:#40a070"&gt;1&lt;/span&gt;, &lt;span style="color:#002070;font-weight:bold"&gt;d&lt;/span&gt;: &lt;span style="color:#40a070"&gt;1&lt;/span&gt;, &lt;span style="color:#002070;font-weight:bold"&gt;g&lt;/span&gt;: &lt;span style="color:#40a070"&gt;1&lt;/span&gt;, &lt;span style="color:#002070;font-weight:bold"&gt;base2&lt;/span&gt;: &lt;span style="color:#40a070"&gt;8&lt;/span&gt;; &lt;span style="color:#60a0b0;font-style:italic"&gt;//2字节
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; };
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; };
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;} &lt;span style="color:#06287e"&gt;__attribute__&lt;/span&gt;((packed));
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;attribute&lt;/strong&gt; ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐，是GCC特有的语法。这个功能是跟操作系统没关系，跟编译器有关，gcc编译器不是紧凑模式的，在windows下，用vc的编译器也不是紧凑的，用tc的编译器就是紧凑的。&lt;/p&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;p&gt;在TC下：struct my{ char ch; int a;} sizeof(int)=2;sizeof(my)=3;（紧凑模式）&lt;br&gt;
在GCC下：struct my{ char ch; int a;} sizeof(int)=4;sizeof(my)=8;（非紧凑模式）&lt;br&gt;
在GCC下：struct my{ char ch; int a;}&lt;strong&gt;attrubte&lt;/strong&gt; ((packed)) sizeof(int)=4;sizeof(my)=5&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;struct desc_struct&lt;/code&gt;包含一个联合体，可以用其中任何一种类型，后边可以看到&lt;code&gt;pack_gate()&lt;/code&gt;函数使用联合体中的第一种，即&lt;code&gt;struct {unsigned int a; unsigned int b};&lt;/code&gt;。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-16"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-16"&gt;16&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-17"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-17"&gt;17&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;参数
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; gate = n = SYSCALL_VECTOR = 0x80;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; type = GATE_TRAP = 0xF;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; addr = &amp;amp;system_call;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; dpl = 0x3;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; ist = 0;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; seg = __KERNEL_CS = 2*8;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;static&lt;/span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;inline&lt;/span&gt; &lt;span style="color:#902000"&gt;void&lt;/span&gt; &lt;span style="color:#06287e"&gt;pack_gate&lt;/span&gt;(gate_desc &lt;span style="color:#666"&gt;*&lt;/span&gt;gate, &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;char&lt;/span&gt; type,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;long&lt;/span&gt; base, &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; dpl, &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; flags,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;unsigned&lt;/span&gt; &lt;span style="color:#902000"&gt;short&lt;/span&gt; seg)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; gate&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;a &lt;span style="color:#666"&gt;=&lt;/span&gt; (seg &lt;span style="color:#666"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color:#40a070"&gt;16&lt;/span&gt;) &lt;span style="color:#666"&gt;|&lt;/span&gt; (base &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt; &lt;span style="color:#40a070"&gt;0xffff&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; gate&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;b &lt;span style="color:#666"&gt;=&lt;/span&gt; (base &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt; &lt;span style="color:#40a070"&gt;0xffff0000&lt;/span&gt;) &lt;span style="color:#666"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; (((&lt;span style="color:#40a070"&gt;0x80&lt;/span&gt; &lt;span style="color:#666"&gt;|&lt;/span&gt; type &lt;span style="color:#666"&gt;|&lt;/span&gt; (dpl &lt;span style="color:#666"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color:#40a070"&gt;5&lt;/span&gt;)) &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt; &lt;span style="color:#40a070"&gt;0xff&lt;/span&gt;) &lt;span style="color:#666"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color:#40a070"&gt;8&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;pack_gate()&lt;/code&gt;此函数包装一个陷阱门描述符。&lt;code&gt;gate-&amp;gt;a&lt;/code&gt;在低地址。&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;&lt;code&gt;/*
gate-&amp;gt;a = (seg &amp;lt;&amp;lt; 16) | (base &amp;amp; 0xffff);
gate-&amp;gt;a = ((2*8)&amp;lt;&amp;lt;16 | (&amp;amp;system_call &amp;amp; 0xffff);
(&amp;amp;system_call &amp;amp; 0xffff) : 中断服务函数地址段内偏移的低16位
((2*8)&amp;lt;&amp;lt;16 : 段选择码，即中断服务函数所在代码段选择子在GTD或者LDT中的下标。
gate-&amp;gt;b = (base &amp;amp; 0xffff0000) | (((0x80 | type | (dpl &amp;lt;&amp;lt; 5)) &amp;amp; 0xff) &amp;lt;&amp;lt; 8);
gate-&amp;gt;b = (&amp;amp;system_call &amp;amp; 0xffff0000) | (((0x80 | 0xF | (0x3 &amp;lt;&amp;lt; 5)) &amp;amp; 0xff) &amp;lt;&amp;lt; 8)
解析
0x80 : 1000 0000
0xf : 0000 1111
0x3 : 0000 0011
0xff : 1111 1111
0x80 | 0xF = 0x8f : 1000 1111
0x3 &amp;lt;&amp;lt; 5 = 0110 0000
(0x80 | 0xF | (0x3 &amp;lt;&amp;lt; 5)) = 1110 1111
((0x80 | 0xF | (0x3 &amp;lt;&amp;lt; 5)) &amp;amp; 0xff) = 1110 1111
(((0x80 | 0xF | (0x3 &amp;lt;&amp;lt; 5)) &amp;amp; 0xff) &amp;lt;&amp;lt; 8) = 1110 1111 0000 0000
对应到门描述符
(&amp;amp;system_call &amp;amp; 0xffff0000) : 中断服务函数地址段内偏移的高16位
P ： 1 ： 内存段在内存中
DPL ： 11 ：DPL = 3
0 ： 永远为0
D ： 1 表示32位
111 ： 类型码 ： 陷阱门
*/
&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-16"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-16"&gt;16&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-17"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-17"&gt;17&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-18"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-18"&gt;18&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-19"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-19"&gt;19&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define write_idt_entry(dt, entry, g) \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt; native_write_idt_entry(dt, entry, g)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;参数
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; idt = idt_table;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; entry = gate = n = SYSCALL_VECTOR = 0x80;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; gate = &amp;amp;s；
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;其中
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; gate_desc idt_table[256]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; __attribute__((__section__(&amp;#34;.data.idt&amp;#34;))) = { { { { 0, 0 } } }, };
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; typedef struct desc_struct gate_desc;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;static&lt;/span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;inline&lt;/span&gt; &lt;span style="color:#902000"&gt;void&lt;/span&gt; &lt;span style="color:#06287e"&gt;native_write_idt_entry&lt;/span&gt;(gate_desc &lt;span style="color:#666"&gt;*&lt;/span&gt;idt, &lt;span style="color:#902000"&gt;int&lt;/span&gt; entry,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;const&lt;/span&gt; gate_desc &lt;span style="color:#666"&gt;*&lt;/span&gt;gate)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;memcpy&lt;/span&gt;(&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;idt[entry], gate, &lt;span style="color:#007020;font-weight:bold"&gt;sizeof&lt;/span&gt;(&lt;span style="color:#666"&gt;*&lt;/span&gt;gate));
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;native_write_idt_entry()&lt;/code&gt;此函数将&lt;code&gt;pack_gate()&lt;/code&gt;函数封装的陷阱门描述符拷贝进&lt;code&gt;idt&lt;/code&gt;的0x80位置。&lt;/p&gt;
&lt;h2 id="系统调用的中断服务程序分析"&gt;系统调用的中断服务程序分析&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-16"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-16"&gt;16&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-17"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-17"&gt;17&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-18"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-18"&gt;18&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-19"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-19"&gt;19&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-20"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-20"&gt;20&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-21"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-21"&gt;21&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-22"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-22"&gt;22&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-23"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-23"&gt;23&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-24"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-24"&gt;24&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-6-25"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-6-25"&gt;25&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-C" data-lang="C"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/*arch/x86/kernel/entry_32.S*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020"&gt;# system call handler stub
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#06287e"&gt;ENTRY&lt;/span&gt;(system_call)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; RING0_INT_FRAME &lt;span style=""&gt;#&lt;/span&gt; can&lt;span style=""&gt;&amp;#39;&lt;/span&gt;t unwind into user space anyway
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pushl &lt;span style="color:#666"&gt;%&lt;/span&gt;eax &lt;span style=""&gt;#&lt;/span&gt; save orig_eax
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CFI_ADJUST_CFA_OFFSET &lt;span style="color:#40a070"&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; SAVE_ALL
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;GET_THREAD_INFO&lt;/span&gt;(&lt;span style="color:#666"&gt;%&lt;/span&gt;ebp) &lt;span style=""&gt;#&lt;/span&gt; system call tracing in operation &lt;span style="color:#666"&gt;/&lt;/span&gt; emulation
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; testl &lt;span style=""&gt;$&lt;/span&gt;_TIF_WORK_SYSCALL_ENTRY,&lt;span style="color:#06287e"&gt;TI_flags&lt;/span&gt;(&lt;span style="color:#666"&gt;%&lt;/span&gt;ebp)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; jnz syscall_trace_entry
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; cmpl &lt;span style=""&gt;$&lt;/span&gt;(nr_syscalls), &lt;span style="color:#666"&gt;%&lt;/span&gt;eax
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; jae syscall_badsys
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#002070;font-weight:bold"&gt;syscall_call&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; call &lt;span style="color:#666"&gt;*&lt;/span&gt;&lt;span style="color:#06287e"&gt;sys_call_table&lt;/span&gt;(,&lt;span style="color:#666"&gt;%&lt;/span&gt;eax,&lt;span style="color:#40a070"&gt;4&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; movl &lt;span style="color:#666"&gt;%&lt;/span&gt;eax,&lt;span style="color:#06287e"&gt;PT_EAX&lt;/span&gt;(&lt;span style="color:#666"&gt;%&lt;/span&gt;esp) &lt;span style=""&gt;#&lt;/span&gt; store the &lt;span style="color:#007020;font-weight:bold"&gt;return&lt;/span&gt; value
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#002070;font-weight:bold"&gt;syscall_exit&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; LOCKDEP_SYS_EXIT
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;DISABLE_INTERRUPTS&lt;/span&gt;(CLBR_ANY) &lt;span style=""&gt;#&lt;/span&gt; make sure we don&lt;span style=""&gt;&amp;#39;&lt;/span&gt;t miss an interrupt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020"&gt;# setting need_resched or sigpending
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020"&gt;# between sampling and the iret
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; TRACE_IRQS_OFF
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; movl &lt;span style="color:#06287e"&gt;TI_flags&lt;/span&gt;(&lt;span style="color:#666"&gt;%&lt;/span&gt;ebp), &lt;span style="color:#666"&gt;%&lt;/span&gt;ecx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; testl &lt;span style=""&gt;$&lt;/span&gt;_TIF_ALLWORK_MASK, &lt;span style="color:#666"&gt;%&lt;/span&gt;ecx &lt;span style=""&gt;#&lt;/span&gt; current&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;work
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; jne syscall_exit_work
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;先将&lt;code&gt;%eax&lt;/code&gt;（系统调用号）压入栈，然后调用&lt;code&gt;SAVE_ALL&lt;/code&gt;保存中断现场，检查系统调用号，跳转到相应的而系统调用函数去执行&lt;code&gt;call *sys_call_table(,%eax,4)&lt;/code&gt;，&lt;code&gt;sys_call_table&lt;/code&gt;定义如下，是一个函数指针列表。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-16"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-16"&gt;16&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-7-17"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-7-17"&gt;17&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-C" data-lang="C"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/*arch/x86/kernel/syscall_table_32.S*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#06287e"&gt;ENTRY&lt;/span&gt;(sys_call_table)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#902000"&gt;long&lt;/span&gt; sys_restart_syscall &lt;span style="color:#60a0b0;font-style:italic"&gt;/* 0 - old &amp;#34;setup()&amp;#34; system call, used for restarting */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#902000"&gt;long&lt;/span&gt; sys_exit
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#902000"&gt;long&lt;/span&gt; ptregs_fork
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#902000"&gt;long&lt;/span&gt; sys_read
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#902000"&gt;long&lt;/span&gt; sys_write
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#902000"&gt;long&lt;/span&gt; sys_open &lt;span style="color:#60a0b0;font-style:italic"&gt;/* 5 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#902000"&gt;long&lt;/span&gt; sys_close
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#902000"&gt;long&lt;/span&gt; sys_waitpid
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#902000"&gt;long&lt;/span&gt; sys_creat
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#902000"&gt;long&lt;/span&gt; sys_link
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#902000"&gt;long&lt;/span&gt; sys_unlink &lt;span style="color:#60a0b0;font-style:italic"&gt;/* 10 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#902000"&gt;long&lt;/span&gt; ptregs_execve
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#902000"&gt;long&lt;/span&gt; sys_chdir
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#902000"&gt;long&lt;/span&gt; sys_time
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#60a0b0;font-style:italic"&gt;/* 略 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;关于&lt;code&gt;SAVE_ALL&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-16"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-16"&gt;16&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-17"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-17"&gt;17&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-18"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-18"&gt;18&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-19"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-19"&gt;19&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-20"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-20"&gt;20&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-21"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-21"&gt;21&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-22"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-22"&gt;22&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-23"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-23"&gt;23&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-24"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-24"&gt;24&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-25"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-25"&gt;25&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-26"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-26"&gt;26&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-27"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-27"&gt;27&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-28"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-28"&gt;28&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-29"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-29"&gt;29&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-30"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-30"&gt;30&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-31"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-31"&gt;31&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-32"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-32"&gt;32&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-33"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-33"&gt;33&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-34"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-34"&gt;34&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-35"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-35"&gt;35&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-36"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-36"&gt;36&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-37"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-37"&gt;37&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-38"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-38"&gt;38&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-39"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-39"&gt;39&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-8-40"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-8-40"&gt;40&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-C" data-lang="C"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.macro SAVE_ALL
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; cld
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; PUSH_GS
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pushl &lt;span style="color:#666"&gt;%&lt;/span&gt;fs
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CFI_ADJUST_CFA_OFFSET &lt;span style="color:#40a070"&gt;4&lt;/span&gt; &lt;span style=""&gt;#&lt;/span&gt; &lt;span style=""&gt;这些宏暂时不知道干啥的&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#60a0b0;font-style:italic"&gt;/*CFI_REL_OFFSET fs, 0;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pushl &lt;span style="color:#666"&gt;%&lt;/span&gt;es
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CFI_ADJUST_CFA_OFFSET &lt;span style="color:#40a070"&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#60a0b0;font-style:italic"&gt;/*CFI_REL_OFFSET es, 0;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pushl &lt;span style="color:#666"&gt;%&lt;/span&gt;ds
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CFI_ADJUST_CFA_OFFSET &lt;span style="color:#40a070"&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#60a0b0;font-style:italic"&gt;/*CFI_REL_OFFSET ds, 0;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pushl &lt;span style="color:#666"&gt;%&lt;/span&gt;eax
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CFI_ADJUST_CFA_OFFSET &lt;span style="color:#40a070"&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CFI_REL_OFFSET eax, &lt;span style="color:#40a070"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pushl &lt;span style="color:#666"&gt;%&lt;/span&gt;ebp
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CFI_ADJUST_CFA_OFFSET &lt;span style="color:#40a070"&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CFI_REL_OFFSET ebp, &lt;span style="color:#40a070"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pushl &lt;span style="color:#666"&gt;%&lt;/span&gt;edi
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CFI_ADJUST_CFA_OFFSET &lt;span style="color:#40a070"&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CFI_REL_OFFSET edi, &lt;span style="color:#40a070"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pushl &lt;span style="color:#666"&gt;%&lt;/span&gt;esi
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CFI_ADJUST_CFA_OFFSET &lt;span style="color:#40a070"&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CFI_REL_OFFSET esi, &lt;span style="color:#40a070"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pushl &lt;span style="color:#666"&gt;%&lt;/span&gt;edx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CFI_ADJUST_CFA_OFFSET &lt;span style="color:#40a070"&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CFI_REL_OFFSET edx, &lt;span style="color:#40a070"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pushl &lt;span style="color:#666"&gt;%&lt;/span&gt;ecx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CFI_ADJUST_CFA_OFFSET &lt;span style="color:#40a070"&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CFI_REL_OFFSET ecx,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pushl &lt;span style="color:#666"&gt;%&lt;/span&gt;ebx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CFI_ADJUST_CFA_OFFSET &lt;span style="color:#40a070"&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CFI_REL_OFFSET ebx, &lt;span style="color:#40a070"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; movl &lt;span style=""&gt;$&lt;/span&gt;(__USER_DS), &lt;span style="color:#666"&gt;%&lt;/span&gt;edx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; movl &lt;span style="color:#666"&gt;%&lt;/span&gt;edx, &lt;span style="color:#666"&gt;%&lt;/span&gt;ds
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; movl &lt;span style="color:#666"&gt;%&lt;/span&gt;edx, &lt;span style="color:#666"&gt;%&lt;/span&gt;es
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; movl &lt;span style=""&gt;$&lt;/span&gt;(__KERNEL_PERCPU), &lt;span style="color:#666"&gt;%&lt;/span&gt;edx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; movl &lt;span style="color:#666"&gt;%&lt;/span&gt;edx, &lt;span style="color:#666"&gt;%&lt;/span&gt;fs
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; SET_KERNEL_GS &lt;span style="color:#666"&gt;%&lt;/span&gt;edx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.endm
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;穿插一些宏暂时不知道干什么的，先不管。主要看一下寄存器的压栈顺序：&lt;code&gt;%es %ds %eax %ebp %edi %esi %edx %ecx %ebx &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="/os-basics/2019-04-15-x86%E5%B9%B3%E5%8F%B0linux%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8/stack_status.png" alt="image-stack_status"&gt;&lt;/p&gt;
&lt;h2 id="系统调用的定义"&gt;系统调用的定义&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-16"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-16"&gt;16&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-17"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-17"&gt;17&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-18"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-18"&gt;18&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-19"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-19"&gt;19&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-20"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-20"&gt;20&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-21"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-21"&gt;21&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-22"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-22"&gt;22&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-23"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-23"&gt;23&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-24"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-24"&gt;24&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-25"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-25"&gt;25&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-26"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-26"&gt;26&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-27"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-27"&gt;27&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-28"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-28"&gt;28&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-29"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-29"&gt;29&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-30"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-30"&gt;30&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-31"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-31"&gt;31&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-32"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-32"&gt;32&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-33"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-33"&gt;33&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-34"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-34"&gt;34&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-35"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-35"&gt;35&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-36"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-36"&gt;36&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-37"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-37"&gt;37&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-38"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-38"&gt;38&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-39"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-39"&gt;39&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-40"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-40"&gt;40&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-41"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-41"&gt;41&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-42"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-42"&gt;42&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-43"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-43"&gt;43&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-44"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-44"&gt;44&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-45"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-45"&gt;45&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-46"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-46"&gt;46&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-47"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-47"&gt;47&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-48"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-48"&gt;48&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-49"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-49"&gt;49&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-50"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-50"&gt;50&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-51"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-51"&gt;51&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-52"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-52"&gt;52&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-53"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-53"&gt;53&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-54"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-54"&gt;54&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-55"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-55"&gt;55&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-56"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-56"&gt;56&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-57"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-57"&gt;57&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-58"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-58"&gt;58&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-59"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-59"&gt;59&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-60"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-60"&gt;60&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-61"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-61"&gt;61&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-9-62"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-9-62"&gt;62&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/* include/linux/syscalls.h */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define SYSCALL_DEFINE0(sname) \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt; static const struct syscall_metadata __used \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt; __attribute__((__aligned__(4))) \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt; __attribute__((section(&amp;#34;__syscalls_metadata&amp;#34;))) \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt; __syscall_meta_##sname = { \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt; .name = &amp;#34;sys_&amp;#34;#sname, \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt; .nb_args = 0, \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt; }; \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt; asmlinkage long sys_##sname(void)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#else
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define SYSCALL_DEFINE0(name) asmlinkage long sys_##name(void)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define SYSCALL_DEFINE1(name, ...) SYSCALL_DEFINEx(1, _##name, __VA_ARGS__)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define SYSCALL_DEFINE2(name, ...) SYSCALL_DEFINEx(2, _##name, __VA_ARGS__)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define SYSCALL_DEFINE3(name, ...) SYSCALL_DEFINEx(3, _##name, __VA_ARGS__)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define SYSCALL_DEFINE4(name, ...) SYSCALL_DEFINEx(4, _##name, __VA_ARGS__)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define SYSCALL_DEFINE5(name, ...) SYSCALL_DEFINEx(5, _##name, __VA_ARGS__)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define SYSCALL_DEFINE6(name, ...) SYSCALL_DEFINEx(6, _##name, __VA_ARGS__)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/* 其中 SYSCALL_DEFINEx*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#ifdef CONFIG_FTRACE_SYSCALLS &lt;/span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/*ftrace是内核提供的一种调试工具*/&lt;/span&gt;&lt;span style="color:#007020"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define SYSCALL_DEFINEx(x, sname, ...) \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt; static const char *types_##sname[] = { \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt; __SC_STR_TDECL##x(__VA_ARGS__) \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt; }; \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt; static const char *args_##sname[] = { \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt; __SC_STR_ADECL##x(__VA_ARGS__) \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt; }; \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt; SYSCALL_METADATA(sname, x); \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt; __SYSCALL_DEFINEx(x, sname, __VA_ARGS__)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#else
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define SYSCALL_DEFINEx(x, sname, ...) \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt; __SYSCALL_DEFINEx(x, sname, __VA_ARGS__)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define SYSCALL_DEFINE(name) static inline long SYSC_##name
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define __SYSCALL_DEFINEx(x, name, ...) \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt; asmlinkage long sys##name(__SC_DECL##x(__VA_ARGS__)); \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt; static inline long SYSC##name(__SC_DECL##x(__VA_ARGS__)); \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt; asmlinkage long SyS##name(__SC_LONG##x(__VA_ARGS__)) \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt; { \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt; __SC_TEST##x(__VA_ARGS__); \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt; return (long) SYSC##name(__SC_CAST##x(__VA_ARGS__)); \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt; } \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt; SYSCALL_ALIAS(sys##name, SyS##name); \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt; static inline long SYSC##name(__SC_DECL##x(__VA_ARGS__))
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#else &lt;/span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/* CONFIG_HAVE_SYSCALL_WRAPPERS */&lt;/span&gt;&lt;span style="color:#007020"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define SYSCALL_DEFINE(name) asmlinkage long sys_##name
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define __SYSCALL_DEFINEx(x, name, ...) \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt; asmlinkage long sys##name(__SC_DECL##x(__VA_ARGS__))
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#endif &lt;/span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/* CONFIG_HAVE_SYSCALL_WRAPPERS */&lt;/span&gt;&lt;span style="color:#007020"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/* 后边是所有系统调用的函数声明 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;asmlinkage &lt;span style="color:#902000"&gt;long&lt;/span&gt; &lt;span style="color:#06287e"&gt;sys_time&lt;/span&gt;(&lt;span style="color:#902000"&gt;time_t&lt;/span&gt; __user &lt;span style="color:#666"&gt;*&lt;/span&gt;tloc);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;系统调用的定义分布在内核源代码多个源文件中&lt;code&gt;find . -type f -name &amp;quot;*.c&amp;quot; | xargs grep SYSCALL_DEFINE | wc -l&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="系统调用号"&gt;系统调用号&lt;/h2&gt;
&lt;p&gt;每个系统调用&lt;code&gt;xxx&lt;/code&gt;都对应着一个系统调用号&lt;code&gt;__NR_xxx&lt;/code&gt;。当应用程序调用某系统调用时，寄存器eax中保存该系统调用对应的系统调用号。系统调用号定义于如下头文件中：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-10-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-10-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-C" data-lang="C"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;include&lt;span style="color:#666"&gt;/&lt;/span&gt;linux&lt;span style="color:#666"&gt;/&lt;/span&gt;unistd.h
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt;+-&lt;/span&gt; arch&lt;span style="color:#666"&gt;/&lt;/span&gt;x86&lt;span style="color:#666"&gt;/&lt;/span&gt;include&lt;span style="color:#666"&gt;/&lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;asm&lt;/span&gt;&lt;span style="color:#666"&gt;/&lt;/span&gt;unistd.h
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#666"&gt;+-&lt;/span&gt; arch&lt;span style="color:#666"&gt;/&lt;/span&gt;x86&lt;span style="color:#666"&gt;/&lt;/span&gt;include&lt;span style="color:#666"&gt;/&lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;asm&lt;/span&gt;&lt;span style="color:#666"&gt;/&lt;/span&gt;unistd_32.h
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#666"&gt;|&lt;/span&gt; &lt;span style="color:#666"&gt;+-&lt;/span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#666"&gt;|&lt;/span&gt; &lt;span style="color:#666"&gt;+-&lt;/span&gt; &lt;span style=""&gt;#&lt;/span&gt;define __NR_process_vm_writev &lt;span style="color:#40a070"&gt;348&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#666"&gt;|&lt;/span&gt; &lt;span style="color:#666"&gt;+-&lt;/span&gt; &lt;span style=""&gt;#&lt;/span&gt;define NR_syscalls &lt;span style="color:#40a070"&gt;349&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#666"&gt;+-&lt;/span&gt; arch&lt;span style="color:#666"&gt;/&lt;/span&gt;x86&lt;span style="color:#666"&gt;/&lt;/span&gt;include&lt;span style="color:#666"&gt;/&lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;asm&lt;/span&gt;&lt;span style="color:#666"&gt;/&lt;/span&gt;unistd_64.h
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#666"&gt;+-&lt;/span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#666"&gt;+-&lt;/span&gt; &lt;span style=""&gt;#&lt;/span&gt;define __NR_process_vm_writev &lt;span style="color:#40a070"&gt;311&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#666"&gt;+-&lt;/span&gt; &lt;span style="color:#06287e"&gt;__SYSCALL&lt;/span&gt;(__NR_process_vm_writev, sys_process_vm_writev)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;在应用程序中仅需包含头文件&lt;code&gt;#include &amp;lt;unistd.h&amp;gt;&lt;/code&gt;即可。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-1"&gt;1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-2"&gt;2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-3"&gt;3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-4"&gt;4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-5"&gt;5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-6"&gt;6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-7"&gt;7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-8"&gt;8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-11-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-11-9"&gt;9&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#ifndef _LINUX_UNISTD_H_
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define _LINUX_UNISTD_H_
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; * Include machine specific syscall numbers
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#include&lt;/span&gt; &lt;span style="color:#007020"&gt;&amp;lt;asm/unistd.h&amp;gt;&lt;/span&gt;&lt;span style="color:#007020"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#endif &lt;/span&gt;&lt;span style="color:#60a0b0;font-style:italic"&gt;/* _LINUX_UNISTD_H_ */&lt;/span&gt;&lt;span style="color:#007020"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;对于x86而言，&lt;code&gt;asm/unistd.h&lt;/code&gt;即为&lt;code&gt;arch/x86/include/asm/unistd.h&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-16"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-16"&gt;16&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-17"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-17"&gt;17&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-18"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-18"&gt;18&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-19"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-19"&gt;19&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-20"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-20"&gt;20&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-21"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-21"&gt;21&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-22"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-22"&gt;22&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-23"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-23"&gt;23&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-24"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-24"&gt;24&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-25"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-25"&gt;25&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-26"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-26"&gt;26&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-27"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-27"&gt;27&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-28"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-28"&gt;28&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-12-29"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-12-29"&gt;29&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#ifdef __KERNEL__
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;# ifdef CONFIG_X86_32
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;# include &amp;#34;unistd_32.h&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;# else
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;# include &amp;#34;unistd_64.h&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;# endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#else
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;# ifdef __i386__
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;# include &amp;#34;unistd_32.h&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;# else
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;# include &amp;#34;unistd_64.h&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;# endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style=""&gt;对于&lt;/span&gt;x86 &lt;span style="color:#40a070"&gt;32&lt;/span&gt;&lt;span style="color:#666"&gt;-&lt;/span&gt;bit而言&lt;span style=""&gt;，&lt;/span&gt;unistd_32.h即为arch&lt;span style="color:#666"&gt;/&lt;/span&gt;x86&lt;span style="color:#666"&gt;/&lt;/span&gt;include&lt;span style="color:#666"&gt;/&lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;asm&lt;/span&gt;&lt;span style="color:#666"&gt;/&lt;/span&gt;unistd_32.&lt;span style="color:#002070;font-weight:bold"&gt;h&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define __NR_restart_syscall 0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define __NR_exit 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define __NR_fork 2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define __NR_read 3
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define __NR_write 4
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define __NR_open 5
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define __NR_close 6
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define __NR_process_vm_readv 347
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define __NR_process_vm_writev 348
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#ifdef __KERNEL__
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define NR_syscalls 349
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="系统调用的返回值"&gt;系统调用的返回值&lt;/h2&gt;
&lt;p&gt;如果系统调用执行失败，系统调用并不直接返回错误码，而是将错误码保存到全局变量&lt;code&gt;errno&lt;/code&gt;中，因而可根据&lt;code&gt;errno&lt;/code&gt;的值来确定错误类型。错误码定义于如下头文件中：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-1"&gt;1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-2"&gt;2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-3"&gt;3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-13-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-13-4"&gt;4&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;include&lt;span style="color:#666"&gt;/&lt;/span&gt;linux&lt;span style="color:#666"&gt;/&lt;/span&gt;errno.h &lt;span style="color:#60a0b0;font-style:italic"&gt;// 错误码512-530
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt; arch&lt;span style="color:#666"&gt;/&lt;/span&gt;x86&lt;span style="color:#666"&gt;/&lt;/span&gt;include&lt;span style="color:#666"&gt;/&lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;asm&lt;/span&gt;&lt;span style="color:#666"&gt;/&lt;/span&gt;errno.h &lt;span style="color:#60a0b0;font-style:italic"&gt;// 仅包含asm-generic/errno.h，未新增错误码
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt; include&lt;span style="color:#666"&gt;/&lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;asm&lt;/span&gt;&lt;span style="color:#666"&gt;-&lt;/span&gt;generic&lt;span style="color:#666"&gt;/&lt;/span&gt;errno.h &lt;span style="color:#60a0b0;font-style:italic"&gt;// 错误码35-133
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt; include&lt;span style="color:#666"&gt;/&lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;asm&lt;/span&gt;&lt;span style="color:#666"&gt;-&lt;/span&gt;generic&lt;span style="color:#666"&gt;/&lt;/span&gt;errno&lt;span style="color:#666"&gt;-&lt;/span&gt;base.h &lt;span style="color:#60a0b0;font-style:italic"&gt;// 错误码1-34
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;也可以执行&lt;code&gt; man errno&lt;/code&gt;查询到。&lt;/p&gt;
&lt;h2 id="新增系统调用"&gt;新增系统调用&lt;/h2&gt;
&lt;h3 id="通过修改内核代码"&gt;通过修改内核代码&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;确定新增的系统调用号
&lt;ol&gt;
&lt;li&gt;修改arch/x86/include/asm/unistd_32.h，为新增的系统调用定义的系统调用号&lt;code&gt;#define _NR_testsyscall 350&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;修改arch/x86/kernel/syscall_table_32.S，将新增的系统调用加入到系统调用表，即数组sys_call_table中写入：&lt;code&gt;long sys_testsyscall /* 350 */&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;编写新增的系统调用
编写一个系统调用意味着要给内核增加一个函数，将该函数写入文件kernel/sys.c中，代码如下：
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-1"&gt;1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-2"&gt;2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-3"&gt;3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-4"&gt;4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-14-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-14-5"&gt;5&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#06287e"&gt;SYSCALL_DEFINE0&lt;/span&gt;(testsyscall)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;console_print&lt;/span&gt;(&lt;span style="color:#4070a0"&gt;&amp;#34;hello world&lt;/span&gt;&lt;span style="color:#4070a0;font-weight:bold"&gt;\n&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;return&lt;/span&gt; &lt;span style="color:#40a070"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;使用新增的系统调用
因为C库中没有新增的系统调用的程序段，必须自己建立其代码，如下：
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-15-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-15-1"&gt;1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-15-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-15-2"&gt;2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-15-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-15-3"&gt;3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-15-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-15-4"&gt;4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-15-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-15-5"&gt;5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-15-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-15-6"&gt;6&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#inculde &amp;lt;syscalls.h&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#06287e"&gt;SYSCALL_DEFINE0&lt;/span&gt;(testsyscall)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#902000"&gt;void&lt;/span&gt; &lt;span style="color:#06287e"&gt;main&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;tsetsyscall&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="通过编写插入内核模块"&gt;通过编写插入内核模块&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;编写系统调用内核模块
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-12"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-13"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-14"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-15"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-16"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-16"&gt;16&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-17"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-17"&gt;17&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-18"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-18"&gt;18&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-19"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-19"&gt;19&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-20"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-20"&gt;20&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-21"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-21"&gt;21&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-22"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-22"&gt;22&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-23"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-23"&gt;23&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-24"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-24"&gt;24&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-25"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-25"&gt;25&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-26"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-26"&gt;26&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-27"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-27"&gt;27&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-16-28"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-16-28"&gt;28&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020"&gt;#inculde &amp;lt;linux/kernel.h&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020"&gt;#inculde &amp;lt;linux/module.h&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020"&gt;#inculde &amp;lt;linux/modversions.h&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020"&gt;#inculde &amp;lt;linux/sched.h&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020"&gt;#inculde &amp;lt;asm/uaccess.h&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020"&gt;#define _NR_testsyscall 350
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;extern&lt;/span&gt; &lt;span style="color:#902000"&gt;void&lt;/span&gt; &lt;span style="color:#666"&gt;*&lt;/span&gt;sys_call_table[];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; asmlinkage &lt;span style="color:#902000"&gt;long&lt;/span&gt; &lt;span style="color:#06287e"&gt;testsyscall&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;printf&lt;/span&gt;(&lt;span style="color:#4070a0"&gt;&amp;#34;hello world&lt;/span&gt;&lt;span style="color:#4070a0;font-weight:bold"&gt;\n&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;return&lt;/span&gt; &lt;span style="color:#40a070"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;int&lt;/span&gt; &lt;span style="color:#06287e"&gt;syscall_test_init&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sys_call_table[_NR_tsetsyscall] &lt;span style="color:#666"&gt;=&lt;/span&gt; testsyscall;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;printf&lt;/span&gt;(&lt;span style="color:#4070a0"&gt;&amp;#34;system call testsyscall() loaded success&lt;/span&gt;&lt;span style="color:#4070a0;font-weight:bold"&gt;\n&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;return&lt;/span&gt; &lt;span style="color:#40a070"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;module_init&lt;/span&gt;(syscall_test_init);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;void&lt;/span&gt; &lt;span style="color:#06287e"&gt;syscall_test_exit&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#06287e"&gt;module_exit&lt;/span&gt;(syscall_test_exit)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;编写使用新增的系统调用的代码&lt;/li&gt;
&lt;li&gt;编译内核模块并插入内核模块&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="从用户空间直接访问系统调用"&gt;从用户空间直接访问系统调用&lt;/h2&gt;
&lt;p&gt;方式一：通过C库函数，C库函数封装了所有的系统调用。&lt;/p&gt;
&lt;p&gt;方式二：2.6.18版本之前的内核可以使用&lt;code&gt;_syscall&lt;/code&gt;宏。但是自2.6.19版本开始，&lt;code&gt;_syscall&lt;/code&gt;宏被废除，我们需要使用&lt;code&gt;syscall&lt;/code&gt;函数，通过指定&lt;code&gt;系统调用号&lt;/code&gt;和一组参数来调用系统调用。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-1"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-2"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-3"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-4"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-5"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-6"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-7"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-8"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-9"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-10"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-17-11"&gt;&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-17-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#include&lt;/span&gt; &lt;span style="color:#007020"&gt;&amp;lt;unistd.h&amp;gt; &lt;/span&gt;&lt;span style="color:#007020"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#include&lt;/span&gt; &lt;span style="color:#007020"&gt;&amp;lt;sys/syscall.h&amp;gt; &lt;/span&gt;&lt;span style="color:#007020"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#include&lt;/span&gt; &lt;span style="color:#007020"&gt;&amp;lt;sys/types.h&amp;gt; &lt;/span&gt;&lt;span style="color:#007020"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;#define __NR_gettid 224
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#902000"&gt;int&lt;/span&gt; &lt;span style="color:#06287e"&gt;main&lt;/span&gt;(&lt;span style="color:#902000"&gt;int&lt;/span&gt; argc, &lt;span style="color:#902000"&gt;char&lt;/span&gt; &lt;span style="color:#666"&gt;*&lt;/span&gt;argv[])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#902000"&gt;pid_t&lt;/span&gt; tid;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; tid &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#06287e"&gt;syscall&lt;/span&gt;(__NR_gettid); &lt;span style="color:#60a0b0;font-style:italic"&gt;//括号内参数直接写224也可以
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#60a0b0;font-style:italic"&gt;/*也可以写成tid = syscall(SYS_gettid);*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="https://www.jianshu.com/p/5e96fd50f3b5"&gt;参考&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;注： syscall()函数是glibc中的一个用户空间函数，可以通过&lt;code&gt;man syscall&lt;/code&gt;命令查看，函数声明在/usr/include/unistd.h中，对应系统调用号在/usr/include/asm-generic/unistd.h中声明。&lt;/p&gt;
&lt;/blockquote&gt;</description></item></channel></rss>