This looks indeed like a UAsm bug. ML and AsmC do it correctly. I must admit, though, that I never used that syntax - for me it's mov word ptr [eax], 123, and that one is OK for UAsm.
include \masm32\include\masm32rt.inc
.data
string db "xxxxxxxxxxxxxxxxxx"
.code
start:
mov eax, offset string
int 3
mov [eax],word ptr 005dh
nop
mov [eax],word ptr 00aah
nop
mov [eax],word ptr 00bbcch
nop
mov [eax],word ptr 7788h
nop
mov word ptr [eax],"aa"
nop
exit
end start
ML: mov eax, offset 00402000 ; ASCII "xxxxxxxxxxxxxxxxxx"
int3
mov word ptr [eax], 5D
nop
mov word ptr [eax], 0AA
nop
mov word ptr [eax], 0BBCC
nop
mov word ptr [eax], 7788
nop
mov word ptr [eax], 6161
nop ; ³
UAsm: mov eax, offset 00402000 ; ASCII "xxxxxxxxxxxxxxxxxx"
int3
mov byte ptr [eax], 5D
nop
mov byte ptr [eax], 0AA
nop
mov dword ptr [eax], 0BBCC
nop
mov dword ptr [eax], 7788
nop
mov word ptr [eax], 6161
nop