源和目标必须具有相同的大小 (8086)

source and destination must have equal size (8086)

我假设 MOV 指令中的源和目标必须具有相同的大小,并且当我编写这些指令时:

.data
var dw 0
.code
mov al,56h
mov var,al

我收到操作数与 16 位地址和 8 位寄存器不匹配的错误,但在这种情况下,我没有收到任何错误,但 var 是 32 位(双字),ax 是 16有点那么为什么我没有收到任何错误?

.data
var dd 0
.code
mov ax,56h
mov var,ax

我用的是 emu 8086。

8086 最多使用 16 位寄存器。当您尝试将 16 位值分配给 32 位变量时,emu8086 假定您的变量是 16 位。

如果您只想存储定义为双字的命名位置的低位字,则使用相同语法(MASM 和 TASM)的其他汇编器确实需要显式 word ptr 大小覆盖。例如mov word ptr [var], ax.

对于emu8086,只有在将一个字节存储到一个字变量中时才需要这个。

MASM/TASM 行为与让符号名称在存储立即数时暗示大小更一致,例如 mov var, 1 暗示 word ptr 如果您使用 dw 定义它,即使指令中没有寄存器来暗示大小。