我假定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。
答案 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
定义它,即使存在)指令中没有用于暗示大小的寄存器。