首页 > 解决方案 > 源和目标的大小必须相同 (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

我正在使用鸸鹋 8086。

标签: assemblyx86-16emu8086

解决方案


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

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

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

MASM/TASM 行为与在存储立即数时让符号名称暗示大小更一致,就像用 定义它时mov var, 1暗示的那样,即使指令中没有暗示大小的寄存器。word ptrdw


推荐阅读