В MASM BYTE PTR [ecx] обращается к памяти по адресу ecx. BYTE [ecx] - синтаксическая ошибка («синтаксическая ошибка встроенного ассемблера в« первом операнде »; найдена« ['»).
В NASM или YASM BYTE [ecx] обращается к памяти по адресу ecx. BYTE PTR [ecx] - синтаксическая ошибка («ошибка: запятая, двоеточие или конец строки») в NASM, «неопределенный символ« PTR »в YASM).
В TASM, BYTE PTR [ecx ] и BYTE [ecx] эквивалентны - как память доступа по адресу ecx.
Однако, в ассемблерном Gnu-газе при использовании синтаксиса intel BYTE PTR [ecx] обращается к памяти в ecx, но BYTE [ ecx] фактически обращается к памяти по адресу ecx + 1. То есть, BYTE [ecx] эквивалентен BYTE PTR [ecx + 1], который, как представляется, не является нормальным или документированным.
Ассемблер Gnu версии 2.18, 2.24 или 2.26.1:
cat > foo.S << EOF
.intel_syntax noprefix
movb BYTE [ecx], 0
movb BYTE PTR [ecx], 0
.att_syntax prefix
EOF
as foo.S
objdump -dM intel a.out
0: 67 c6 41 01 00 mov BYTE PTR [ecx+0x1],0x0
5: 67 c6 01 00 mov BYTE PTR [ecx],0x0