源和目标的大小必须相等(8086)

时间:2018-12-29 17:04:45

标签: assembly x86-16 emu8086

我假定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。

1 个答案:

答案 0 :(得分:1)

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

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

对于emu8086,仅在将一个字节存储到word变量中时才需要这样做。

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