EuroAssembler Index Manual Download Source Macros


Sitemap Links Forum Tests Projects

dict.htm
Class
DICT
Encodings
DictEnc
Macros
Dict
Dictionaries
DictAlignValue
DictAttributes
DictBoolean
DictCodePages
DictCondCodes
DictDatatypes
DictDrectve
DictDisplayObj
DictEaoptCpu
DictEaoptFea
DictEaoptMisc
DictEaoptSimd
DictEaoptStatus
DictEasmSysVar
DictEuroasmOrd
DictDynLinkKeys
DictForKeys
DictFpConstants
DictIniSect
DictModifiers
DictOperators
DictPgmopt
DictPrefixes
DictProgramFormats
DictProgramModels
DictProgramSubsystems
DictPseudo
DictRegisters
DictSegmentCombine
DictSegmentKeys
DictSegmentPurpose
Procedures
DictLookup
DictLookupObj
DictLookupIi
DictSearchByData

This module maintains dictionaries of fixed names (tokens) which make the EuroAssembler language. Tokens are defined statically in [.data] segment and organized in tables as DICT structured entries. The end of each table is marked with an empty entry (DICT.Size=0).


dict PROGRAM FORMAT=COFF,MODEL=FLAT,WIDTH=32
 INCLUDEHEAD "euroasm.htm" ; Interface (structures, symbols and macros) of other modules.
 %FileList %SET
category %FOR %IiCategoryList
      %FileList %SET %FileList,"ii%category.htm"
 %ENDFOR category
 INCLUDEHEAD %FileList
 dict HEAD ; Modul interface.
↑ DICT
Structure which describes members of dictionary tables.
DICT STRUC
.Ptr  D D ; Pointer to the text value of token.
.Size D D ; Size of token.
.Data D D ; Miscelaneous properties of the token (data payload).
  ENDSTRUC DICT
↑ DictEnc
Dictionary flags used in ExpEval and ExpParseOperator.
; Attributes list ordinal number 0..7
dictAttrNONE    = 0
dictAttrSIZE    = 1
dictAttrTYPE    = 2
dictAttrREGTYPE = 3
dictAttrSCOPE   = 4
dictAttrOFFSET  = 5
dictAttrSECTION = 6
dictAttrSEGMENT = 7
dictAttrGROUP   = 8
dictAttrPARA    = 9
dictBinary      = 00000000h ; Binary operation.
dictUnary       = 00000100h ; Unary operation.
dictStrCmp      = 00000800h ; String compare operation.
dictKeyLIB      = 1
dictKeyFWD      = 2
↑ Dict Family, Token, Data=, DataName=
Macro Dict is used to define one DICT object in dictionary tables.
The dictionary tokens are stored literally in [const] section as Dict_token.
DICT objects (dictionary table rows) are stored in [dict] section without name.
Input
Family is enumerated identifier simplifying member definitions of some dictionary families: End, Register, Prefix, Pseudo, Display, Intel,..
Token is an dictionary item defined as a token in quotes, e.g. "EAX", "%%IF" etc.
Data= is 32bit value identifying the dictionary item. Its interpretation is family-dependent.
DataName= is used when Token does not create an usable identifier, e.g. "!==" and it is used in families which need its members identified with a label. %DataName will be a part of the label.
Dict %MACRO Family, Token,  Data=0, DataName=
[.data]
End %IF "%Family"==="End" ; End-of-dictionary table marker.
       DD 0,0,"End"
       %EXITMACRO Dict
    %ENDIF End

Intel %IF "%Family[1..5]" === "Intel" ; Data is Ii*Handler, e.g. IigMOV:: or IifFILD
[.text]
 Dict%Family%Token DB "%Token"
[.data]
   %Group %SET %Family[6] ; Instruction category  'g','f','m','p','v' etc
   DD Dict%Family%Token, SIZE#Dict%Family%Token, Ii%Group%Token::
  %EXITMACRO Dict
 %ENDIF Intel
 
Pseudo %IF "%Family" === "Pseudo" ; Data is pseudoinstruction handler, e.g. PseudoENDSTRUC:: or PseudopcIF::.
 %Name %SET %Token[2..%& - 1] ; Get rid of quotes.
 %IF "%Name[1]" === "%%"
  %Name %SET pc%Name[2..]     ; Replace leading percent sign with 'pc'.
 %ENDIF                
 %IF "%Name" === "="
  %dictName %SET eq
 %ELSE
  %dictName %SET %Name
 %ENDIF
 %IF "%DataName" !=== ""
  %stmName %SET %DataName
 %ELSE
  %stmName %SET %Name
 %ENDIF
[.text] ; [const]
 Dict%Family%dictName DB %Token
[.data] ; [dict]
Dict_%Family%dictName:: DD Dict%Family%dictName, SIZE#Dict%Family%dictName, Pseudo%stmName::
  %EXITMACRO Dict
 %ENDIF Pseudo

Drectve %IF "%Family" === "Drectve" ; Data is PfDrectveDestroy handler, e.g. PfDrectveDestroy.EXPORT::.
 %dictName %SET %Token[2..%& - 1] ; Get rid of quotes.
[.text] ; [const]
 Dict%Family%dictName DB %Token
[.data] ; [dict]
Dict_%Family%dictName:: DD Dict%Family%dictName, SIZE#Dict%Family%dictName, PfDrectveDestroy.%dictName::
  %EXITMACRO Dict
 %ENDIF Drectve

Display %IF "%Family" === "Display" ; .Data is local name in PseudopcDISPLAY handler, e.g. PseudopcDISPLAY.SYMBOLS
 %Name %SET %Token[2..%& - 1] ; Get rid of quotes.
[.text] ; [const]
 Dict%Family%Name DB %Token
[.data] ; [dict]
Dict_%Family%Name:: DD Dict%Family%Name, SIZE#Dict%Family%Name, PseudopcDISPLAY.%Name::
  %EXITMACRO Dict
 %ENDIF Display
 
Operator %IF "%Family"=="Operator"
 %OperOrd %SETA 0
 %REPEAT
   %OperOrd %SETA %OperOrd + 1
 %UNTIL "%ExpOperationList{%OperOrd}" == "%DataName" || %OperOrd > %ExpOperationListLength+0
 %IF %OperOrd > %ExpOperationListLength+0
   %ERROR Id=5821,"Error in ExpOperationList in macro DICT. OperOrd=%OperOrd, ListLength=%ExpOperationListLength"
 %ENDIF
[.text] ; [const]
 Dict%Family%DataName DB %Token
[.data] ; [dict]
 %IF "%DataName"==="Scaling"
   DictOperationScaling:: ; Label used in ExpEval.Multiplication
 %ENDIF
 %IF "%DataName"==="Addition"
   DictOperationAddition:: ; Label used in ExpEval.EndPhaseOne
 %ENDIF
 DD Dict%Family%DataName, SIZE#Dict%Family%DataName, %Data + %OperOrd << 16 ; >>
  %EXITMACRO Dict
 %ENDIF Operator

Option %IF "%Family" === "Option" ; Data is ordinal number in option list.
[.text] ; [const]
 Dict%Family%Token:: DB "%Token"
[.data] ; [dict]
  DD Dict%Family%Token, SIZE#Dict%Family%Token, %Data
  %EXITMACRO Dict
 %ENDIF Option
 
; Other families (default).
 %Name1 %SET %Token[2..%& - 1] ; Get rid of quotes.
 %Name %SETA
 %i %SETA 1
 %WHILE "%Name1[%i]" != ""
   %IF "%Name1[%i]" != "-"
     %Name %SET %Name[]%Name1[%i] ; Get rid of '-' used in token.
   %ENDIF  
   %i %SETA %i+1
 %ENDWHILE  
[.text] ; [const]
 Dict%Family%Name DB %Token
[.data] ; [dict]
Dict_%Family%Name:: DD Dict%Family%Name, SIZE#Dict%Family%Name, %Data
   %ENDMACRO Dict
  ENDHEAD dict ; End of modul interface.
↑ DictAttributes
Dictionary of symbol and file attributes.
Data is the attribute handler in ExpEval procedure.
DictAttributes::  
 Dict Attribute, "SIZE",    Data=ExpEval.Size::
 Dict Attribute, "TYPE",    Data=ExpEval.Type::
 Dict Attribute, "REGTYPE", Data=ExpEval.RegType::
 Dict Attribute, "SCOPE",   Data=ExpEval.Scope::
 Dict Attribute, "OFFSET",  Data=ExpEval.Offset::
 Dict Attribute, "SECTION", Data=ExpEval.Section::
 Dict Attribute, "SEGMENT", Data=ExpEval.Segment::
 Dict Attribute, "GROUP",   Data=ExpEval.Group::
 Dict Attribute, "PARA",    Data=ExpEval.Para::
 Dict Attribute, "FILETIME",Data=ExpEval.FileTime::
 Dict Attribute, "FILESIZE",Data=ExpEval.FileSize::
 Dict End
↑ DictBoolean
Dictionary of enumerated boolean values available in built-in €ASM options.
DictBoolean:: 
 Dict Boolean, "YES",     Data=-1
 Dict Boolean, "NO",      Data=0
 Dict Boolean, "ON",      Data=-1
 Dict Boolean, "OFF",     Data=0
 Dict Boolean, "TRUE",    Data=-1
 Dict Boolean, "FALSE",   Data=0
 Dict Boolean, "ENABLE",  Data=-1
 Dict Boolean, "DISABLE", Data=0
 Dict Boolean, "ENABLED", Data=-1
 Dict Boolean, "DISABLED",Data=0
 Dict End
DictCodePages ↑
Dictionary of code page names available in option EUROASM CODEPAGE=.
Data is codepage numeric identifier assigned by [CodePageMS].
DictCodePages::
 Dict CodePage,"ANSI"                ,Data=    0 ; Default system ANSI codepage.
 Dict CodePage,"OEM"                 ,Data=    1 ; Default system OEM codepage.
 Dict CodePage,"MAC"                 ,Data=    2 ; Default Macintosh codepage.
 Dict CodePage,"IBM437"              ,Data=  437 ; OEM US.
 Dict CodePage,"CP437"               ,Data=  437 ; OEM US.
 Dict CodePage,"IBM737"              ,Data=  737 ; OEM Greek.
 Dict CodePage,"CP737"               ,Data=  737 ; OEM Greek.
 Dict CodePage,"IBM775"              ,Data=  775 ; OEM Baltic.
 Dict CodePage,"CP500"               ,Data=  775 ; OEM Baltic.
 Dict CodePage,"IBM850"              ,Data=  850 ; OEM WesternEuropean.
 Dict CodePage,"CP850"               ,Data=  850 ; OEM WesternEuropean.
 Dict CodePage,"IBM852"              ,Data=  852 ; OEM Latin 2; Central European.
 Dict CodePage,"CP852"               ,Data=  852 ; OEM Latin 2; Central European.
 Dict CodePage,"IBM857"              ,Data=  857 ; OEM Turkish.
 Dict CodePage,"CP857"               ,Data=  857 ; OEM Turkish.
 Dict CodePage,"IBM00858"            ,Data=  858 ; OEM Latin 1 + Euro symbol.
 Dict CodePage,"IBM860"              ,Data=  860 ; OEM Portugese.
 Dict CodePage,"IBM861"              ,Data=  861 ; OEM Icelandic.
 Dict CodePage,"IBM862"              ,Data=  862 ; OEM Hebrew. 
 Dict CodePage,"IBM865"              ,Data=  865 ; OEM Nordic. 
 Dict CodePage,"IBM866"              ,Data=  866 ; OEM Cyrillic. 
 Dict CodePage,"IBM869"              ,Data=  869 ; OEM Greek Modern.
 Dict CodePage,"IBM870"              ,Data=  870 ; OEM Turkish.
 Dict CodePage,"CP870"               ,Data=  870 ; OEM Turkish.
 Dict CodePage,"UNICODE"             ,Data= 1200 ; Unicode UTF-16LE used as WIDE in MS Windows.
 Dict CodePage,"UTF-16LE"            ,Data= 1200 ; Unicode UTF-16 Little Endian.
 Dict CodePage,"UTF-16BE"            ,Data= 1201 ; Unicode UTF-16 Big Endian.
 Dict CodePage,"WINDOWS-1250"        ,Data= 1250 ; ANSI Latin 2; Central European.
 Dict CodePage,"WINDOWS-1251"        ,Data= 1251 ; ANSI Cyrillic.             
 Dict CodePage,"WINDOWS-1252"        ,Data= 1252 ; ANSI Latin 1; Western European.
 Dict CodePage,"WINDOWS-1253"        ,Data= 1253 ; ANSI Greek.
 Dict CodePage,"WINDOWS-1254"        ,Data= 1254 ; ANSI Turkish.
 Dict CodePage,"WINDOWS-1255"        ,Data= 1255 ; ANSI Hebrew.
 Dict CodePage,"WINDOWS-1256"        ,Data= 1256 ; ANSI Arabic.
 Dict CodePage,"WINDOWS-1257"        ,Data= 1257 ; ANSI Baltic.
 Dict CodePage,"WINDOWS-1258"        ,Data= 1258 ; ANSI Vietnamese.
 Dict CodePage,"MACINTOSH"           ,Data=10000 ; MAC Western European.
 Dict CodePage,"X-MAC-CE"            ,Data=10029 ; MAC Central European.
 Dict CodePage,"X-IA5"               ,Data=20105 ; IA5 Western European.
 Dict CodePage,"US-ASCII"            ,Data=20127 ; ASCII US.
 Dict CodePage,"KOI8-R"              ,Data=20866 ; Cyrillic Russian.
 Dict CodePage,"KOI8-U"              ,Data=21866 ; Cyrillic Ukrainian.
 Dict CodePage,"ISO-8859-1"          ,Data=28591 ; ISO Latin 1; Western European.    
 Dict CodePage,"ISO-8859-2"          ,Data=28592 ; ISO Latin 2; Central European.
 Dict CodePage,"ISO-8859-3"          ,Data=28593 ; ISO Latin 3.
 Dict CodePage,"ISO-8859-4"          ,Data=28594 ; ISO Latin 4; Baltic.
 Dict CodePage,"ISO-8859-5"          ,Data=28595 ; ISO Cyrillic.
 Dict CodePage,"ISO-8859-6"          ,Data=28596 ; ISO Arabic.
 Dict CodePage,"ISO-8859-7"          ,Data=28597 ; ISO Greek.
 Dict CodePage,"ISO-8859-8"          ,Data=28598 ; ISO Hebrew Visual.
 Dict CodePage,"ISO-8859-8-I"        ,Data=38598 ; ISO Hebrew Logical.
 Dict CodePage,"ISO-8859-9"          ,Data=28599 ; ISO Turkish.
 Dict CodePage,"ISO-8859-13"         ,Data=28603 ; ISO Estonian.
 Dict CodePage,"ISO-8859-15"         ,Data=28605 ; ISO Latin 9.
 Dict CodePage,"UTF-7"               ,Data=65000 ; Unicode UTF-7.
 Dict CodePage,"UTF-8"               ,Data=65001 ; Unicode UTF-8.
 Dict End
DictCondCodes ↑
Dictionary of general condition codes.
Data is inverted condition mnemonic combined with condition ordinal number.
DictCondCodes:: 
 Dict CondCode,"A",  Data="NA" +0111b<<24                                             ; >>
 Dict CondCode,"AE", Data="NAE"+0011b<<24                                             ; >>
 Dict CondCode,"B",  Data="NB" +0010b<<24                                             ; >>
 Dict CondCode,"BE", Data="NBE"+0110b<<24                                             ; >>
 Dict CondCode,"C",  Data="NC" +0010b<<24                                             ; >>
 Dict CondCode,"E",  Data="NE" +0100b<<24                                             ; >>
 Dict CondCode,"G",  Data="NG" +1111b<<24                                             ; >>
 Dict CondCode,"GE", Data="NGE"+1101b<<24                                             ; >> 
 Dict CondCode,"L",  Data="NL" +1100b<<24                                             ; >>
 Dict CondCode,"LE", Data="NLE"+1110b<<24                                             ; >> 
 Dict CondCode,"NA", Data="A"  +0110b<<24                                             ; >>
 Dict CondCode,"NAE",Data="AE" +0010b<<24                                             ; >>
 Dict CondCode,"NB", Data="B"  +0011b<<24                                             ; >>
 Dict CondCode,"NBE",Data="BE" +0111b<<24                                             ; >>
 Dict CondCode,"NC", Data="C"  +0011b<<24                                             ; >>
 Dict CondCode,"NE", Data="E"  +0101b<<24                                             ; >>
 Dict CondCode,"NG", Data="G"  +1110b<<24                                             ; >>
 Dict CondCode,"NGE",Data="GE" +1100b<<24                                             ; >>
 Dict CondCode,"NLE",Data="LE" +1111b<<24                                             ; >>
 Dict CondCode,"NL", Data="L"  +1101b<<24                                             ; >>
 Dict CondCode,"NO", Data="O"  +0001b<<24                                             ; >>
 Dict CondCode,"NP", Data="P"  +1011b<<24                                             ; >>
 Dict CondCode,"NS", Data="S"  +1001b<<24                                             ; >>
 Dict CondCode,"NZ", Data="Z"  +0101b<<24                                             ; >>
 Dict CondCode,"O",  Data="NO" +0000b<<24                                             ; >>
 Dict CondCode,"P",  Data="NP" +1010b<<24                                             ; >>
 Dict CondCode,"PE", Data="PO" +1010b<<24                                             ; >> 
 Dict CondCode,"PO", Data="PE" +1011b<<24                                             ; >> 
 Dict CondCode,"S",  Data="NS" +1000b<<24                                             ; >> 
 Dict CondCode,"Z",  Data="NZ" +0100b<<24                                             ; >>
 Dict End
↑ DictDatatypes
Dictionary of enumerated data types supported by €ASM.
Data is uppercase shortcut letter - possible suffix of pseudoinstruction D.
DictDatatypes::
 Dict Datatype, "BYTE",   Data='B'
 Dict Datatype, "UNICHAR",Data='U'
 Dict Datatype, "WORD",   Data='W'
 Dict Datatype, "DWORD",  Data='D'
 Dict Datatype, "QWORD",  Data='Q'
 Dict Datatype, "TBYTE",  Data='T'
 Dict Datatype, "OWORD",  Data='O'
 Dict Datatype, "YWORD",  Data='Y'
 Dict Datatype, "ZWORD",  Data='Z'
 Dict Datatype, "INSTR",  Data='I'
DictDatatypesShort::
 Dict Datatype, "B", Data='B'
 Dict Datatype, "U", Data='U'
 Dict Datatype, "W", Data='W'
 Dict Datatype, "D", Data='D'
 Dict Datatype, "Q", Data='Q'
 Dict Datatype, "T", Data='T'
 Dict Datatype, "O", Data='O'
 Dict Datatype, "Y", Data='Y'
 Dict Datatype, "Z", Data='Z'
 Dict Datatype, "I", Data='I'
 Dict End
↑ DictDrectve
Dictionary of MS linker options supported by €ASM.
Data is pointer to a handler in PfDrectveDestroy procedure.
DictDrectve::
 Dict Drectve, "IMPORT"
 Dict Drectve, "EXPORT"
 Dict Drectve, "ENTRY"
 Dict End
↑ DictDisplayObj
Dictionary of supported ordinal and keyword options of pseudoinstruction %DISPLAY.
Data=PseudopcDISPLAY.handler.
DictDisplayObj::
 Dict Display,"AUTOMATICVARIABLES"
 Dict Display,"FORMALVARIABLES"
 Dict Display,"USERVARIABLES"
 Dict Display,"SYSTEMVARIABLES"
 Dict Display,"VARIABLES"
 Dict Display,"MACROS"
 Dict Display,"RELOCATIONS"
 Dict Display,"FIXEDSYMBOLS"
 Dict Display,"UNFIXEDSYMBOLS"
 Dict Display,"REFERENCEDSYMBOLS"
 Dict Display,"UNREFERENCEDSYMBOLS"
 Dict Display,"SYMBOLS"
 Dict Display,"LITERALSYMBOLS"
 Dict Display,"GROUPS"
 Dict Display,"STRUCTURES"
 Dict Display,"SEGMENTS"
 Dict Display,"SECTIONS"
 Dict Display,"CONTEXT"
 Dict Display,"CHUNKS"
 Dict Display,"FILES"
 Dict Display,"ALL"
 Dict End
↑ DictEaoptCpu
EUROASM CPU= generation options.
Data is flag(s) under iiCPU_CpuMask which will be set to EAOPT.Machine.
DictEaoptCpu::
 Dict Cpu,"X64",    Data=iiCPU_186|iiCPU_286|iiCPU_386|iiCPU_486|iiCPU_586|iiCPU_686|iiCPU_X64
 Dict Cpu,"P6",     Data=iiCPU_186|iiCPU_286|iiCPU_386|iiCPU_486|iiCPU_586|iiCPU_686
 Dict Cpu,"686",    Data=iiCPU_186|iiCPU_286|iiCPU_386|iiCPU_486|iiCPU_586|iiCPU_686
 Dict Cpu,"PENTIUM",Data=iiCPU_186|iiCPU_286|iiCPU_386|iiCPU_486|iiCPU_586
 Dict Cpu,"586",    Data=iiCPU_186|iiCPU_286|iiCPU_386|iiCPU_486|iiCPU_586
 Dict Cpu,"486",    Data=iiCPU_186|iiCPU_286|iiCPU_386|iiCPU_486
 Dict Cpu,"386",    Data=iiCPU_186|iiCPU_286|iiCPU_386
 Dict Cpu,"286",    Data=iiCPU_186|iiCPU_286
 Dict Cpu,"186",    Data=iiCPU_186
 Dict Cpu,"086",    Data=iiCPU_086
 Dict Cpu,"8086",   Data=iiCPU_086
 Dict End
↑ DictEaoptSimd
EUROASM SIMD= generation options.
Data is flag(s) under iiCPU_SimdMask which will be set to EAOPT.Machine.
DictEaoptSimd::
 Dict Simd,"AVX512",Data=iiCPU_SSE1|iiCPU_SSE2|iiCPU_SSE3|iiCPU_SSSE3|iiCPU_SSE4|iiCPU_SSE4.1|iiCPU_SSE4.2|iiCPU_AVX|iiCPU_AVX2|iiCPU_AVX512
 Dict Simd,"AVX2"  ,Data=iiCPU_SSE1|iiCPU_SSE2|iiCPU_SSE3|iiCPU_SSSE3|iiCPU_SSE4|iiCPU_SSE4.1|iiCPU_SSE4.2|iiCPU_AVX|iiCPU_AVX2
 Dict Simd,"AVX"   ,Data=iiCPU_SSE1|iiCPU_SSE2|iiCPU_SSE3|iiCPU_SSSE3|iiCPU_SSE4|iiCPU_SSE4.1|iiCPU_SSE4.2|iiCPU_AVX
 Dict Simd,"SSE4.2",Data=iiCPU_SSE1|iiCPU_SSE2|iiCPU_SSE3|iiCPU_SSSE3|iiCPU_SSE4|iiCPU_SSE4.1|iiCPU_SSE4.2
 Dict Simd,"SSE4.1",Data=iiCPU_SSE1|iiCPU_SSE2|iiCPU_SSE3|iiCPU_SSSE3|iiCPU_SSE4|iiCPU_SSE4.1
 Dict Simd,"SSE4"  ,Data=iiCPU_SSE1|iiCPU_SSE2|iiCPU_SSE3|iiCPU_SSSE3|iiCPU_SSE4
 Dict Simd,"SSSE3" ,Data=iiCPU_SSE1|iiCPU_SSE2|iiCPU_SSE3|iiCPU_SSSE3
 Dict Simd,"SSE3"  ,Data=iiCPU_SSE1|iiCPU_SSE2|iiCPU_SSE3
 Dict Simd,"SSE2"  ,Data=iiCPU_SSE1|iiCPU_SSE2
 Dict Simd,"SSE1"  ,Data=iiCPU_SSE1
 Dict Simd,"SSE"   ,Data=iiCPU_SSE1
 Dict End
↑ DictEaoptFea
EUROASM feature= boolean options.
Dictionary of EAOPT options enumerated in %EaoptFeaList: TSX,AES,LWP,XOP,MVEX,FPU,MMX,PRIV....
DictEaoptFea::
     %ordinal %SETA 0
 fea %FOR %EaoptFeaList
      %ordinal %SETA %ordinal + 1
      Dict Eaopt,"%fea",Data=%ordinal<<16 + varTypeSysEaopt + varTypeSysEaoptF                                      ; >>
     %ENDFOR fea
 Dict End
↑ DictEaoptMisc
EUROASM miscellanous non-boolean options.
Dictionary of EAOPT options enumerated in %EaoptMiscList: CPU,SIMD,WARN,NOWARN,CODEPAGE,DUMPWIDTH,MAXINCLUSIONS,INCLUDEPATH,LISTFILE.
DictEaoptMisc::
     %ordinal %SETA 0
 opt %FOR %EaoptMiscList
      %ordinal %SETA %ordinal + 1
      Dict Eaopt,"%opt",Data=%ordinal<<16 + varTypeSysEaopt + varTypeSysEaoptM                                     ; >>
     %ENDFOR opt
 Dict End
↑ DictEaoptStatus
EUROASM boolean options.
Dictionary of EAOPT options enumerated in %EaoptStatusList: AUTOALIGN,AUTOSEGMENT,DUMP,DUMPALL,LIST....
DictEaoptStatus::
        %ordinal %SETA 0
 status %FOR %EaoptStatusList
         %ordinal %SETA %ordinal + 1
         Dict Eaopt,"%status",Data=%ordinal<<16 + varTypeSysEaopt + varTypeSysEaoptS                             ; >>
        %ENDFOR status
 Dict End
↑ DictEasmSysVar
Dictionary of system readonly %^variable names enumerated in %EaoptEasmList: DATE, EUROASMOS, PROC, SOURCELINE, PROGRAM....
DictEasmSysVar:: ; Dictionary of €ASM system %^variables.
       %ordinal %SETA 0
   opt %FOR %EaoptEasmList
        %ordinal %SETA %ordinal + 1
        Dict Easmopt, "%opt", Data=%ordinal<<16 + varTypeSysEasm                                                    ;>>
       %ENDFOR opt
 Dict End
DictEuroasmOrd ↑
Dictionary of enumerated EUROASM ordinal operands.
Data is a pointer to the ordinal subhandler in PseudoEUROASM procedure.
DictEuroasmOrd:: 
 Dict PseudoOrd, "PUSH", Data=PseudoEUROASM.PUSH::
 Dict PseudoOrd, "POP",  Data=PseudoEUROASM.POP::
 Dict End
DictForKeys ↑
Dictionary of %FOR keyword options.
DictForKeys::
 Dict Key,"STEP"
 Dict End
↑ DictFpConstants
Dictionary of special floating-point values.
Data bytes 3,2,1,0 specify tenbyte bytes 9,8,7,0.
DictFpConstants:: 
 Dict FpConstant, "ZERO",Data=00000000h
 Dict FpConstant, "PINF",Data=7FFF0000h
 Dict FpConstant, "INF", Data=7FFF8000h
 Dict FpConstant, "PNAN",Data=7FFF8001h
 Dict FpConstant, "SNAN",Data=7FFF8001h
 Dict FpConstant, "NAN", Data=7FFFC000h
 Dict FpConstant, "QNAN",Data=7FFFC000h
 Dict End
↑ DictIniSect
Dictionary of section names in configuration file euroasm.ini.
Data is a flag in EA.Status.
DictIniSect::  
 Dict IniSect,"EUROASM", Data=eaIniSectEUROASM
 Dict IniSect,"PROGRAM", Data=eaIniSectPROGRAM
 Dict End
↑ DictDynLinkKeys
Dictionary of PseudoScope keyword options.
DictDynLinkKeys::
 Dict Key,"LIB", Data=dictKeyLIB
 Dict Key,"FWD", Data=dictKeyFWD
 Dict End
↑ DictAlignValue
Dictionary of enumerated names of alignment.
Data is alignment value (power of two).
DictAlignValue::
 Dict Alignment, "I", Data=1
 Dict Alignment, "B", Data=1
 Dict Alignment, "U", Data=2
 Dict Alignment, "W", Data=2
 Dict Alignment, "D", Data=4
 Dict Alignment, "Q", Data=8
 Dict Alignment, "T", Data=8
 Dict Alignment, "O", Data=16
 Dict Alignment, "Y", Data=32
 Dict Alignment, "Z", Data=64
 Dict Alignment, "BYTE", Data=1
 Dict Alignment, "UNICHAR", Data=2
 Dict Alignment, "WORD",  Data=2
 Dict Alignment, "DWORD", Data=4
 Dict Alignment, "QWORD", Data=8
 Dict Alignment, "TBYTE", Data=8
 Dict Alignment, "OWORD", Data=16
 Dict Alignment, "YWORD", Data=32
 Dict Alignment, "ZWORD", Data=64 
 Dict End 
↑ DictModifiers
Dictionary of instruction modifiers and their enumerated values defined in €ASM.
Data is a flag in instruction modifiers encoding.
DictIiMfs:: ;  Special instruction modifier names.
 Dict Modifier, "ALIGN",        Data=iiMfsALIGN_Mask 
 Dict Modifier, "NESTINGCHECK", Data=iiMfgNESTING_OFF
 Dict End
DictIiMfg:: ; General instruction modifier names.
 Dict Modifier, "CODE", Data=iiMfgCODE_Mask
 Dict Modifier, "DATA", Data=iiMfgDATA_Mask
 Dict Modifier, "DISP", Data=iiMfgDISP_Mask
 Dict Modifier, "IMM",  Data=iiMfgIMM_Mask
 Dict Modifier, "DIST", Data=iiMfgDIST_Mask
 Dict Modifier, "ADDR", Data=iiMfgADDR_Mask
 Dict Modifier, "SCALE",Data=iiMfgSCALE_Mask
 Dict End
; General instruction modifier enumerated values.
DictIiMfCode::
 Dict IiMfCode, "S",    Data=iiMfgCODE_SHORT
 Dict IiMfCode, "SHORT",Data=iiMfgCODE_SHORT
 Dict IiMfCode, "L",    Data=iiMfgCODE_LONG
 Dict IiMfCode, "LONG", Data=iiMfgCODE_LONG
 Dict End
DictIiMfData::  
 Dict IiMfData, "B",    Data=iiMfgDATA_BYTE 
 Dict IiMfData, "BYTE", Data=iiMfgDATA_BYTE
 Dict IiMfData, "W",    Data=iiMfgDATA_WORD
 Dict IiMfData, "WORD", Data=iiMfgDATA_WORD
 Dict IiMfData, "D",    Data=iiMfgDATA_DWORD
 Dict IiMfData, "DWORD",Data=iiMfgDATA_DWORD
 Dict IiMfData, "Q",    Data=iiMfgDATA_QWORD
 Dict IiMfData, "QWORD",Data=iiMfgDATA_QWORD
 Dict IiMfData, "T",    Data=iiMfgDATA_TBYTE
 Dict IiMfData, "TBYTE",Data=iiMfgDATA_TBYTE
 Dict IiMfData, "O",    Data=iiMfgDATA_OWORD
 Dict IiMfData, "OWORD",Data=iiMfgDATA_OWORD
 Dict IiMfData, "Y",    Data=iiMfgDATA_YWORD
 Dict IiMfData, "YWORD",Data=iiMfgDATA_YWORD
 Dict IiMfData, "Z",    Data=iiMfgDATA_ZWORD
 Dict IiMfData, "ZWORD",Data=iiMfgDATA_ZWORD
 Dict End
DictIiMfDisp::
 Dict IiMfDisp, "B",    Data=iiMfgDISP_BYTE
 Dict IiMfDisp, "BYTE", Data=iiMfgDISP_BYTE
 Dict IiMfDisp, "W",    Data=iiMfgDISP_WORD
 Dict IiMfDisp, "WORD", Data=iiMfgDISP_WORD
 Dict IiMfDisp, "D",    Data=iiMfgDISP_DWORD
 Dict IiMfDisp, "DWORD",Data=iiMfgDISP_DWORD
 Dict IiMfDisp, "Q",    Data=iiMfgDISP_QWORD
 Dict IiMfDisp, "QWORD",Data=iiMfgDISP_QWORD
 Dict End
DictIiMfImm::
 Dict IiMfImm, "B",    Data=iiMfgIMM_BYTE
 Dict IiMfImm, "BYTE", Data=iiMfgIMM_BYTE
 Dict IiMfImm, "W",    Data=iiMfgIMM_WORD
 Dict IiMfImm, "WORD", Data=iiMfgIMM_WORD
 Dict IiMfImm, "D",    Data=iiMfgIMM_DWORD
 Dict IiMfImm, "DWORD",Data=iiMfgIMM_DWORD
 Dict IiMfImm, "Q",    Data=iiMfgIMM_QWORD
 Dict IiMfImm, "QWORD",Data=iiMfgIMM_QWORD
 Dict End
DictIiMfDist::
 Dict IiMfDist, "S",    Data=iiMfgDIST_SHORT
 Dict IiMfDist, "SHORT",Data=iiMfgDIST_SHORT
 Dict IiMfDist, "N",    Data=iiMfgDIST_NEAR
 Dict IiMfDist, "NEAR", Data=iiMfgDIST_NEAR
 Dict IiMfDist, "F",    Data=iiMfgDIST_FAR
 Dict IiMfDist, "FAR",  Data=iiMfgDIST_FAR
 Dict End
DictIiMfAddr::
 Dict IiMfAddr, "A",    Data=iiMfgADDR_ABS
 Dict IiMfAddr, "ABS",  Data=iiMfgADDR_ABS
 Dict IiMfAddr, "R",    Data=iiMfgADDR_REL
 Dict IiMfAddr, "REL",  Data=iiMfgADDR_REL
 Dict End
DictIiMfScale::
 Dict IiMfScale, "S",       Data=iiMfgSCALE_SMART
 Dict IiMfScale, "SMART",   Data=iiMfgSCALE_SMART
 Dict IiMfScale, "V",       Data=iiMfgSCALE_VERBATIM
 Dict IiMfScale, "VERBATIM",Data=iiMfgSCALE_VERBATIM
 Dict End


DictIiMfx:: ; AVX instruction modifier names.
 Dict Modifier, "PREFIX", Data=iiMfxPREFIX_Mask
 Dict Modifier, "MASK",   Data=iiMfxMASK_Mask
 Dict Modifier, "ZEROING",Data=iiMfxZEROING_Mask
 Dict Modifier, "EH",     Data=iiMfxEH_Mask
 Dict Modifier, "SAE",    Data=iiMfxSAE_Mask
 Dict Modifier, "BCST",   Data=iiMfxBCST_Mask
 Dict Modifier, "ROUND",  Data=iiMfxROUND_Mask
 Dict Modifier, "OPER",   Data=iiMfxOPER_Mask
 Dict End

; AVX instruction modifier enumerated values.
DictIiMfPrefix::
 Dict IiMfPrefix,"REX",  Data=iiMfxPREFIX_REX
 Dict IiMfPrefix,"XOP",  Data=iiMfxPREFIX_XOP
 Dict IiMfPrefix,"VEX2", Data=iiMfxPREFIX_VEX2
 Dict IiMfPrefix,"VEX3", Data=iiMfxPREFIX_VEX3
 Dict IiMfPrefix,"VEX",  Data=iiMfxPREFIX_VEX
 Dict IiMfPrefix,"MVEX", Data=iiMfxPREFIX_MVEX
 Dict IiMfPrefix,"EVEX", Data=iiMfxPREFIX_EVEX
 Dict End
DictIiMfMask::
 Dict IiMfMask, "K0",    Data=0   
 Dict IiMfMask, "K1",    Data=1
 Dict IiMfMask, "K2",    Data=2
 Dict IiMfMask, "K3",    Data=3
 Dict IiMfMask, "K4",    Data=4
 Dict IiMfMask, "K5",    Data=5
 Dict IiMfMask, "K6",    Data=6
 Dict IiMfMask, "K7",    Data=7
 Dict End
DictIiMfRound::
 Dict IiMfRound, "N",    Data=iiMfxROUND_NEAR
 Dict IiMfRound, "NEAR", Data=iiMfxROUND_NEAR
 Dict IiMfRound, "D",    Data=iiMfxROUND_DOWN
 Dict IiMfRound, "DOWN", Data=iiMfxROUND_DOWN
 Dict IiMfRound, "U",    Data=iiMfxROUND_UP
 Dict IiMfRound, "UP",   Data=iiMfxROUND_UP
 Dict IiMfRound, "Z",    Data=iiMfxROUND_ZERO
 Dict IiMfRound, "ZERO", Data=iiMfxROUND_ZERO
 Dict End
↑ DictOperators
Dictionary of operators and operations defined in €ASM.
DictOperations.Data layout
00000000 000nnnnn 0000s00a 0000pppp ++++--operation priority (0..15). +-----------dictUnary 1=unary, 0=binary. +--------------dictStrCmp it is a string-compare operation. +++++--------------------ordinal number of operation (1..34) specified in ExpOperationList. For ordinals of attribute operations (0..8) see also DictEnc.
DictUnaryOperators:: ;Data=priority + operator flags
 Dict Operator,"-",        Data=13+dictUnary, DataName=Minus
 Dict Operator,"+",        Data=13+dictUnary, DataName=Plus
 Dict Operator,"~",        Data=08+dictUnary, DataName=BitwiseNot
 Dict Operator,"!",        Data=04+dictUnary, DataName=LogicalNot
 Dict Operator,"SIZE#",    Data=15+dictUnary, DataName=Size
 Dict Operator,"TYPE#",    Data=15+dictUnary, DataName=Type
 Dict Operator,"REGTYPE#", Data=15+dictUnary, DataName=RegType
 Dict Operator,"SCOPE#",   Data=15+dictUnary, DataName=Scope
 Dict Operator,"OFFSET#",  Data=15+dictUnary, DataName=Offset
 Dict Operator,"SECTION#", Data=15+dictUnary, DataName=Section
 Dict Operator,"SEGMENT#", Data=15+dictUnary, DataName=Segment
 Dict Operator,"GROUP#",   Data=15+dictUnary, DataName=Group
 Dict Operator,"PARA#",    Data=15+dictUnary, DataName=Para
 Dict Operator,"FILESIZE#",Data=15+dictUnary, DataName=FileSize
 Dict Operator,"FILETIME#",Data=15+dictUnary, DataName=FileTime
 Dict End
DictBinaryOperators:: ; Ordered from longest to one-char.
;DictOperators4:: 
 Dict Operator,"!===",Data=14+dictStrCmp, DataName=SensNonEqual
DictOperators3::
 Dict Operator, "#<=",Data=05,           DataName=LowerOrEqual                        ; >
 Dict Operator, "#>=",Data=05,           DataName=GreaterOrEqual                      
 Dict Operator, "#<<",Data=12,           DataName=ShiftArithmeticLeft                 ; >>
 Dict Operator, "#>>",Data=12,           DataName=ShiftArithmeticRight
 Dict Operator, "!==",Data=14+dictStrCmp,DataName=InsensNonEqual
 Dict Operator, "===",Data=14+dictStrCmp,DataName=SensEqual
;DictOperators2::
 Dict Operator, "!=" ,Data=05,           DataName=NumericNonEqual
 Dict Operator, "<>" ,Data=05,           DataName=NumericNonEqual2
 Dict Operator, "==" ,Data=14+dictStrCmp,DataName=InsensEqual
 Dict Operator, ">=" ,Data=05,           DataName=AboveOrEqual
 Dict Operator, "<=" ,Data=05,           DataName=BelowOrEqual                        ; >
 Dict Operator, "<<" ,Data=12,           DataName=ShiftLogicalLeft                    ; >>
 Dict Operator, ">>" ,Data=12,           DataName=ShiftLogicalRight
 Dict Operator, "#*" ,Data=11,           DataName=SignedMultiplication
 Dict Operator, "#/" ,Data=11,           DataName=SignedDivision  
 Dict Operator, "#\" ,Data=11,           DataName=SignedModulo
 Dict Operator, "#>" ,Data=05,           DataName=Greater
 Dict Operator, "#<" ,Data=05,           DataName=Lower                               ; >
 Dict Operator, "&&" ,Data=03,           DataName=LogicalAnd
 Dict Operator, "||" ,Data=02,           DataName=LogicalOr
 Dict Operator, "^^" ,Data=02,           DataName=LogicalXor
;DictOperators1::
 Dict Operator, "+"  ,Data=09,           DataName=Addition
;Dict Operator, "+"  ,Data=09,           DataName=Indexing
 Dict Operator, "-"  ,Data=09,           DataName=Subtraction
 Dict Operator, "="  ,Data=05,           DataName=NumericEqual
 Dict Operator, ">"  ,Data=05,           DataName=Above
 Dict Operator, "<"  ,Data=05,           DataName=Below                               ; >
 Dict Operator, "/"  ,Data=11,           DataName=Division
 Dict Operator, "\"  ,Data=11,           DataName=Modulo
 Dict Operator, "*"  ,Data=11,           DataName=Multiplication
 Dict Operator, "*"  ,Data=10,           DataName=Scaling ; Must appear *after* Multiplication here in DictOperators.
 Dict Operator, "&"  ,Data=07,           DataName=BitwiseAnd
 Dict Operator, "|"  ,Data=06,           DataName=BitwiseOr
 Dict Operator, "^"  ,Data=06,           DataName=BitwiseXor
 Dict Operator, ":"  ,Data=01,           DataName=SegmentSeparation
;Dict Operator, "."  ,Data=15,           DataName=Membership
 Dict End
↑ DictPgmopt
Dictionary of PROGRAM options, retrievable as system %^variables enumerated in %PgmoptList: FORMAT,MODEL,ICONFILE,SUBSYSTEM....
DictPgmopt:: ; Dictionary of PROGRAM options and PROGRAM system %^variables.
     %ordinal %SETA 0
 opt %FOR %PgmoptList
      %ordinal %SETA %ordinal + 1
      Dict Pgmopt, "%opt", Data=%ordinal<<16 + varTypeSysPgmopt                                                   ;>>
     %ENDFOR opt
 Dict End
↑ DictPrefixes
Dictionary of instruction prefixes known in €ASM. AVX prefixes XOP,VEX,MVEX,EVEX are not defined here. .Data member is composed of
  1. prefix identificator flag iiPfxMask,
  2. prefix group flag iiPfxGroupAny,
  3. CPU generation implied by using this prefix (iiCPU_CpuMask),
  4. prefix encoding in 8 bits.
DictPrefixes.Data layout
iiiiiiii_iiiiiiii_ggggcf0c_eeeeeeee ++++++++-- e: Encoding of the prefix (operation code): iiPfxCode. +------------- f: CPU features required by using this prefix: iiFeaDictPfxMask. +--+----------- c: CPU generation required by using this prefix: iiCpuDictPfxMask. ++++--------------- g: Group which the prefix belongs to: iiPfxGrpAny. ++++++++-++++++++-------------------- i: Identificator of the prefix: iiPfxMask.
DictPrefixes:: ; External entry points DictPrefix*:: are used in IiFlush.
;             mnemonic |  opcode | group   |identificator|CPU generation
 Dict Prefix,"REP"     ,Data=0xF3|iiPfxGrp1|iiPfxREPE
DictPrefixRepe::
 Dict Prefix,"REPE"    ,Data=0xF3|iiPfxGrp1|iiPfxREPE
 Dict Prefix,"REPZ"    ,Data=0xF3|iiPfxGrp1|iiPfxREPE
DictPrefixRepne::
 Dict Prefix,"REPNE"   ,Data=0xF2|iiPfxGrp1|iiPfxREPNE
 Dict Prefix,"REPNZ"   ,Data=0xF2|iiPfxGrp1|iiPfxREPNE
DictPrefixLock::
 Dict Prefix,"LOCK"    ,Data=0xF0|iiPfxGrp1|iiPfxLOCK
DictPrefixesGrp2::
 Dict Prefix,"SEGES"   ,Data=0x26|iiPfxGrp2|iiPfxSEGES
 Dict Prefix,"SEGCS"   ,Data=0x2E|iiPfxGrp2|iiPfxSEGCS
 Dict Prefix,"SEGSS"   ,Data=0x36|iiPfxGrp2|iiPfxSEGSS
 Dict Prefix,"SEGDS"   ,Data=0x3E|iiPfxGrp2|iiPfxSEGDS
 Dict Prefix,"SEGFS"   ,Data=0x64|iiPfxGrp2|iiPfxSEGFS   |iiCPU_386
 Dict Prefix,"SEGGS"   ,Data=0x65|iiPfxGrp2|iiPfxSEGGS   |iiCPU_386
 Dict Prefix,"OFTEN"   ,Data=0x3E|iiPfxGrp2|iiPfxOFTEN   |iiCPU_686
 Dict Prefix,"SELDOM"  ,Data=0x2E|iiPfxGrp2|iiPfxSELDOM  |iiCPU_686
 Dict Prefix,"XACQUIRE",Data=0xF2|iiPfxGrp1|iiPfxXACQUIRE|iiCPU_686|iiFea_TSX
 Dict Prefix,"XRELEASE",Data=0xF3|iiPfxGrp1|iiPfxXRELEASE|iiCPU_686|iiFea_TSX
DictPrefixesGrp3::
 Dict Prefix,"OTOGGLE" ,Data=0x66|iiPfxGrp3|iiPfxOTOGGLE |iiCPU_386
DictPrefixesGrp4::
 Dict Prefix,"ATOGGLE", Data=0x67|iiPfxGrp4|iiPfxATOGGLE |iiCPU_386
 Dict End
DictProgramFormats ↑
Dictionary of PROGRAM FORMAT= options. For each format declared in PfList the dictionary specifies an item such as
Dict Format, "BIN", Data=pgmoptBIN Dict Format, "COFF", Data=pgmoptCOFF Dict Format, "DLL", Data=pgmoptDLL etc.
See also
PfList
DictProgramFormats::
PF %FOR %PfList
     Dict Format,"%PF", Data=pgmopt%PF
  %ENDFOR PF
 Dict End
DictProgramModels↑
Dictionary of PROGRAM MODEL= options.
DictProgramModels:: 
 Dict Model, "TINY",   Data=pgmoptTINY
 Dict Model, "SMALL",  Data=pgmoptSMALL
 Dict Model, "MEDIUM", Data=pgmoptMEDIUM
 Dict Model, "COMPACT",Data=pgmoptCOMPACT
 Dict Model, "LARGE",  Data=pgmoptLARGE
 Dict Model, "HUGE",   Data=pgmoptHUGE
 Dict Model, "FLAT",   Data=pgmoptFLAT
 Dict End
DictProgramSubsystems↑
Dictionary of PROGRAM SUBSYSTEM= enumerated options.
DictProgramSubsystems:: 
 Dict Subsystem, "NATIVE",  Data= 1 ; Device drivers and native processes.
 Dict Subsystem, "GUI",     Data= 2 ; MS Windows Graphical User Interface.
 Dict Subsystem, "CON",     Data= 3 ; Console character subsystem. Default.
 Dict Subsystem, "OS2",     Data= 5 ; OS/2 subsystem.
 Dict Subsystem, "POSIX",   Data= 7 ; Posix character subsystem.
 Dict Subsystem, "WXD",     Data= 8 ; MS Windows 95 drivers.
 Dict Subsystem, "WCE",     Data= 9 ; MS Windows CE.
 Dict Subsystem, "EFI_APP", Data=10 ; EFI (Extensible Firmware Interface) application.
 Dict Subsystem, "EFI_BOOT",Data=11 ; EFI (Extensible Firmware Interface) boot-service driver.
 Dict Subsystem, "EFI_RT",  Data=12 ; EFI (Extensible Firmware Interface) run-time driver.
 Dict Subsystem, "EFI_ROM", Data=13 ; EFI (Extensible Firmware Interface) ROM image.
 Dict Subsystem, "XBOX",    Data=14 ; XBOX.
 Dict End
↑ DictPseudo
Dictionary of all supported pseudoinstructions.
Data= is a pointer to the corresponding pseudoinstruction handler, for instance PseudoEUROASM.
DictPseudo:: 
 Dict Pseudo,"EUROASM"
 Dict Pseudo,"PROGRAM"
 Dict Pseudo,"ENDPROGRAM"
 Dict Pseudo,"HEAD"
 Dict Pseudo,"ENDHEAD"
 Dict Pseudo,"PROC"
 Dict Pseudo,"ENDPROC"
 Dict Pseudo,"ENDP", DataName=ENDPROC ; Alias.
 Dict Pseudo,"PROC1"
 Dict Pseudo,"ENDPROC1"
 Dict Pseudo,"ENDP1",DataName=ENDPROC1 ; Alias.
 Dict Pseudo,"STRUC"
 Dict Pseudo,"ENDSTRUC"
 Dict Pseudo,"GROUP"
 Dict Pseudo,"SEGMENT"
 Dict Pseudo,"EQU"
 Dict Pseudo,"=", DataName=EQU ; Alias.
 Dict Pseudo,"D"
 Dict Pseudo,"DB"
 Dict Pseudo,"DU"
 Dict Pseudo,"DW"
 Dict Pseudo,"DD"
 Dict Pseudo,"DQ"
 Dict Pseudo,"DT"
 Dict Pseudo,"DO"
 Dict Pseudo,"DY"
 Dict Pseudo,"DZ"
 Dict Pseudo,"DI"
 Dict Pseudo,"DS"
 Dict Pseudo,"ALIGN"
 Dict Pseudo,"GLOBAL"
 Dict Pseudo,"PUBLIC"
 Dict Pseudo,"EXTERN"
 Dict Pseudo,"EXPORT"
 Dict Pseudo,"INCLUDE"
 Dict Pseudo,"INCLUDE1"
 Dict Pseudo,"INCLUDEHEAD"
 Dict Pseudo,"INCLUDEHEAD1"
 Dict Pseudo,"INCLUDEBIN"
 Dict Pseudo,"LINK"
 Dict Pseudo,"IMPORT"
DictPcPseudo:: ; Pseudoinstructions whose name begins with %.
 Dict Pseudo,"%%MACRO"
 Dict Pseudo,"%%EXITMACRO"
 Dict Pseudo,"%%SHIFT"
 Dict Pseudo,"%%ENDMACRO"
 Dict Pseudo,"%%DROPMACRO" 
 Dict Pseudo,"%%IF"
 Dict Pseudo,"%%ELSE" 
 Dict Pseudo,"%%ENDIF"
 Dict Pseudo,"%%FOR"
 Dict Pseudo,"%%EXITFOR"
 Dict Pseudo,"%%ENDFOR"
 Dict Pseudo,"%%WHILE"
 Dict Pseudo,"%%EXITWHILE"
 Dict Pseudo,"%%ENDWHILE"
 Dict Pseudo,"%%REPEAT"
 Dict Pseudo,"%%EXITREPEAT"
 Dict Pseudo,"%%ENDREPEAT"
 Dict Pseudo,"%%UNTIL"
 Dict Pseudo,"%%COMMENT"
 Dict Pseudo,"%%ENDCOMMENT"
 Dict Pseudo,"%%ERROR"
 Dict Pseudo,"%%DISPLAY"
 Dict Pseudo,"%%SETX"
DictPseudoSET:: ; Pseudoinstructions %SET* except for %SETX.
 Dict Pseudo,"%%SET"
 Dict Pseudo,"%%SETA"
 Dict Pseudo,"%%SETB"
 Dict Pseudo,"%%SETC"
 Dict Pseudo,"%%SETE"
 Dict Pseudo,"%%SET2"
 Dict Pseudo,"%%SETS"
 Dict Pseudo,"%%SETL"
 Dict End
↑ DictRegisters
Dictionary of processor registers known in €ASM. Their .Data member is composed of
  1. register size in bytes (field ssssss in bits 24..29),
  2. CPU required generation and features implied by using this register in an instruction ( iiCpuDictRegMask and iiFeaDictRegMask),
  3. register addressing properties (iiRegPpMask),
  4. register identification (iiRegIdMask ) which contains its family and ordinal number.
iiRegOrd+iiRegFam from Register encoding and iiCpuRegReq + iiCpuRegProp from CPU requirements.
DictRegisters.Data layout
00ssssss_fcfcfppp_ppccf0fc_iiiiiiii ++++++++--i: Register identification: iiRegIdMask. +++-++-----------------p: Register properties: iiRegPpMask. +-+-------++---+-----------c: CPU generation required by register: iiCpuDictRegMask. +-+-+--------+-+------------f: CPU features required by register: iiFeaDictRegMask. ++++++-----------------------------s: Size of register in bytes (1..64).
DictRegisters::  ;  ordinal Nr| size | family  |features and properties
 Dict Register,"AL"  , Data=0 |01<<24|iiReg_R08|iiCPU_086                           ; >>
 Dict Register,"CL"  , Data=1 |01<<24|iiReg_R08|iiCPU_086                           ; >>
 Dict Register,"DL"  , Data=2 |01<<24|iiReg_R08|iiCPU_086                           ; >>
 Dict Register,"BL"  , Data=3 |01<<24|iiReg_R08|iiCPU_086                           ; >>
 Dict Register,"AH"  , Data=4 |01<<24|iiReg_R08|iiCPU_086|iiRegNoREX                ; >>
 Dict Register,"CH"  , Data=5 |01<<24|iiReg_R08|iiCPU_086|iiRegNoREX                ; >>
 Dict Register,"DH"  , Data=6 |01<<24|iiReg_R08|iiCPU_086|iiRegNoREX                ; >>
 Dict Register,"BH"  , Data=7 |01<<24|iiReg_R08|iiCPU_086|iiRegNoREX                ; >>
 Dict Register,"R8B" , Data=8 |01<<24|iiReg_R08|iiCPU_X64                           ; >>
 Dict Register,"R8L" , Data=8 |01<<24|iiReg_R08|iiCPU_X64                           ; >>
 Dict Register,"R9B" , Data=9 |01<<24|iiReg_R08|iiCPU_X64                           ; >>
 Dict Register,"R9L" , Data=9 |01<<24|iiReg_R08|iiCPU_X64                           ; >>
 Dict Register,"R10B", Data=10|01<<24|iiReg_R08|iiCPU_X64                           ; >>
 Dict Register,"R10L", Data=10|01<<24|iiReg_R08|iiCPU_X64                           ; >>
 Dict Register,"R11B", Data=11|01<<24|iiReg_R08|iiCPU_X64                           ; >>
 Dict Register,"R11L", Data=11|01<<24|iiReg_R08|iiCPU_X64                           ; >>
 Dict Register,"R12B", Data=12|01<<24|iiReg_R08|iiCPU_X64                           ; >>
 Dict Register,"R12L", Data=12|01<<24|iiReg_R08|iiCPU_X64                           ; >>
 Dict Register,"R13B", Data=13|01<<24|iiReg_R08|iiCPU_X64                           ; >>
 Dict Register,"R13L", Data=13|01<<24|iiReg_R08|iiCPU_X64                           ; >>
 Dict Register,"R14B", Data=14|01<<24|iiReg_R08|iiCPU_X64                           ; >>
 Dict Register,"R14L", Data=14|01<<24|iiReg_R08|iiCPU_X64                           ; >>
 Dict Register,"R15B", Data=15|01<<24|iiReg_R08|iiCPU_X64                           ; >>
 Dict Register,"R15L", Data=15|01<<24|iiReg_R08|iiCPU_X64                           ; >>
 Dict Register,"SPB" , Data=4 |01<<24|iiReg_R08|iiCPU_X64|iiRegREX                  ; >>
 Dict Register,"SPL" , Data=4 |01<<24|iiReg_R08|iiCPU_X64|iiRegREX                  ; >>
 Dict Register,"BPB" , Data=5 |01<<24|iiReg_R08|iiCPU_X64|iiRegREX                  ; >>
 Dict Register,"BPL" , Data=5 |01<<24|iiReg_R08|iiCPU_X64|iiRegREX                  ; >>
 Dict Register,"SIB" , Data=6 |01<<24|iiReg_R08|iiCPU_X64|iiRegREX                  ; >>
 Dict Register,"SIL" , Data=6 |01<<24|iiReg_R08|iiCPU_X64|iiRegREX                  ; >>
 Dict Register,"DIB" , Data=7 |01<<24|iiReg_R08|iiCPU_X64|iiRegREX                  ; >>
 Dict Register,"DIL" , Data=7 |01<<24|iiReg_R08|iiCPU_X64|iiRegREX                  ; >>
 Dict Register,"AX"  , Data=0 |02<<24|iiReg_R16|iiCPU_086                           ; >>
 Dict Register,"CX"  , Data=1 |02<<24|iiReg_R16|iiCPU_086                           ; >>
 Dict Register,"DX"  , Data=2 |02<<24|iiReg_R16|iiCPU_086                           ; >>
 Dict Register,"BX"  , Data=3 |02<<24|iiReg_R16|iiCPU_086|iiRegBase                 ; >>
 Dict Register,"SP"  , Data=4 |02<<24|iiReg_R16|iiCPU_086                           ; >>
 Dict Register,"BP"  , Data=5 |02<<24|iiReg_R16|iiCPU_086|iiRegBase                 ; >>
 Dict Register,"SI"  , Data=6 |02<<24|iiReg_R16|iiCPU_086|iiRegIndex                ; >>
 Dict Register,"DI"  , Data=7 |02<<24|iiReg_R16|iiCPU_086|iiRegIndex                ; >>
 Dict Register,"R8W" , Data=8 |02<<24|iiReg_R16|iiCPU_X64                           ; >>
 Dict Register,"R9W" , Data=9 |02<<24|iiReg_R16|iiCPU_X64                           ; >>
 Dict Register,"R10W", Data=10|02<<24|iiReg_R16|iiCPU_X64                           ; >>
 Dict Register,"R11W", Data=11|02<<24|iiReg_R16|iiCPU_X64                           ; >>
 Dict Register,"R12W", Data=12|02<<24|iiReg_R16|iiCPU_X64                           ; >>
 Dict Register,"R13W", Data=13|02<<24|iiReg_R16|iiCPU_X64                           ; >>
 Dict Register,"R14W", Data=14|02<<24|iiReg_R16|iiCPU_X64                           ; >>
 Dict Register,"R15W", Data=15|02<<24|iiReg_R16|iiCPU_X64                           ; >>
 Dict Register,"EAX" , Data=0 |04<<24|iiReg_R32|iiCPU_386|iiRegBase|iiRegIndex      ; >>
 Dict Register,"ECX" , Data=1 |04<<24|iiReg_R32|iiCPU_386|iiRegBase|iiRegIndex      ; >>
 Dict Register,"EDX" , Data=2 |04<<24|iiReg_R32|iiCPU_386|iiRegBase|iiRegIndex      ; >>
 Dict Register,"EBX" , Data=3 |04<<24|iiReg_R32|iiCPU_386|iiRegBase|iiRegIndex      ; >>
 Dict Register,"ESP" , Data=4 |04<<24|iiReg_R32|iiCPU_386|iiRegBase                 ; >>
 Dict Register,"EBP" , Data=5 |04<<24|iiReg_R32|iiCPU_386|iiRegBase|iiRegIndex      ; >>
 Dict Register,"ESI" , Data=6 |04<<24|iiReg_R32|iiCPU_386|iiRegBase|iiRegIndex      ; >>
 Dict Register,"EDI" , Data=7 |04<<24|iiReg_R32|iiCPU_386|iiRegBase|iiRegIndex      ; >>
 Dict Register,"R8D" , Data=8 |04<<24|iiReg_R32|iiCPU_X64|iiRegBase|iiRegIndex      ; >>
 Dict Register,"R9D" , Data=9 |04<<24|iiReg_R32|iiCPU_X64|iiRegBase|iiRegIndex      ; >>
 Dict Register,"R10D", Data=10|04<<24|iiReg_R32|iiCPU_X64|iiRegBase|iiRegIndex      ; >>
 Dict Register,"R11D", Data=11|04<<24|iiReg_R32|iiCPU_X64|iiRegBase|iiRegIndex      ; >>
 Dict Register,"R12D", Data=12|04<<24|iiReg_R32|iiCPU_X64|iiRegBase|iiRegIndex      ; >>
 Dict Register,"R13D", Data=13|04<<24|iiReg_R32|iiCPU_X64|iiRegBase|iiRegIndex      ; >>
 Dict Register,"R14D", Data=14|04<<24|iiReg_R32|iiCPU_X64|iiRegBase|iiRegIndex      ; >>
 Dict Register,"R15D", Data=15|04<<24|iiReg_R32|iiCPU_X64|iiRegBase|iiRegIndex      ; >>
 Dict Register,"RAX" , Data=0 |08<<24|iiReg_R64|iiCPU_X64|iiRegBase|iiRegIndex      ; >>
 Dict Register,"RCX" , Data=1 |08<<24|iiReg_R64|iiCPU_X64|iiRegBase|iiRegIndex      ; >>
 Dict Register,"RDX" , Data=2 |08<<24|iiReg_R64|iiCPU_X64|iiRegBase|iiRegIndex      ; >>
 Dict Register,"RBX" , Data=3 |08<<24|iiReg_R64|iiCPU_X64|iiRegBase|iiRegIndex      ; >>
 Dict Register,"RSP" , Data=4 |08<<24|iiReg_R64|iiCPU_X64|iiRegBase                 ; >>
 Dict Register,"RBP" , Data=5 |08<<24|iiReg_R64|iiCPU_X64|iiRegBase|iiRegIndex      ; >>
 Dict Register,"RSI" , Data=6 |08<<24|iiReg_R64|iiCPU_X64|iiRegBase|iiRegIndex      ; >>
 Dict Register,"RDI" , Data=7 |08<<24|iiReg_R64|iiCPU_X64|iiRegBase|iiRegIndex      ; >>
 Dict Register,"R8"  , Data=8 |08<<24|iiReg_R64|iiCPU_X64|iiRegBase|iiRegIndex      ; >>
 Dict Register,"R9"  , Data=9 |08<<24|iiReg_R64|iiCPU_X64|iiRegBase|iiRegIndex      ; >>
 Dict Register,"R10" , Data=10|08<<24|iiReg_R64|iiCPU_X64|iiRegBase|iiRegIndex      ; >>
 Dict Register,"R11" , Data=11|08<<24|iiReg_R64|iiCPU_X64|iiRegBase|iiRegIndex      ; >>
 Dict Register,"R12" , Data=12|08<<24|iiReg_R64|iiCPU_X64|iiRegBase|iiRegIndex      ; >>
 Dict Register,"R13" , Data=13|08<<24|iiReg_R64|iiCPU_X64|iiRegBase|iiRegIndex      ; >>
 Dict Register,"R14" , Data=14|08<<24|iiReg_R64|iiCPU_X64|iiRegBase|iiRegIndex      ; >>
 Dict Register,"R15" , Data=15|08<<24|iiReg_R64|iiCPU_X64|iiRegBase|iiRegIndex      ; >>
 Dict Register,"ES"  , Data=0 |02<<24|iiReg_SEG|iiCPU_086|iiRegSeg                  ; >>
 Dict Register,"CS"  , Data=1 |02<<24|iiReg_SEG|iiCPU_086|iiRegSeg                  ; >>
 Dict Register,"SS"  , Data=2 |02<<24|iiReg_SEG|iiCPU_086|iiRegSeg                  ; >>
 Dict Register,"DS"  , Data=3 |02<<24|iiReg_SEG|iiCPU_086|iiRegSeg                  ; >>
 Dict Register,"FS"  , Data=4 |02<<24|iiReg_SEG|iiCPU_386|iiRegSeg                  ; >>
 Dict Register,"GS"  , Data=5 |02<<24|iiReg_SEG|iiCPU_386|iiRegSeg                  ; >>
 Dict Register,"SEGR6",Data=6 |02<<24|iiReg_SEG|iiCPU_386|iiRegSeg|iiFea_UNDOC      ; >>
 Dict Register,"SEGR7",Data=7 |02<<24|iiReg_SEG|iiCPU_386|iiRegSeg|iiFea_UNDOC      ; >>
 Dict Register,"K0"  , Data=0 |08<<24|iiReg_KRG|iiCPU_386|iiCPU_AVX512              ; >>
 Dict Register,"K1"  , Data=1 |08<<24|iiReg_KRG|iiCPU_386|iiCPU_AVX512              ; >>
 Dict Register,"K2"  , Data=2 |08<<24|iiReg_KRG|iiCPU_386|iiCPU_AVX512              ; >>
 Dict Register,"K3"  , Data=3 |08<<24|iiReg_KRG|iiCPU_386|iiCPU_AVX512              ; >>
 Dict Register,"K4"  , Data=4 |08<<24|iiReg_KRG|iiCPU_386|iiCPU_AVX512              ; >>
 Dict Register,"K5"  , Data=5 |08<<24|iiReg_KRG|iiCPU_386|iiCPU_AVX512              ; >>
 Dict Register,"K6"  , Data=6 |08<<24|iiReg_KRG|iiCPU_386|iiCPU_AVX512              ; >>
 Dict Register,"K7"  , Data=7 |08<<24|iiReg_KRG|iiCPU_386|iiCPU_AVX512              ; >>
 Dict Register,"BND0", Data=0 |16<<24|iiReg_BND|iiCPU_386|iiFea_MPX                 ; >>
 Dict Register,"BND1", Data=1 |16<<24|iiReg_BND|iiCPU_386|iiFea_MPX                 ; >>
 Dict Register,"BND2", Data=2 |16<<24|iiReg_BND|iiCPU_386|iiFea_MPX                 ; >>
 Dict Register,"BND3", Data=3 |16<<24|iiReg_BND|iiCPU_386|iiFea_MPX                 ; >>
 Dict Register,"CR0" , Data=0 |04<<24|iiReg_CTR|iiCPU_386|iiFea_PRIV                ; >>
 Dict Register,"CR1" , Data=1 |04<<24|iiReg_CTR|iiCPU_386|iiFea_PRIV|iiFea_UNDOC    ; >>
 Dict Register,"CR2" , Data=2 |04<<24|iiReg_CTR|iiCPU_386|iiFea_PRIV                ; >>
 Dict Register,"CR3" , Data=3 |04<<24|iiReg_CTR|iiCPU_386|iiFea_PRIV                ; >>
 Dict Register,"CR4" , Data=4 |04<<24|iiReg_CTR|iiCPU_386|iiFea_PRIV                ; >>
 Dict Register,"CR5" , Data=5 |04<<24|iiReg_CTR|iiCPU_386|iiFea_PRIV|iiFea_UNDOC    ; >>
 Dict Register,"CR6" , Data=6 |04<<24|iiReg_CTR|iiCPU_386|iiFea_PRIV|iiFea_UNDOC    ; >>
 Dict Register,"CR7" , Data=7 |04<<24|iiReg_CTR|iiCPU_386|iiFea_PRIV|iiFea_UNDOC    ; >>
 Dict Register,"CR8" , Data=8 |04<<24|iiReg_CT8|iiCPU_X64|iiFea_PRIV                ; >>
 Dict Register,"DR0" , Data=0 |04<<24|iiReg_DGR|iiCPU_386|iiFea_PRIV                ; >>
 Dict Register,"DR1" , Data=1 |04<<24|iiReg_DGR|iiCPU_386|iiFea_PRIV                ; >>
 Dict Register,"DR2" , Data=2 |04<<24|iiReg_DGR|iiCPU_386|iiFea_PRIV                ; >>
 Dict Register,"DR3" , Data=3 |04<<24|iiReg_DGR|iiCPU_386|iiFea_PRIV                ; >>
 Dict Register,"DR4" , Data=4 |04<<24|iiReg_DGR|iiCPU_386|iiFea_PRIV|iiFea_UNDOC    ; >>
 Dict Register,"DR5" , Data=5 |04<<24|iiReg_DGR|iiCPU_386|iiFea_PRIV|iiFea_UNDOC    ; >>
 Dict Register,"DR6" , Data=6 |04<<24|iiReg_DGR|iiCPU_386|iiFea_PRIV                ; >>
 Dict Register,"DR7" , Data=7 |04<<24|iiReg_DGR|iiCPU_386|iiFea_PRIV                ; >>
 Dict Register,"TR0" , Data=0 |04<<24|iiReg_TSR|iiCPU_386|iiFea_PRIV|iiFea_UNDOC    ; >>
 Dict Register,"TR1" , Data=1 |04<<24|iiReg_TSR|iiCPU_386|iiFea_PRIV|iiFea_UNDOC    ; >>
 Dict Register,"TR2" , Data=2 |04<<24|iiReg_TSR|iiCPU_386|iiFea_PRIV|iiFea_UNDOC    ; >>
 Dict Register,"TR3" , Data=3 |04<<24|iiReg_TSR|iiCPU_386|iiFea_PRIV|iiFea_UNDOC    ; >>
 Dict Register,"TR4" , Data=4 |04<<24|iiReg_TSR|iiCPU_386|iiFea_PRIV|iiFea_UNDOC    ; >>
 Dict Register,"TR5" , Data=5 |04<<24|iiReg_TSR|iiCPU_386|iiFea_PRIV|iiFea_UNDOC    ; >>
 Dict Register,"TR6" , Data=6 |04<<24|iiReg_TSR|iiCPU_386|iiFea_PRIV|iiFea_UNDOC    ; >>
 Dict Register,"TR7" , Data=7 |04<<24|iiReg_TSR|iiCPU_386|iiFea_PRIV|iiFea_UNDOC    ; >>
 Dict Register,"ST0" , Data=0 |10<<24|iiReg_FPR|iiCPU_086|iiFea_FPU                 ; >>
 Dict Register,"ST1" , Data=1 |10<<24|iiReg_FPR|iiCPU_086|iiFea_FPU                 ; >>
 Dict Register,"ST2" , Data=2 |10<<24|iiReg_FPR|iiCPU_086|iiFea_FPU                 ; >>
 Dict Register,"ST3" , Data=3 |10<<24|iiReg_FPR|iiCPU_086|iiFea_FPU                 ; >>
 Dict Register,"ST4" , Data=4 |10<<24|iiReg_FPR|iiCPU_086|iiFea_FPU                 ; >>
 Dict Register,"ST5" , Data=5 |10<<24|iiReg_FPR|iiCPU_086|iiFea_FPU                 ; >>
 Dict Register,"ST6" , Data=6 |10<<24|iiReg_FPR|iiCPU_086|iiFea_FPU                 ; >>
 Dict Register,"ST7" , Data=7 |10<<24|iiReg_FPR|iiCPU_086|iiFea_FPU                 ; >>
 Dict Register,"MM0" , Data=0 |08<<24|iiReg_MMX|iiCPU_386|iiFea_MMX                 ; >>
 Dict Register,"MM1" , Data=1 |08<<24|iiReg_MMX|iiCPU_386|iiFea_MMX                 ; >>
 Dict Register,"MM2" , Data=2 |08<<24|iiReg_MMX|iiCPU_386|iiFea_MMX                 ; >>
 Dict Register,"MM3" , Data=3 |08<<24|iiReg_MMX|iiCPU_386|iiFea_MMX                 ; >>
 Dict Register,"MM4" , Data=4 |08<<24|iiReg_MMX|iiCPU_386|iiFea_MMX                 ; >>
 Dict Register,"MM5" , Data=5 |08<<24|iiReg_MMX|iiCPU_386|iiFea_MMX                 ; >>
 Dict Register,"MM6" , Data=6 |08<<24|iiReg_MMX|iiCPU_386|iiFea_MMX                 ; >>
 Dict Register,"MM7" , Data=7 |08<<24|iiReg_MMX|iiCPU_386|iiFea_MMX                 ; >>
 Dict Register,"XMM0", Data=0 |16<<24|iiReg_XMM|iiRegIndex|iiCPU_386|iiCPU_SSE1     ; >>
 Dict Register,"XMM1", Data=1 |16<<24|iiReg_XMM|iiRegIndex|iiCPU_386|iiCPU_SSE1     ; >>
 Dict Register,"XMM2", Data=2 |16<<24|iiReg_XMM|iiRegIndex|iiCPU_386|iiCPU_SSE1     ; >>
 Dict Register,"XMM3", Data=3 |16<<24|iiReg_XMM|iiRegIndex|iiCPU_386|iiCPU_SSE1     ; >>
 Dict Register,"XMM4", Data=4 |16<<24|iiReg_XMM|iiRegIndex|iiCPU_386|iiCPU_SSE1     ; >>
 Dict Register,"XMM5", Data=5 |16<<24|iiReg_XMM|iiRegIndex|iiCPU_386|iiCPU_SSE1     ; >>
 Dict Register,"XMM6", Data=6 |16<<24|iiReg_XMM|iiRegIndex|iiCPU_386|iiCPU_SSE1     ; >>
 Dict Register,"XMM7", Data=7 |16<<24|iiReg_XMM|iiRegIndex|iiCPU_386|iiCPU_SSE1     ; >>
 Dict Register,"XMM8", Data=8 |16<<24|iiReg_XMM|iiRegIndex|iiCPU_X64|iiCPU_SSE1     ; >>
 Dict Register,"XMM9", Data=9 |16<<24|iiReg_XMM|iiRegIndex|iiCPU_X64|iiCPU_SSE1     ; >>
 Dict Register,"XMM10",Data=10|16<<24|iiReg_XMM|iiRegIndex|iiCPU_X64|iiCPU_SSE1     ; >>
 Dict Register,"XMM11",Data=11|16<<24|iiReg_XMM|iiRegIndex|iiCPU_X64|iiCPU_SSE1     ; >>
 Dict Register,"XMM12",Data=12|16<<24|iiReg_XMM|iiRegIndex|iiCPU_X64|iiCPU_SSE1     ; >>
 Dict Register,"XMM13",Data=13|16<<24|iiReg_XMM|iiRegIndex|iiCPU_X64|iiCPU_SSE1     ; >>
 Dict Register,"XMM14",Data=14|16<<24|iiReg_XMM|iiRegIndex|iiCPU_X64|iiCPU_SSE1     ; >>
 Dict Register,"XMM15",Data=15|16<<24|iiReg_XMM|iiRegIndex|iiCPU_X64|iiCPU_SSE1     ; >>
 Dict Register,"XMM16",Data=16|16<<24|iiReg_XMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"XMM17",Data=17|16<<24|iiReg_XMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"XMM18",Data=18|16<<24|iiReg_XMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"XMM19",Data=19|16<<24|iiReg_XMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"XMM20",Data=20|16<<24|iiReg_XMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"XMM21",Data=21|16<<24|iiReg_XMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"XMM22",Data=22|16<<24|iiReg_XMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"XMM23",Data=23|16<<24|iiReg_XMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"XMM24",Data=24|16<<24|iiReg_XMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"XMM25",Data=25|16<<24|iiReg_XMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"XMM26",Data=26|16<<24|iiReg_XMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"XMM27",Data=27|16<<24|iiReg_XMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"XMM28",Data=28|16<<24|iiReg_XMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"XMM29",Data=29|16<<24|iiReg_XMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"XMM30",Data=30|16<<24|iiReg_XMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"XMM31",Data=31|16<<24|iiReg_XMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"YMM0", Data=0 |32<<24|iiReg_YMM|iiRegIndex|iiCPU_386|iiCPU_AVX      ; >>
 Dict Register,"YMM1", Data=1 |32<<24|iiReg_YMM|iiRegIndex|iiCPU_386|iiCPU_AVX      ; >>
 Dict Register,"YMM2", Data=2 |32<<24|iiReg_YMM|iiRegIndex|iiCPU_386|iiCPU_AVX      ; >>
 Dict Register,"YMM3", Data=3 |32<<24|iiReg_YMM|iiRegIndex|iiCPU_386|iiCPU_AVX      ; >>
 Dict Register,"YMM4", Data=4 |32<<24|iiReg_YMM|iiRegIndex|iiCPU_386|iiCPU_AVX      ; >>
 Dict Register,"YMM5", Data=5 |32<<24|iiReg_YMM|iiRegIndex|iiCPU_386|iiCPU_AVX      ; >>
 Dict Register,"YMM6", Data=6 |32<<24|iiReg_YMM|iiRegIndex|iiCPU_386|iiCPU_AVX      ; >>
 Dict Register,"YMM7", Data=7 |32<<24|iiReg_YMM|iiRegIndex|iiCPU_386|iiCPU_AVX      ; >>
 Dict Register,"YMM8", Data=8 |32<<24|iiReg_YMM|iiRegIndex|iiCPU_X64|iiCPU_AVX      ; >>
 Dict Register,"YMM9", Data=9 |32<<24|iiReg_YMM|iiRegIndex|iiCPU_X64|iiCPU_AVX      ; >>
 Dict Register,"YMM10",Data=10|32<<24|iiReg_YMM|iiRegIndex|iiCPU_X64|iiCPU_AVX      ; >>
 Dict Register,"YMM11",Data=11|32<<24|iiReg_YMM|iiRegIndex|iiCPU_X64|iiCPU_AVX      ; >>
 Dict Register,"YMM12",Data=12|32<<24|iiReg_YMM|iiRegIndex|iiCPU_X64|iiCPU_AVX      ; >>
 Dict Register,"YMM13",Data=13|32<<24|iiReg_YMM|iiRegIndex|iiCPU_X64|iiCPU_AVX      ; >>
 Dict Register,"YMM14",Data=14|32<<24|iiReg_YMM|iiRegIndex|iiCPU_X64|iiCPU_AVX      ; >>
 Dict Register,"YMM15",Data=15|32<<24|iiReg_YMM|iiRegIndex|iiCPU_X64|iiCPU_AVX      ; >>
 Dict Register,"YMM16",Data=16|32<<24|iiReg_YMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"YMM17",Data=17|32<<24|iiReg_YMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"YMM18",Data=18|32<<24|iiReg_YMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"YMM19",Data=19|32<<24|iiReg_YMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"YMM20",Data=20|32<<24|iiReg_YMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"YMM21",Data=21|32<<24|iiReg_YMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"YMM22",Data=22|32<<24|iiReg_YMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"YMM23",Data=23|32<<24|iiReg_YMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"YMM24",Data=24|32<<24|iiReg_YMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"YMM25",Data=25|32<<24|iiReg_YMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"YMM26",Data=26|32<<24|iiReg_YMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"YMM27",Data=27|32<<24|iiReg_YMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"YMM28",Data=28|32<<24|iiReg_YMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"YMM29",Data=29|32<<24|iiReg_YMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"YMM30",Data=30|32<<24|iiReg_YMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"YMM31",Data=31|32<<24|iiReg_YMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"ZMM0", Data=0 |64<<24|iiReg_ZMM|iiRegIndex|iiCPU_386|iiCPU_AVX512   ; >>
 Dict Register,"ZMM1", Data=1 |64<<24|iiReg_ZMM|iiRegIndex|iiCPU_386|iiCPU_AVX512   ; >>
 Dict Register,"ZMM2", Data=2 |64<<24|iiReg_ZMM|iiRegIndex|iiCPU_386|iiCPU_AVX512   ; >>
 Dict Register,"ZMM3", Data=3 |64<<24|iiReg_ZMM|iiRegIndex|iiCPU_386|iiCPU_AVX512   ; >>
 Dict Register,"ZMM4", Data=4 |64<<24|iiReg_ZMM|iiRegIndex|iiCPU_386|iiCPU_AVX512   ; >>
 Dict Register,"ZMM5", Data=5 |64<<24|iiReg_ZMM|iiRegIndex|iiCPU_386|iiCPU_AVX512   ; >>
 Dict Register,"ZMM6", Data=6 |64<<24|iiReg_ZMM|iiRegIndex|iiCPU_386|iiCPU_AVX512   ; >>
 Dict Register,"ZMM7", Data=7 |64<<24|iiReg_ZMM|iiRegIndex|iiCPU_386|iiCPU_AVX512   ; >>
 Dict Register,"ZMM8", Data=8 |64<<24|iiReg_ZMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"ZMM9", Data=9 |64<<24|iiReg_ZMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"ZMM10",Data=10|64<<24|iiReg_ZMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"ZMM11",Data=11|64<<24|iiReg_ZMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"ZMM12",Data=12|64<<24|iiReg_ZMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"ZMM13",Data=13|64<<24|iiReg_ZMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"ZMM14",Data=14|64<<24|iiReg_ZMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"ZMM15",Data=15|64<<24|iiReg_ZMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"ZMM16",Data=16|64<<24|iiReg_ZMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"ZMM17",Data=17|64<<24|iiReg_ZMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"ZMM18",Data=18|64<<24|iiReg_ZMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"ZMM19",Data=19|64<<24|iiReg_ZMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"ZMM20",Data=20|64<<24|iiReg_ZMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"ZMM21",Data=21|64<<24|iiReg_ZMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"ZMM22",Data=22|64<<24|iiReg_ZMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"ZMM23",Data=23|64<<24|iiReg_ZMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"ZMM24",Data=24|64<<24|iiReg_ZMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"ZMM25",Data=25|64<<24|iiReg_ZMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"ZMM26",Data=26|64<<24|iiReg_ZMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"ZMM27",Data=27|64<<24|iiReg_ZMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"ZMM28",Data=28|64<<24|iiReg_ZMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"ZMM29",Data=29|64<<24|iiReg_ZMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"ZMM30",Data=30|64<<24|iiReg_ZMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict Register,"ZMM31",Data=31|64<<24|iiReg_ZMM|iiRegIndex|iiCPU_X64|iiCPU_AVX512   ; >>
 Dict End
DictSegmentCombine ↑
Dictionary of SEGMENT keyword COMBINE= enumerated values.
Data= is flag in SSS.Status:sssCombineMask (segment object).
DictSegmentCombine:: 
 Dict Combine, "PUBLIC", Data=sssPublic
 Dict Combine, "PRIVATE",Data=sssPrivate
 Dict Combine, "COMMON", Data=sssCommon
 Dict Combine, "STACK",  Data=sssStack
 Dict End
DictSegmentKeys ↑
Dictionary of SEGMENT keyword options.
Data= is a handler in PseudoSEGMENT procedure.
DictSegmentKeys::  
 Dict Segment, "PURPOSE", Data=PseudoSEGMENT.Purpose::
 Dict Segment, "WIDTH",   Data=PseudoSEGMENT.Width::
 Dict Segment, "ALIGN",   Data=PseudoSEGMENT.Align::
 Dict Segment, "COMBINE", Data=PseudoSEGMENT.Combine::
 Dict Segment, "CLASS",   Data=PseudoSEGMENT.Class::
 Dict End
DictSegmentPurpose ↑
Dictionary of SEGMENT keyword PURPOSE= enumerated values.
Data= is flag in SSS.Purpose encoded in SssPurposeEnc.
DictSegmentPurpose::
 PURPOSE %FOR %SssPurposeList
 Dict Purpose, "%PURPOSE",     Data=sssPurpose%PURPOSE
      %ENDFOR PURPOSE
 ; Some purposes may be defined by aliases:
 Dict Purpose, "TEXT",         Data=sssPurposeCODE
 Dict Purpose, "LITERALS",     Data=sssPurposeLITERAL
 Dict Purpose, "IDATA",        Data=sssPurposeDATA
 Dict Purpose, "UDATA",        Data=sssPurposeBSS
 Dict Purpose, "ARCHITECTURE", Data=sssPurposeCOPYRIGHT
 Dict End
↑ DictLookup Table, TxtPtr, TxtSize
Procedure DictLookup searches the dictionary table case insensitively for the text token.
Input
Table Pointer to the series of DICT items in dictionary.
TxtPtr Pointer to the analyzed text token (in arbitrary character case).
TxtSize Size of the text token.
Output
CF=0 EAX=contents of DICT.Data.
Error
CF=1 EAX=0 if the text was not found in table.
See also
DictLookupIi,
DictLookupObj
Invoked by
EaIniAssemble EaMain EaoptAssemble ExpEval ExpEvalBoolean ExpEvalIdentifier ExpParseAlignment ExpParseDatatype ExpParseFP PfDrectveDestroy PgmParameters PgmoptAssemble PseudoData PseudoEUROASM PseudoSEGMENT PseudoScope PseudopcFOR StmGetIiModifiers StmParse StmParsePcPseudo StmParseSET VarExpand VarParseName
[.text]
DictLookup Procedure Table, TxtPtr, TxtSize
     SUB ECX,ECX
     MOV EAX,[%TxtSize]
     MOV ESI,[%TxtPtr]
     MOV [%ReturnEAX],ECX
     MOV ECX,EAX
     Align2Dword EAX
     STC
     JECXZ .90: ; Empty Txt is not found.
     CMP EAX,32 ; No dictionary text is that long.
     CMC
     JC .90: 
     SUB ESP,EAX
     MOV EDI,ESP
.10: LODSB 
     CMP AL,'a'
     JB .20:
     CMP AL,'z'
     JA .20
     SUB AL,'a'-'A'  ; Convert to upper case.
.20: STOSB
     DEC ECX
     JNZ .10:
     MOV EBX,[%Table]
     SUB EBX,SIZE#DICT
.30: ADD EBX,SIZE#DICT
     MOV ECX,[EBX+DICT.Size]
     STC
     JECXZ .90: ; End of table.
     CMP ECX,[%TxtSize]
     JNE .30:
     MOV ESI,[EBX+DICT.Ptr]
     MOV EDI,ESP
     REPE CMPSB
     JNE .30:
     MOV EAX,[EBX+DICT.Data]
     MOV [%ReturnEAX],EAX
.90: EndProcedure DictLookup
     
↑ DictLookupObj ObjPtr, ObjSize

Procedure DictLookupObj performs case-insensitive search for the object name and returns pointer to the corresponding %DISPLAY handler subprocedure.

Unlike DictLookup, the object name needs not to exactly match a full dictionary item in DictDisplayObj, it may be shorter.

Input
ObjPtr Pointer to object name.
ObjSize number of characters.
Output
CF=0 EAX=pointer to PseudopcDISPLAY.Handler.
Error
CF=1 EAX=0 if the given name didn't match the beginning of any full object name.
Example
Invoke DictLookupObj =B"unfix",3 ; This returns EAX=PseudopcDISPLAY.UNF.
See also
DictLookup
Invoked by
PseudopcDISPLAY
DictLookupObj Procedure ObjPtr,ObjSize
     SUB EAX,EAX
     MOV ECX,[%ObjSize]
     MOV ESI,[%ObjPtr]
     MOV [%ReturnEAX],EAX
     MOV EAX,ECX
     MOV EDX,ECX
     Align2Dword EAX
     STC
     JECXZ .90: ; Empty Txt is not found.
     CMP EAX,24
     CMC
     JC .90:  ; No searched category name can be that long.
     SUB ESP,EAX ; Make room for uppercase name.
     MOV EDI,ESP
.10: LODSB
     CMP AL,'a'
     JB .20:
     CMP AL,'z'
     JA .20
     SUB AL,'a'-'A'  ; Convert to upper case.
.20: STOSB
     DEC ECX
     JNZ .10:
     MOV EBX,DictDisplayObj ; Dictionary table with %DISPLAY categories.
     SUB EBX,SIZE#DICT
.30: ADD EBX,SIZE#DICT
     MOV ECX,[EBX+DICT.Size]
     STC
     JECXZ .90: ; End of table.
     CMP ECX,EDX
     JB .30:
     MOV ESI,[EBX+DICT.Ptr]
     MOV EDI,ESP
     MOV ECX,EDX
     REPE CMPSB
     JNE .30:
     MOV EAX,[EBX+DICT.Data]
     MOV [%ReturnEAX],EAX
.90:EndProcedure DictLookupObj
↑ DictLookupIi MnemoPtr, MnemoSize

ProcedureDictLookupIi performs case-insensitive search for the input mnemonic and returns pointer to the corresponsing instruction handler procedure.

Rather than sequentional searching of DICT tables, this procedure uses arrays of dwords, each array in its own section. Array [DictIM04A] contains NULL-padded mnemonics which are 1..4 characters long; array [DictIH04] contains pointers to their handlers. Similary arrays [DictIM08A]+[DictIM08B], [DictIH08] contain menmonics 5..8 characters long and their handlers, array [DictIM12A]+[DictIM12B]+[DictIM12C] mnemonics 9..12 characters long etc. This allows to lookup a mnemonic with one machine instruction REPNE SCASD which is faster than hash tables or dict tables used in search for other static dictionary resources.

For the best performance should enumeration of each family start with the most frequently used instructions.

Input
MnemoPtr points to a potential mnemonic name of machine instruction. It may be in any character case.
MnemoSize is number of characters in mnemonic name (1..20).
Output
CF=0 EAX=pointer to IiHandler.
Error
CF=1 EAX=0 if the mnemonic is not a machine instruction.
See also
DictLookup
Invoked by
StmParse
; Lookable arrays are created at assembly-time:
 %DictIN04 %SETA 0 ; Number of instructions with mnemonics size  1.. 4 characters.
 %DictIN08 %SETA 0 ; Number of instructions with mnemonics size  5.. 8 characters.
 %DictIN12 %SETA 0 ; Number of instructions with mnemonics size  9..12 characters.
 %DictIN16 %SETA 0 ; Number of instructions with mnemonics size 13..16 characters.
 %DictIN20 %SETA 0 ; Number of instructions with mnemonics size 17..20 characters.
%MaxMnemoSize %SETA 20 ; Longer instruction mnemonics are not supported.
[.data]      ; Predeclaration of used sections and labels at the beginning of each sections.
[DictIH04]
 DictIH04:
[DictIH08]
 DictIH08:
[DictIH12]
 DictIH12:
[DictIH16]
 DictIH16:
[DictIH20]
 DictIH20:
[DictIM04A]
 DictIM04A:
[DictIM08A]
 DictIM08A:
[DictIM08B]
 DictIM08B:
[DictIM12A]
 DictIM12A:
[DictIM12B]
 DictIM12B:
[DictIM12C]
 DictIM12C:
[DictIM16A]
 DictIM16A:
[DictIM16B]
 DictIM16B:
[DictIM16C]
 DictIM16C:
[DictIM16D]
 DictIM16D:
[DictIM20A]
 DictIM20A:
[DictIM20B]
 DictIM20B:
[DictIM20C]
 DictIM20C:
[DictIM20D]
 DictIM20D:
[DictIM20E]
 DictIM20E:
cat %FOR %IiCategoryList ; All categories of machine instructions (g,s,t, etc).
 %List %SET2 %%Ii%cat[]List ; %IigList, %IizList etc.
 mnemo %FOR %List ; MOV, POP, PUSH etc.
; According to the number of characters in mnemonic name, each instruction will be tossed to sections.
  %size %SETS %mnemo                
 s04 %IF %size <= 4                                                                              ;>
      %DictIN04 %SETA %DictIN04 + 1 ; Update number of instructions in this section.
      [DictIM04A]
        DD "%mnemo"                 ; NULL-padded mnemonic.
      [DictIH04]
        DD Ii%cat%mnemo::           ; Pointer to the instruction handler.
    %ENDIF s04
 s08 %IF %size <=8 && %size > 4
       %DictIN08 %SETA %DictIN08 + 1
       [DictIM08A]
         DD "%mnemo[1..4]"
       [DictIM08B]
         DD "%mnemo[5..8]"
       [DictIH08]
         DD Ii%cat%mnemo::
      %ENDIF s08
 s12 %IF %size <=12 && %size > 8
       %DictIN12 %SETA %DictIN12 + 1
       [DictIM12A]
         DD "%mnemo[1..4]"
       [DictIM12B]
         DD "%mnemo[5..8]"
       [DictIM12C]
         DD "%mnemo[9..12]"
       [DictIH12]
         DD Ii%cat%mnemo::
      %ENDIF s12
 s16 %IF %size <=16 && %size > 12
       %DictIN16 %SETA %DictIN16 + 1
       [DictIM16A]
         DD "%mnemo[1..4]"
       [DictIM16B]
         DD "%mnemo[5..8]"
       [DictIM16C]
         DD "%mnemo[9..12]"
       [DictIM16D]
         DD "%mnemo[13..16]"
       [DictIH16]
         DD Ii%cat%mnemo::
      %ENDIF s16
 s20 %IF %size <=20 && %size > 16
       %DictIN20 %SETA %DictIN20 + 1
       [DictIM20A]
         DD "%mnemo[1..4]"
       [DictIM20B]
         DD "%mnemo[5..8]"
       [DictIM20C]
         DD "%mnemo[9..12]"
       [DictIM20D]
         DD "%mnemo[13..16]"
       [DictIM20E]
         DD "%mnemo[17..20]"
       [DictIH20]
         DD Ii%cat%mnemo::
      %ENDIF s20
      %IF %size >%MaxMnemoSize
        %ERROR Mnemonic %mnemo is longer than %MaxMnemoSize characters. Revise DictLookupIi.
      %ENDIF
    %ENDFOR mnemo
%ENDFOR cat
; The actual search is performed at run-time.
[.text]
DictLookupIi Procedure MnemoPtr, MnemoSize
MNEMO LocalVar Size=%MaxMnemoSize ; Room for mnemonics converted to uppercase.
M20E  LocalVar Size=4
     LEA EDI,[%MNEMO]
     MOV ECX,%MaxMnemoSize/4
     XOR EAX,EAX
     REP STOSD  ; Initialize the room with NULL.
     MOV ECX,[%MnemoSize]
     MOV ESI,[%MnemoPtr]
     LEA EDI,[%MNEMO]
     CMP ECX,%MaxMnemoSize
     JA .NotFound:
     JECXZ .NotFound:
 .L: LODSB
     CMP AL,'a'
     JB .S:
     CMP AL,'z'
     JA .S:
     AND AL,~('A'^'a') ; Convert 'a'..'z' to 'A'..'Z'.
 .S: STOSB
     DEC ECX
     JNZ .L:
     MOV ECX,[%MnemoSize]
     LEA ESI,[%MNEMO]
     ADD ECX,3
     AND ECX,~3 ; Round up the mnemonic size to a multiple of 4.
     Dispatch ECX,4,8,12,16,20 ; Toss by the rounded mnemonic maximal size.
     JMP .NotFound:
.4: ; Mnemonic has 1..4 characters.
     MOV ECX,%DictIN04 ; Number of such instructions.
     LODSD
     MOV EDI,DictIM04A:
     REPNE SCASD
     JNE .NotFound:
     MOV EAX,[DictIH04-DictIM04A+EDI-4] ; Load handler address from array [DictIH04].
     JMP .Found:
.8: ; Mnemonic has 5..8 characters.
     MOV ECX,%DictIN08 ; Number of such instructions.
     LODSD
     XCHG EAX,EBX
     LODSD
     XCHG EBX,EAX ; 
     MOV EDI,DictIM08A:
 .8N:REPNE SCASD
     JNE .NotFound:
     CMP EBX,[DictIM08B-DictIM08A+EDI-4]
     JNE .8N:
     MOV EAX,[DictIH08-DictIM08A+EDI-4]
     JMP .Found:
.12:; Mnemonic has 9..12 characters.
     MOV ECX,%DictIN12
     LODSD
     XCHG EAX,EDX
     LODSD
     XCHG EAX,EBX
     LODSD
     XCHG EDX,EAX
     MOV EDI,DictIM12A:
.12N:REPNE SCASD
     JNE .NotFound:
     CMP EBX,[DictIM12B-DictIM12A+EDI-4]
     JNE .12N:
     CMP EDX,[DictIM12C-DictIM12A+EDI-4]
     JNE .12N:
     MOV EAX,[DictIH12-DictIM12A+EDI-4]
     JMP .Found:
.16:; Mnemonic has 13..16 characters.
     MOV ECX,%DictIN16
     LODSD
     PUSH EAX
      LODSD
      XCHG EAX,EBX
      LODSD
      XCHG EAX,EDX
      LODSD
      XCHG EAX,ESI
     POP EAX
     MOV EDI,DictIM16A:
.16N:REPNE SCASD
     JNE .NotFound:
     CMP EBX,[DictIM16B-DictIM16A+EDI-4]
     JNE .16N:
     CMP EDX,[DictIM16C-DictIM16A+EDI-4]
     JNE .16N:
     CMP ESI,[DictIM16D-DictIM16A+EDI-4]
     JNE .16N:
     MOV EAX,[DictIH16-DictIM16A+EDI-4]
     JMP .Found:
.20:; Mnemonic has 17..20 characters.
     MOV ECX,%DictIN20
     LODSD
     PUSH EAX
      LODSD
      XCHG EAX,EBX
      LODSD
      XCHG EAX,EDX
      LODSD
      XCHG EAX,[%M20E]
      LODSD
      XCHG EAX,ESI
     POP EAX
     MOV EDI,DictIM20A:
.20N:REPNE SCASD
     JNE .NotFound:
     CMP EBX,[DictIM20B-DictIM20A+EDI-4]
     JNE .20N:
     CMP EDX,[DictIM20C-DictIM20A+EDI-4]
     JNE .20N:
     XCHG EAX,[%M20E]
       CMP EAX,[DictIM20D-DictIM20A+EDI-4]
     XCHG [%M20E],EAX
     JNE .20N:
     CMP ESI,[DictIM20E-DictIM20A+EDI-4]
     JNE .20N:
     MOV EAX,[DictIH20-DictIM20A+EDI-4]
     JMP .Found:
.NotFound:
     XOR EAX,EAX
     STC
.Found:
     MOV [%ReturnEAX],EAX
 EndProcedure DictLookupIi
↑ DictSearchByData Table, Data
DictSearchByData finds a dictionary item by its .Data value.
Input
Table Pointer to an array of DICT items in dictionary.
Data The searched value (DICT.Data).
Output
CF=0
ESI= Pointer to the dictionary item. Name is [ESI+DICT.Name], size is [ESI+DICT.Size].
Error
CF=1 if no item found.
ESI= 0
Example
Invoke DictSeachByData::, DictModels, pgmoptCOMPACT
Invoked by
PfOutput PfomfStoreModule PseudoData PseudopcDISPLAY SymResolveImage VarExpand
DictSearchByData Procedure Table, Data
     SUB EAX,EAX
     MOV EBX,[%Table]
     MOV EDX,[%Data]
     MOV [%ReturnESI],EAX
     SUB EBX,SIZE#DICT
.30: ADD EBX,SIZE#DICT
     MOV ECX,[EBX+DICT.Size]
     STC
     JECXZ .90 ; If end of table was found.
     CMP EDX,[EBX+DICT.Data]
     JNE .30:
     MOV [%ReturnESI],EBX
.90:EndProcedure DictSearchByData
[.data]
ENDPROGRAM dict

▲Back to the top▲