Целочисленные переменные в MASM32 могут быть: 1-байтовые (8 бит), обозначаются byte или db 2-байтовые (16 бит), обозначаются word или dw 4-байтовые (32 бит), обозначаются dword или dd 6-байтовые (48 бит), обозначаются fword или df 8-байтовые (64 бит), обозначаются qword или dq 10-байтовые (80 бит), обозначаются tbyte или dt 16-байтовые (128 бит), обозначаются oword или ??? в этом списке у всех кроме 16-байтовой переменной есть маленький эквивалент размера большой эквивалент размера (16 байт) это - oword можно например задать 16-байтную переменную .data? Temp oword ? .code а вот как обозначается маленький эквивалент этого размера еще раз подчеркну именно на синтаксисе - masm32
Если следовать дедуктивным путём, сравнив все названия, вероятно получается oword - do , можно ведь проверить собрав пример минимальный, хотя do я ещё нигде не встречал =))))
masm32 не знает такого двух-символа - do надо пологать наверное в синтаксисе masm32 такой двух-символ по умолчанию не предусмотрен можно конечно самому объявить (do typedef oword) но я думаю это лишнее я просто думал а вдруг он по умолчанию существует но как оказалось нет
assch, в ml64 oword = 16 байтов Код (ASM): .data a oword 99999999999999999999999999999999h .code mov rax,qword ptr a mov qword ptr a+8,rbx a do 99999999999999999999999999999999h - error A2008:syntax error : a
Да, так и есть, я уже сам проверил на разных версиях, в мсдн я не увидел в справке .. Изучаем дальше из исходников - Код (C): USHORT dirsize[] = { /* I_BYTE */ 1, /* I_DWORD */ 4, /* I_FAR */ CSFAR, /* I_NEAR */ CSNEAR, /* I_QWORD */ 8, /* I_TBYTE */ 10, /* I_WORD */ 2, /* I_FWORD */ 6, /* I_PROC */ CSNEAR }; и Код (ASM): globalW macro n,i,s ?aD <n>,2 ?dd n,1,<WORD>,<DW>,<i>,<s> endm globalD macro n,i,s ?aD <n>,4 ?dd n,1,<DWORD>,<DD>,<i>,<s> endm globalQ macro n,i,s ?aD <n>,8 ?dd n,1,<QWORD>,<DQ>,<i>,<s> endm globalT macro n,i,s ?aD <n>,10 ?dd n,1,<TBYTE>,<DT>,<i>,<s> endm if sizeC globalCP macro n,i,s globalD n,<i>,<s> endm else globalCP macro n,i,s globalW n,<i>,<s> endm endif if sizeD globalDP macro n,i,s globalD n,<i>,<s> endm else globalDP macro n,i,s globalW n,<i>,<s> endm endif endif ifndef ?NOSTATIC staticB macro n,i,s ?aD <n>,1 ?dd n,0,<BYTE>,<DB>,<i>,<s> endm staticW macro n,i,s ?aD <n>,2 ?dd n,0,<WORD>,<DW>,<i>,<s> endm staticD macro n,i,s ?aD <n>,4 ?dd n,0,<DWORD>,<DD>,<i>,<s> endm staticQ macro n,i,s ?aD <n>,8 ?dd n,0,<QWORD>,<DQ>,<i>,<s> endm staticT macro n,i,s ?aD <n>,10 ?dd n,0,<TBYTE>,<DT>,<i>,<s> endm Скорее всего они не успели описать всё, а сами сокращения это часть макрообработки в ассемблере .. т.к. в инклудах студии нет таких описателей .. Далее дизасм самого мл64 .. Код (ASM): .rdata:000000014003E948 dq offset byte_14006639F .rdata:000000014003E950 dq offset aInteger ; "integer" .rdata:000000014003E958 dq offset aByte_3 ; "byte" .rdata:000000014003E960 dq offset aWord_1 ; "word" .rdata:000000014003E968 dq offset aDword ; "dword" .rdata:000000014003E970 dq offset aFword_0 ; "fword" .rdata:000000014003E978 dq offset aQword_0 ; "qword" .rdata:000000014003E980 dq offset aTbyte_1 ; "tbyte" .rdata:000000014003E988 dq offset aSbyte ; "sbyte" .rdata:000000014003E990 dq offset aSword ; "sword" .rdata:000000014003E998 dq offset aSdword ; "sdword" .rdata:000000014003E9A0 dq offset aSqword ; "sqword" .rdata:000000014003E9A8 dq offset aOword ; "oword" .rdata:000000014003E9B0 dq offset aReal4 ; "real4" .rdata:000000014003E9B8 dq offset aReal8 ; "real8" .rdata:000000014003E9C0 dq offset aReal10 ; "real10" .rdata:000000014003E9C8 dq offset aMmword ; "mmword" .rdata:000000014003E9D0 dq offset aXmmword_0 ; "xmmword" .rdata:000000014003E9D8 dq offset aYmmword ; "ymmword" и далее мы находим вот такие строки Код (ASM): .data:000000014006B773 dq offset dbRE .data:000000014006B77B dq offset dwRE .data:000000014006B783 dq offset ddRE .data:000000014006B78B dq offset dfRE .data:000000014006B793 dq offset dqRE .data:000000014006B79B dq offset dtRE .data:000000014006B7A3 dq offset alignRE .data:000000014006B7AB dq offset evenRE .data:000000014006B7B3 dq offset procRE .data:000000014006B7BB dq offset endpRE .data:000000014006B7C3 dq offset protoRE .data:000000014006B7CB dq offset labelDirRE .data:000000014006B7D3 dq offset orgRE .data:000000014006B7DB dq offset publicRE .data:000000014006B7E3 dq offset extrnRE .data:000000014006B7EB dq offset commRE .data:000000014006B7F3 dq offset extrnRE .data:000000014006B7FB dq offset recordRE Наверное можно сделать вывод, что сокращений для последующих директив просто не существует =) А описываются они как и говорилось выше через макрообработку ... Чтобы всё было как всегда нам стоит написать собственный макрос который будет обрабатывать всё по табличке к примеру Код (ASM): 1 byte (8 bit): byte, DB 2 bytes (16 bit): word, DW 4 bytes (32 bit): dword, DD 8 bytes (64 bit): qword, DQ 10 bytes (80 bit): tword, DT 16 bytes (128 bit): oword, DO 32 bytes (256 bit): yword, DY 64 bytes (512 bit): zword, DZ Не включая конечно то, что мы уже имеем ...