如何在x86汇编中将8位地址移入16位寄存器?

And*_*een 1 x86 assembly

在这里,我试图将变量X(这是一个8位变量)移动到寄存器bx(这是一个16位寄存器).在这种情况下,如何将X的值移动到寄存器bx中?

.686p
.model flat,stdcall
.stack 2048

.data
X byte 5
ExitProcess proto, exitcode:dword
.code

start:
invoke  ExitProcess, 0

mov bx, X; 1>p4.asm(13): error A2022: instruction operands must be the same size

end start ;what does the end statement do?
Run Code Online (Sandbox Code Playgroud)

Doc*_*Max 5

除了Rahul的答案之外,如果你还需要将零点清零bh并且正在处理任何80386或更新的东西(如图所示.686p):

movzx bx, X
Run Code Online (Sandbox Code Playgroud)

如果您使用X作为有符号值并且需要签名扩展bx:

movsx bx, X
Run Code Online (Sandbox Code Playgroud)