| Index | Manual | Download | Source | Macros | Embedded word Case ins.
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
DictLookupIiSetup
DictLookupIi
DictLookupObj
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).

         EUROASM NOWARN=2101,NOWARN=3720
    dict PROGRAM FORMAT=COFF,MODEL=FLAT,WIDTH=32
         INCLUDEHEAD euroasm.htm, \  Interface (structures, symbols and macros) of other modules used in this source.
                   ea.htm, eaopt.htm, exp.htm, ii.htm, iia.htm, iib.htm, iic.htm, iid.htm, iif.htm, iig.htm, \
                   iik.htm, iim.htm, iip.htm, iis.htm, iit.htm, iiv.htm, iix.htm, iiy.htm, iiz.htm, msg.htm, \
                   pf.htm, pgm.htm, pgmopt.htm, sss.htm, sym.htm, var.htm

     dict HEAD ; Modul interface.

↑ DICT
  Structure which describes members of dictionary tables.

    DICT STRUC
    .Ptr  D DWORD ; Pointer to the text value of token.
    .Size D DWORD ; Size of token.
    .Data D DWORD ; 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
    dictAttrRVA     = 10
    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, "RVA",     Data=ExpEval.Rva::
     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 IiMfAddr, "P",    Data=iiMfgADDR_PLT
     Dict IiMfAddr, "PLT",  Data=iiMfgADDR_PLT
     Dict IiMfAddr, "G",    Data=iiMfgADDR_GOT
     Dict IiMfAddr, "GOT",  Data=iiMfgADDR_GOT
     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,"RVA#",     Data=15+dictUnary, DataName=Rva
     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, "RDATA",        Data=sssPurposeRODATA
     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

    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

↑ DictLookupIiSetup

  Rather than sequentional searching of DICT tables, procedure DictLookupIiSetup defines 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 the 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.

See also
  DictLookupIi

    ; 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 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.

Input
  MnemoPtr points to a potential mnemonic name of the machine instruction. It may be in any character case.
  MnemoSize is the 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
  DictLookupIiSetup
Invoked by
  StmParse

    DictLookupIi Procedure MnemoPtr, MnemoSize
    MNEMO   LocalVar Size=%MaxMnemoSize              ; Room for a mnemonics converted to uppercase.
    Dict12  LocalVar
    Dict16  LocalVar
    Dict20  LocalVar
    DictIMA LocalVar
         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:
         TEST ECX
         JZ .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.
         LODSD
         MOV EDI,DictIM04A:
         MOV ECX,%DictIN04                           ; Number of such instructions.
         REPNE SCASD
         JNE .NotFound:
         LEA ESI,[DictIH04+EDI-4]                    ; Load handler address from array [DictIH04].
         LEA ECX,[DictIM04A]
         SUB ESI,ECX
         LODSD
         JMP .Found:

    .8: ; Mnemonic has 5..8 characters.
         LODSD
         XCHG EDX,EAX                                ; Load chars 1..4 to EDX.
         LODSD
         XCHG EBX,EAX                                ; Load chars 5..8 to EBX.
         MOV EDI,DictIM08A:
         MOV [%DictIMA],EDI
         XCHG EAX,EDX                                ; Chars 1..4 to EAX.
         MOV ECX,%DictIN08                           ; Number of such instructions.
     .8N:REPNE SCASD
         JNE .NotFound:
         LEA ESI,[DictIM08B+EDI-4]
         SUB ESI,[%DictIMA]
         CMP EBX,[ESI]
         JNE .8N:
         LEA ESI,[DictIH08+EDI-4]
         SUB ESI,[%DictIMA]
         LODSD
         JMP .Found:

    .12:; Mnemonic has 9..12 characters.
         LODSD
         XCHG EDX,EAX                                ; Load chars 1..4 to EDX.
         LODSD
         XCHG EBX,EAX                                ; Load chars 5..8 to EBX.
         LODSD
         MOV [%Dict12],EAX                           ; Load chars 9..12 to [%Dict12].
         MOV EDI,DictIM12A:
         MOV [%DictIMA],EDI
         XCHG EAX,EDX                                ; Load chars 1..4 to EAX.
         MOV ECX,%DictIN12                           ; Number of such instructions.
    .12N:REPNE SCASD
         JNE .NotFound:
         LEA ESI,[DictIM12B+EDI-4]
         SUB ESI,[%DictIMA]
         CMP EBX,[ESI]
         JNE .12N:
         LEA ESI,[DictIM12C+EDI-4]
         SUB ESI,[%DictIMA]
         MOV EDX,[%Dict12]
         CMP EDX,[ESI]
         JNE .12N:
         LEA ESI,[DictIH12+EDI-4]
         SUB ESI,[%DictIMA]
         LODSD
         JMP .Found:

    .16:; Mnemonic has 13..16 characters.
         LODSD
         XCHG EDX,EAX                                ; Load chars 1..4 to EDX.
         LODSD
         XCHG EBX,EAX                                ; Load chars 5..8 to EBX.
         LODSD
         MOV [%Dict12],EAX                           ; Load chars 9..12 to [%Dict12].
         LODSD
         MOV [%Dict16],EAX                           ; Load chars 12..16 to [%Dict16].
         MOV EDI,DictIM16A:
         MOV [%DictIMA],EDI
         XCHG EAX,EDX                                ; Load chars 1..4 to EAX.
         MOV ECX,%DictIN16                           ; Number of such instructions.
    .16N:REPNE SCASD
         JNE .NotFound:
         LEA ESI,[DictIM16B+EDI-4]
         SUB ESI,[%DictIMA]
         CMP EBX,[ESI]
         JNE .16N:
         LEA ESI,[DictIM16C+EDI-4]
         SUB ESI,[%DictIMA]
         MOV EDX,[%Dict12]
         CMP EDX,[ESI]
         JNE .16N:
         LEA ESI,[DictIM16D+EDI-4]
         SUB ESI,[%DictIMA]
         MOV EDX,[%Dict16]
         CMP EDX,[ESI]
         JNE .16N:
         LEA ESI,[DictIH16+EDI-4]
         SUB ESI,[%DictIMA]
         LODSD
         JMP .Found:

    .20:; Mnemonic has 17..20 characters.
         LODSD
         XCHG EDX,EAX                                ; Load chars 1..4 to EDX.
         LODSD
         XCHG EBX,EAX                                ; Load chars 5..8 to EBX.
         LODSD
         MOV [%Dict12],EAX                           ; Load chars 9..12 to [%Dict12].
         LODSD
         MOV [%Dict16],EAX                           ; Load chars 12..16 to [%Dict16].
         LODSD
         MOV [%Dict20],EAX                           ; Load chars 17..20 to [%Dict20].
         MOV EDI,DictIM20A:
         MOV [%DictIMA],EDI
         XCHG EAX,EDX                                ; Load chars 1..4 to EAX.
         MOV ECX,%DictIN20                           ; Number of such instructions.
    .20N:REPNE SCASD
         JNE .NotFound:
         LEA ESI,[DictIM20B+EDI-4]
         SUB ESI,[%DictIMA]
         CMP EBX,[ESI]
         JNE .20N:
         LEA ESI,[DictIM20C+EDI-4]
         SUB ESI,[%DictIMA]
         MOV EDX,[%Dict12]
         CMP EDX,[ESI]
         JNE .20N:
         LEA ESI,[DictIM20D+EDI-4]
         SUB ESI,[%DictIMA]
         MOV EDX,[%Dict16]
         CMP EDX,[ESI]
         JNE .20N:
         LEA ESI,[DictIM20E+EDI-4]
         SUB ESI,[%DictIMA]
         MOV EDX,[%Dict20]
         CMP EDX,[ESI]
         JNE .20N:
         LEA ESI,[DictIH20+EDI-4]
         SUB ESI,[%DictIMA]
         LODSD
         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.Ptr]`, size is `[ESI+DICT.Size]`.
Error
  CF=1 if no item found.
  ESI= 0
Example
  Invoke DictSeachByData::, DictModels, pgmoptCOMPACT
Invoked by
  PfOutput PgmListMap PseudoData 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

    ENDPROGRAM dict

▲Back to the top▲