<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="https://www.gentoo-zh.org/extern.php?action=feed&amp;tid=295&amp;type=rss" rel="self" type="application/rss+xml" />
		<title><![CDATA[Gentoo中文社区 / 宏]]></title>
		<link>https://www.gentoo-zh.org/viewtopic.php?id=295</link>
		<description><![CDATA[宏 最近发表的帖子。]]></description>
		<lastBuildDate>Fri, 26 Aug 2022 05:59:40 +0000</lastBuildDate>
		<generator>FluxBB</generator>
		<item>
			<title><![CDATA[宏]]></title>
			<link>https://www.gentoo-zh.org/viewtopic.php?pid=301#p301</link>
			<description><![CDATA[<p>宏语法格式如下：<br />%macro 宏名称 参数个数<br />宏的内容<br />%endmacro<br />宏的第一个参数用%1表示，第二个参数用%2表示，依次类推。</p><br /><br /><p>最近看orange’s 一个操作系统的实现，发现nasm中的宏汇编不是很清楚，在此详细记录一下</p><p>%macro Descriptor 3<br />dw %1 &amp; 0FFFFh&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;; 段基址1 <br />dw %2 &amp; 0FFFFh&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;; 段界限1 <br />db (%1&gt;&gt;16) &amp; 0FFh&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;; 段基址2<br />dw ((%2&gt;&gt;8) &amp; 0F00h) | (%3 &amp; 0F0FFh) ; 属性1+段界限2+属 性2<br />db (%1&gt;&gt;24) &amp; 0FFh&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;; 段基址3 <br />%endmacro; <br />共 8 字节 在段[SECTION.gdt]中并列有3个Descriptor，看上去是个结构数</p><p>上面的是宏的详细情况，下面是调用宏</p><p>LABEL_GDT: Descriptor 0, 0, 0 ; 空描述符</p><p>其中Descriptor 0,0,0表示传入的三个参数，这三个参数在宏定义中就是以%1，%2，%3表示，所以将%1用传入的参数替换掉即可</p><p>替换后的情况即：</p><p>dw&#160; 0 &amp; 0FFFFh&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;; 段基址1 <br />dw&#160; 0 &amp; 0FFFFh&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;; 段界限1 <br />db (0&gt;&gt;16) &amp; 0FFh&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; ; 段基址2<br />dw ((0&gt;&gt;8) &amp; 0F00h) | (0 &amp; 0F0FFh) ; 属性1+段界限2+属 性2<br /> db (0&gt;&gt;24) &amp; 0FFh&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;; 段基址3 <br />%endmacro; </p><p>共 8 字节 在段[SECTION.gdt]中并列有3个Descriptor，看上去是个结构数</p><p>就是这么简单</p>]]></description>
			<author><![CDATA[dummy@example.com (batsom)]]></author>
			<pubDate>Fri, 26 Aug 2022 05:59:40 +0000</pubDate>
			<guid>https://www.gentoo-zh.org/viewtopic.php?pid=301#p301</guid>
		</item>
	</channel>
</rss>
