Given that the 8086/8088 was used in the IBM PC, and the Operating System on that was most often from Microsoft, Microsoft's assembler MASM was the de facto standard for many years. It followed Intel's syntax closely, but permitted some convenient but "loose" syntax that (in hindsight) only caused confusion and errors in code.
A perfect example is as follows:
MaxSize EQU 16 ; Define a constant Symbol DW 0x1234 ; Define a 16-bit WORD called Symbol to hold 0x1234 MOV AX, 10 ; AX now holds 10 MOV BX, MaxSize ; BX now holds 16 MOV CX, Symbol ; ????
Does the last
MOV instruction put the contents of
CX, or the address of
CX end up with
0x0102 (or whatever)? It turns out that
CX ends up with
0x1234 - if you want the address, you need to use the
MOV AX, [Symbol] ; Contents of Symbol MOV CX, OFFSET Symbol ; Address of Symbol