<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>http://wiki.foofun.cn//index.php?action=history&amp;feed=atom&amp;title=AML</id>
	<title>AML - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.foofun.cn//index.php?action=history&amp;feed=atom&amp;title=AML"/>
	<link rel="alternate" type="text/html" href="http://wiki.foofun.cn//index.php?title=AML&amp;action=history"/>
	<updated>2026-04-04T06:25:35Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>http://wiki.foofun.cn//index.php?title=AML&amp;diff=950&amp;oldid=prev</id>
		<title>Zhang3：创建页面，内容为“{{stub}} ACPI机器语言(AML)是ACPI使用的与平台无关的代码。 甚至需要关闭计算机的知识。 它可以在DSDT和SSDT表中找到，这两个表依次通过解析RSDT或XSDT来找到。  AML代码是在读取每个表时从该表的开头开始解析的字节代码。  它包含ACPI命名空间内的设备和对象的定义。  通过解析代码，注意所有适当的控制流语句，AML解释器可以建立系统内所有…”</title>
		<link rel="alternate" type="text/html" href="http://wiki.foofun.cn//index.php?title=AML&amp;diff=950&amp;oldid=prev"/>
		<updated>2022-03-19T10:01:45Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“{{stub}} ACPI机器语言(AML)是ACPI使用的与平台无关的代码。 甚至需要关闭计算机的知识。 它可以在&lt;a href=&quot;/index.php?title=DSDT&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;DSDT（页面不存在）&quot;&gt;DSDT&lt;/a&gt;和&lt;a href=&quot;/index.php?title=SSDT&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;SSDT（页面不存在）&quot;&gt;SSDT&lt;/a&gt;表中找到，这两个表依次通过解析&lt;a href=&quot;/index.php?title=RSDT&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;RSDT（页面不存在）&quot;&gt;RSDT&lt;/a&gt;或&lt;a href=&quot;/index.php?title=XSDT&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;XSDT（页面不存在）&quot;&gt;XSDT&lt;/a&gt;来找到。  AML代码是在读取每个表时从该表的开头开始解析的字节代码。  它包含ACPI命名空间内的设备和对象的定义。  通过解析代码，注意所有适当的控制流语句，AML解释器可以建立系统内所有…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{stub}}&lt;br /&gt;
ACPI机器语言(AML)是ACPI使用的与平台无关的代码。 甚至需要关闭计算机的知识。 它可以在[[DSDT]]和[[SSDT]]表中找到，这两个表依次通过解析[[RSDT]]或[[XSDT]]来找到。&lt;br /&gt;
&lt;br /&gt;
AML代码是在读取每个表时从该表的开头开始解析的字节代码。  它包含ACPI命名空间内的设备和对象的定义。  通过解析代码，注意所有适当的控制流语句，AML解释器可以建立系统内所有设备及其支持的属性和功能的数据库（参考配置和电源管理）。&lt;br /&gt;
&lt;br /&gt;
该规范可从[https://uefi.org/specifications UEFI网站]获得。  此外，英特尔在其 [[ACPICA]] 软件中提供了参考实现。&lt;br /&gt;
&lt;br /&gt;
==ASL和AML==&lt;br /&gt;
&lt;br /&gt;
ASL是ACPI源语言（source language）。  它是AML的字节码的一种更人性化的形式。  这种差异与汇编代码和实际二进制机器代码之间的差异相似。  英特尔ASL汇编器(IASL)可在许多Linux发行版上免费获得，并且可以在这些格式之间进行任意方向的转换。&lt;br /&gt;
&lt;br /&gt;
== 示例ASL代码 ==&lt;br /&gt;
&lt;br /&gt;
下面是DSDT的ASL代码的一个非常简单的示例。&lt;br /&gt;
&lt;br /&gt;
test.asl:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
DefinitionBlock (&amp;quot;test.aml&amp;quot;, &amp;quot;DSDT&amp;quot;, 1, &amp;quot;OEMID &amp;quot;, &amp;quot;TABLEID  &amp;quot;, 0x00000000)&lt;br /&gt;
{&lt;br /&gt;
    Scope (_SB)&lt;br /&gt;
    {&lt;br /&gt;
        Device (PCI0)&lt;br /&gt;
        {&lt;br /&gt;
            Name (_HID, EisaId (&amp;quot;PNP0A03&amp;quot;))&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
然后可以通过运行‘iasl test.asl’生成test.aml将其编译为AML。&lt;br /&gt;
&lt;br /&gt;
这是HP pavilion g6 (RTC) 的实际设备。 这被嵌入到一个更大的定义块中：&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
                Device (RTC)&lt;br /&gt;
                {&lt;br /&gt;
                    Name (_HID, EisaId (&amp;quot;PNP0B00&amp;quot;))  // _HID: Hardware ID&lt;br /&gt;
                    Name (_CRS, ResourceTemplate ()  // _CRS: Current Resource Settings&lt;br /&gt;
                    {&lt;br /&gt;
                        IO (Decode16,&lt;br /&gt;
                            0x0070,             // Range Minimum&lt;br /&gt;
                            0x0070,             // Range Maximum&lt;br /&gt;
                            0x01,               // Alignment&lt;br /&gt;
                            0x08,               // Length&lt;br /&gt;
                            )&lt;br /&gt;
                        IRQNoFlags ()&lt;br /&gt;
                            {8}&lt;br /&gt;
                    })&lt;br /&gt;
                    OperationRegion (CMS0, SystemCMOS, Zero, 0x40)&lt;br /&gt;
                    Field (CMS0, ByteAcc, NoLock, Preserve)&lt;br /&gt;
                    {&lt;br /&gt;
                        RTSE,   8, &lt;br /&gt;
                        Offset (0x02), &lt;br /&gt;
                        RTMN,   8, &lt;br /&gt;
                        Offset (0x04), &lt;br /&gt;
                        RTHR,   8, &lt;br /&gt;
                        Offset (0x06), &lt;br /&gt;
                        RTDY,   8, &lt;br /&gt;
                        RTDE,   8&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
请注意，该区域位于CMOS中。&lt;br /&gt;
&lt;br /&gt;
从RTC开始，这是同一台PC上的PS/2键盘:&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
                Device (PS2K)&lt;br /&gt;
                {&lt;br /&gt;
                    Name (_HID, EisaId (&amp;quot;PNP0303&amp;quot;))  // _HID: Hardware ID&lt;br /&gt;
                    Method (_STA, 0, NotSerialized)  // _STA: Status&lt;br /&gt;
                    {&lt;br /&gt;
                        Return (0x0F)&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    Name (_CRS, ResourceTemplate ()  // _CRS: Current Resource Settings&lt;br /&gt;
                    {&lt;br /&gt;
                        IO (Decode16,&lt;br /&gt;
                            0x0060,             // Range Minimum&lt;br /&gt;
                            0x0060,             // Range Maximum&lt;br /&gt;
                            0x01,               // Alignment&lt;br /&gt;
                            0x01,               // Length&lt;br /&gt;
                            )&lt;br /&gt;
                        IO (Decode16,&lt;br /&gt;
                            0x0064,             // Range Minimum&lt;br /&gt;
                            0x0064,             // Range Maximum&lt;br /&gt;
                            0x01,               // Alignment&lt;br /&gt;
                            0x01,               // Length&lt;br /&gt;
                            )&lt;br /&gt;
                        IRQ (Edge, ActiveHigh, Exclusive, )&lt;br /&gt;
                            {1}&lt;br /&gt;
                    })&lt;br /&gt;
                    Name (_PRS, ResourceTemplate ()  // _PRS: Possible Resource Settings&lt;br /&gt;
                    {&lt;br /&gt;
                        StartDependentFn (0x00, 0x00)&lt;br /&gt;
                        {&lt;br /&gt;
                            FixedIO (&lt;br /&gt;
                                0x0060,             // Address&lt;br /&gt;
                                0x01,               // Length&lt;br /&gt;
                                )&lt;br /&gt;
                            FixedIO (&lt;br /&gt;
                                0x0064,             // Address&lt;br /&gt;
                                0x01,               // Length&lt;br /&gt;
                                )&lt;br /&gt;
                            IRQNoFlags ()&lt;br /&gt;
                                {1}&lt;br /&gt;
                        }&lt;br /&gt;
                        EndDependentFn ()&lt;br /&gt;
                    })&lt;br /&gt;
                    Name (_PRW, Package (0x02)  // _PRW: Power Resources for Wake&lt;br /&gt;
                    {&lt;br /&gt;
                        0x18, &lt;br /&gt;
                        0x03&lt;br /&gt;
                    })&lt;br /&gt;
                    Method (_PSW, 1, NotSerialized)  // _PSW: Power State Wake&lt;br /&gt;
                    {&lt;br /&gt;
                        Store (Arg0, KBWK)&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上述两个样本是通过我编写的实用程序收集的，该实用程序从注册表中获取DSDT数据，并由iASL进行反汇编。--[[User:Bellezzasolo|Bellezzasolo]] 14:58, 20 January 2013 (CST)&lt;br /&gt;
&lt;br /&gt;
这将定义一个表(DSDT)，并请求将输出AML放在名为test.aml的文件中。  “OEMID” 是一个6个字符的字符串，定义了制造系统固件的OEM的名称，“TABLEID” 是一个8个字符的字符串，定义了表的名称 - 它通常是特定于OEM的。  DefinitionBlock行中的最后一个条目是OEM修订ID。  它在根命名空间中定义了一个命名空间，称为 _SB。  请注意，所有设备/作用域/对象名称的长度均为4个字符，因此有时用“_SB”表示。  _SB是ACPI命名空间中的一个特殊名称，称为“系统总线(System Bus)”，它是找到所有设备和总线对象的主要作用域。  有关预定义名称的列表，请参见ACPI规范表5-67。&lt;br /&gt;
&lt;br /&gt;
在_SB范围内，我们定义了一个名为PCI0的设备，其中有一个名为_HID的对象。  _HID同样是指设备的即插即用（Plug and Play）硬件ID的预定义名称，在本例中，内置宏EisaId用于从“PNP0A03”生成值0x030ad041，PNP0A03是PCI根总线的PnP ID。  可从 [http://tuxmobil.org/pnp_ids.html] 获得相当完整的PNP id列表。&lt;br /&gt;
&lt;br /&gt;
==AML操作码==&lt;br /&gt;
&lt;br /&gt;
此表来自ACPI规范，其中提供的主要是在调试AML解析器期间使用的表。 例如，如果你的解析器失败，并且下一个字节 (它无法解析) 是 “0x72”，那么你可以参考此表以查看它是 “添加” 操作。 不要让这张表让你误以为AML是由一个简单指令的线性流组成的，一次只能解码一条指令。 大多数AML由嵌套的递归定义的结构和列表组成。&lt;br /&gt;
&lt;br /&gt;
{| {{wikitable}}&lt;br /&gt;
! Value (Hex)&lt;br /&gt;
! Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || ZeroOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || OneOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || AliasOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || NameOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || BytePrefix&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || WordPrefix&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || DWordPrefix&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || StringPrefix&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || QWordPrefix&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || ScopeOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || BufferOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || PackageOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || VarPackageOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || MethodOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E (‘.’) || DualNamePrefix&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F (‘/’) || MultiNamePrefix&lt;br /&gt;
|-&lt;br /&gt;
| 0x30-0x39 ('0'-'9') || DigitChar&lt;br /&gt;
|-&lt;br /&gt;
| 0x41-0x5A (‘A’-‘Z’) || NameChar&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B (‘[’) || ExtOpPrefix&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B 0x01 || MutexOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B 0x02 || EventOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B 0x12 || CondRefOfOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B 0x13 || CreateFieldOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B 0x1F || LoadTableOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B 0x20 || LoadOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B 0x21 || StallOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B 0x22 || SleepOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B 0x23 || AcquireOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B 0x24 || SignalOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B 0x25 || WaitOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B 0x26 || ResetOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B 0x27 || ReleaseOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B 0x28 || FromBCDOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B 0x29 || ToBCD&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B 0x2A || UnloadOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B 0x30 || RevisionOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B 0x31 || DebugOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B 0x32 || FatalOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B 0x33 || TimerOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B 0x80 || OpRegionOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B 0x81 || FieldOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B 0x82 || DeviceOpList&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B 0x83 || ProcessorOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B 0x84 || PowerResOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B 0x85 || ThermalZoneOpList&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B 0x86 || IndexFieldOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B 0x87 || BankFieldOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B 0x88 || DataRegionOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C (‘\’) || RootChar&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E (‘^’) || ParentPrefixChar&lt;br /&gt;
|-&lt;br /&gt;
| 0x5F(‘_’) || NameChar&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 (‘`’) || Local0Op&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 (‘a’) || Local1Op&lt;br /&gt;
|-&lt;br /&gt;
| 0x62 (‘b’) || Local2Op&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 (‘c’) || Local3Op&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 (‘d’) || Local4Op&lt;br /&gt;
|-&lt;br /&gt;
| 0x65 (‘e’) || Local5Op&lt;br /&gt;
|-&lt;br /&gt;
| 0x66 (‘f’) || Local6Op&lt;br /&gt;
|-&lt;br /&gt;
| 0x67 (‘g’) || Local7Op&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 (‘h’) || Arg0Op&lt;br /&gt;
|-&lt;br /&gt;
| 0x69 (‘i’) || Arg1Op&lt;br /&gt;
|-&lt;br /&gt;
| 0x6A (‘j’) || Arg2Op&lt;br /&gt;
|-&lt;br /&gt;
| 0x6B (‘k’) || Arg3Op&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C (‘l’) || Arg4Op&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D (‘m’) || Arg5Op&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E (‘n’) || Arg6Op&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || StoreOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x71 || RefOfOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x72 || AddOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x73 || ConcatOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x74 || SubtractOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x75 || IncrementOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x76 || DecrementOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x77 || MultiplyOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x78 || DivideOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x79 || ShiftLeftOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x7A || ShiftRightOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x7B || AndOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C || NandOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D || OrOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x7E || NorOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x7F || XorOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || NotOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x81 || FindSetLeftBitOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x82 || FindSetRightBitOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x83 || DerefOfOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x84 || ConcatResOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x85 || ModOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x86 || NotifyOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x87 || SizeOfOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x88 || IndexOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x89 || MatchOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A || CreateDWordFieldOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x8B || CreateWordFieldOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x8C || CreateByteFieldOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x8D || CreateBitFieldOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E || TypeOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x8F || CreateQWordFieldOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || LandOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x91 || LorOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x92 || LnotOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x92 0x93 || LNotEqualOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x92 0x94 || LLessEqualOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x92 0x95 || LGreaterEqualOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x93 || LEqualOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x94 || LGreaterOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x95 || LLessOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x96 || ToBufferOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x97 || ToDecimalStringOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x98 || ToHexStringOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x99 || ToIntegerOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x9C || ToStringOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x9D || CopyObjectOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x9E || MidOp&lt;br /&gt;
|-&lt;br /&gt;
| 0x9F || ContinueOp&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || IfOp&lt;br /&gt;
|-&lt;br /&gt;
| 0xA1 || ElseOp&lt;br /&gt;
|-&lt;br /&gt;
| 0xA2 || WhileOp&lt;br /&gt;
|-&lt;br /&gt;
| 0xA3 || NoopOp&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4 || ReturnOp&lt;br /&gt;
|-&lt;br /&gt;
| 0xA5 || BreakOp&lt;br /&gt;
|-&lt;br /&gt;
| 0xCC || BreakPointOp&lt;br /&gt;
|-&lt;br /&gt;
| 0xFF || OnesOp&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:ACPI]]&lt;/div&gt;</summary>
		<author><name>Zhang3</name></author>
	</entry>
</feed>