This is similar to typecasting. In your opinion, you can throw out typed language from pascal by allowing LongInt := Single without type conversion, leaving only an «nice explicit warning».
No, it's not similar. Assembly is of the category "from great power comes great responsibility". It's
your task to ensure that the assembly does what you intend, the compiler can't help you there (in this specific case both
mov eax, word ptr ByteVar and
mov eax, dword ptr ByteVar are valid, but have different results while
LongInt := Single is not valid).
Turbo Pascal will compile mov ax, word ptr ByteVar, but without word ptr (typecast) it will out an error. This is a more correct behavior.
Despite FPC aspiring to be Turbo Pascal or Delphi compatible, FPC
is not Turbo Pascal (or Delphi). There will always be differences and FPC's assembler reader is simply more forgiving. Not to mention that 32-bit or 64-bit x86 assembly is even more complex than 16-bit x86. And that FPC supports many more architectures than just x86...
assembler will use the width of the register as hint
I think that .s files are generated by FPC for assembler, and not by assembler itself? These word[]/dword[] are already present in the .s file.
As
marcov wrote assembly code is handled in different levels. The readers are different from the writers and it is possible for example to read AT&T assembly, but have it write Intel assembly (in fact the RTL helpers on x86 are written using AT&T assembly). So the reader interprets your intention in a certain way, generates the necessary objects and then the writer will simply print that in a way that the called assembler is happy.