源和目标必须具有相同的大小 (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
定义它,即使指令中没有寄存器来暗示大小。
我假设 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
定义它,即使指令中没有寄存器来暗示大小。