持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情
一、术语对象编码
在上一篇中介绍了术语对象编码中的“命名空间修改器对象编码”,这里我来什么是“已命名对象编码”,“类型1操作码的编码”以及“类型2操作码编码”,以及怎么编码。
已命名对象编码
下面是已命名对象编码的代码段编码方法:
NamedObj := DefBankField | DefCreateBitField | DefCreateByteField | DefCreateDWordField |
DefCreateField | DefCreateQWordField |DefCreateWordField | DefDataRegion |
DefOpRegion | DefPowerRes | DefProcessor | DefThermalZone
DefBankField := BankFieldOp PkgLength NameString NameString BankValue FieldFlags FieldList
BankFieldOp := ExtOpPrefix 0x87
BankValue := TermArg => Integer
FieldFlags := ByteData
FieldList := Nothing | <FieldElement FieldList>
NamedField := NameSeg PkgLength
ReservedField := 0x00 PkgLength
AccessField := 0x01 AccessType AccessAttrib
AccessType := ByteData
AccessAttrib := ByteData
ConnectField := <0x02 NameString> | <0x02 BufferData>
DefCreateBitField := CreateBitFieldOp SourceBuff BitIndex NameString
CreateBitFieldOp := 0x8D
SourceBuff := TermArg => Buffer
BitIndex := TermArg => Integer
DefCreateByteField := CreateByteFieldOp SourceBuff ByteIndex NameString
CreateByteFieldOp := 0x8C
ByteIndex := TermArg => Integer
DefCreateDWordField := CreateDWordFieldOp SourceBuff ByteIndex NameString
CreateDWordFieldOp := 0x8A
DefCreateField := CreateFieldOp SourceBuff BitIndex NumBits NameString
CreateFieldOp := ExtOpPrefix 0x13
NumBits := TermArg => Integer
DefCreateQWordField := CreateQWordFieldOp SourceBuff ByteIndex NameString
CreateQWordFieldOp := 0x8F
DefCreateWordField := CreateWordFieldOp SourceBuff ByteIndex NameString
CreateWordFieldOp := 0x8B
DefDataRegion := DataRegionOp NameString TermArg TermArg TermArg
DataRegionOp := ExOpPrefix 0x88
DefDevice := DeviceOp PkgLength NameString ObjectList
DeviceOp := ExtOpPrefix 0x82
DefEvent := EventOp NameString
EventOp := ExtOpPrefix 0x02
DefField := FieldOp PkgLength NameString FieldFlags FieldList
FieldOp := ExtOpPrefix 0x81
DefIndexField := IndexFieldOp PkgLength NameString NameString FieldFlags FieldList
IndexFieldOp := ExtOpPrefix 0x86
DefMethod := MethodOp PkgLength NameString MethodFlags TermList
MethodOp := 0x14
MethodFlags := ByteData
RegionOffset := TermArg => Integer
RegionLen := TermArg => Integer
DefPowerRes := PowerResOp PkgLength NameString SystemLevel ResourceOrder ObjectList
PowerResOp := ExtOpPrefix 0x84
SystemLevel := ByteData
ResourceOrder := WordData
DefProcessor := ProcessorOp PkgLength NameString ProcID PblkAddr PblkLen ObjectList
ProcessorOp := ExtOpPrefix 0x83
ProcID := ByteData
PblkAddr := DWordData
PblkLen := ByteData
DefThermalZone := ThermalZoneOp PkgLength NameString ObjectList
ThermalZoneOp := ExtOpPrefix 0x85
ExtendedAccessField := 0x03 AccessType ExtendedAccessAttrib AccessLength
ExtendedAccessAttrib := ByteData
FieldElement := NamedField | ReservedField | AccessField | ExtendedAccessField |
ConnectField
RegionSpace := ByteData
类型1操作码的编码
下面是类型1操作码的编码相关示例代码段:
Type1Opcode := DefBreak | DefBreakPoint | DefContinue | DefFatal | DefIfElse |
DefLoad | DefNoop | DefNotify | DefRelease | DefReset | DefReturn |
DefSignal | DefSleep | DefStall | DefUnload | DefWhile
DefBreak := BreakOp
BreakOp := 0xA5
DefBreakPoint := BreakPointOp
BreakPointOp := 0xCC
DefContinue := ContinueOp
ContinueOp := 0x9F
DefElse := Nothing | <ElseOp PkgLength TermList>
ElseOp := 0xA1
DefFatal := FatalOp FatalType FatalCode FatalArg
FatalOp := ExtOpPrefix 0x32
FatalType := ByteData
FatalCode := DWordData
FatalArg := TermArg => Integer
DefIfElse := IfOp PkgLength Predicate TermList DefElse
IfOp := 0xA0
Predicate := TermArg => Integer
DefLoad := LoadOp NameString DDBHandleObject
LoadOp := ExtOpPrefix 0x20
DDBHandleObject := SuperName
DefNoop := NoopOp
NoopOp := 0xA3
DefNotify := NotifyOp NotifyObject NotifyValue
NotifyOp := 0x86
NotifyObject := SuperName => ThermalZone | Processor | Device
NotifyValue := TermArg => Integer
DefRelease := ReleaseOp MutexObject
ReleaseOp := ExtOpPrefix 0x27
MutexObject := SuperName
DefReset := ResetOp EventObject
ResetOp := ExtOpPrefix 0x26
EventObject := SuperName
DefReturn := ReturnOp ArgObject
ReturnOp := 0xA4
ArgObject := TermArg => DataRefObject
DefSignal := SignalOp EventObject
SignalOp := ExtOpPrefix 0x24
DefSleep := SleepOp MsecTime
SleepOp := ExtOpPrefix 0x22
MsecTime := TermArg => Integer
DefStall := StallOp UsecTime
StallOp := ExtOpPrefix 0x21
UsecTime := TermArg => ByteData
DefUnload := UnloadOp DDBHandleObject
UnloadOp := ExtOpPrefix 0x2A
DefWhile := WhileOp PkgLength Predicate TermList
WhileOp := 0xA2
二、完结
本章未完结,待续(类型2操作码以及杂项对象编码)。