19.6.62. Index(成员对象的索引引用)
语法 :
Index (Source, Index, Destination) => ObjectReference
Destination = Source [ Index ] => 对象引用
参数
Source 被求值为缓冲区、字符串或包数据类型。Index 被求值为整数。Source 中第 n 个对象(其中 n = Index)的引用可以选择性地作为引用存储到 Destination 中。
说明
当 Source 求值为 Buffer 时,Index 返回一个对 Buffer Field 的引用,该字段包含缓冲区中的第 n 个字节。当 Source 求值为 String 时,Index 返回一个对 Buffer Field 的引用,该字段包含字符串中的第 n 个字符。当 Source 求值为 Package 时,Index 返回一个对包中第 n 个对象的引用。
19.6.62.1. 将 Index 与 Package 一起使用
下面的示例 ASL 代码展示了一种使用 Index 术语将一组嵌套包中第一个包的第六个元素存储到局部变量中的方法:
Name (IO0D, Package () {
Package () {
0x01, 0x03F8, 0x03F8, 0x01, 0x08, 0x01, 0x25, 0xFF, 0xFE, 0x00, 0x00
},
Package () {
0x01, 0x02F8, 0x02F8, 0x01, 0x08, 0x01, 0x25, 0xFF, 0xBE, 0x00, 0x00
},
Package () {
0x01, 0x03E8, 0x03E8, 0x01, 0x08, 0x01, 0x25, 0xFF, 0xFA, 0x00, 0x00
},
Package () {
x01, 0x02E8, 0x02E8, 0x01, 0x08, 0x01, 0x25, 0xFF, 0xBA, 0x00, 0x00
},
Package() {
0x01, 0x0100, 0x03F8, 0x08, 0x08, 0x02, 0x25, 0x20, 0x7F, 0x00, 0x00
}
})
// Get the 6th element of the first package
Store (DeRefOf (Index (DeRefOf (Index (IO0D, 0)), 5)), Local0)
注意
在 Store 运算符的第一个操作数中,DeRefOf 是必需的,以便获取实际对象,而不只是对象的引用。如果不使用 DeRefOf,那么 Local0 将包含对第一个包中第六个元素的对象引用,而不是数字 1。*
19.6.62.2. 将 Index 与 Buffer 一起使用
下面的示例 ASL 代码展示了一种存储到缓冲区第三个字节中的方法:
Name (BUFF, Buffer () {0x01, 0x02, 0x03, 0x04, 0x05})
// Store 0x55 into the third byte of the buffer
Store (0x55, Index (BUFF, 2))
Index 运算符返回一个对 8 位 Buffer Field 的引用(类似于使用 CreateByteField 创建的字段)。
如果 Source 被求值为缓冲区数据类型,则对象引用引用 Source 中位于 Index 处的字节。如果 Source 被求值为缓冲区数据类型,则 Store 操作只会更改 Source 中位于 Index 处的字节。
下面的示例 ASL 代码展示了一系列 Store 操作的结果:
Name (SRCB, Buffer () {0x10, 0x20, 0x30, 0x40})
Name (BUFF, Buffer () {0x1, 0x2, 0x3, 0x4})
下面的操作会将 0x78 存储到目标缓冲区的第 3 个字节中:
Store (0x12345678, Index (BUFF, 2))
下面的操作会将 0x10 存储到目标缓冲区的第 2 个字节中:
Store (SRCB, Index (BUFF, 1))
下面的操作会将 0x41(字符“A”)存储到目标缓冲区的第 4 个字节中:
Store ("ABCDEFGH", Index (BUFF, 3))
注意
兼容性说明: 首次在 ACPI 2.0 中引入。在 ACPI 1.0 中,使用 Index 将大于 8 位的数据存储到缓冲区中的行为是未定义的。
19.6.62.3. 将 Index 与字符串一起使用
下面的示例 ASL 代码展示了一种存储到字符串中第 3 个字符的方法:
Name (STR, "ABCDEFGHIJKL")
// Store 'H' (0x48) into the third character to the string
Store ("H", Index (STR, 2))
Index 运算符返回一个对 8 位 Buffer Field 的引用(类似于使用 CreateByteField 创建的字段)。
注意
兼容性说明: 首次在 ACPI 2.0 中引入。