如何将8位地址移入x86程序集的16位寄存器?
在这里,我试图将变量X(这是一个8位变量)移入寄存器bx(这是一个16位寄存器)。在这种情况下,如何将X的值移动到寄存器bx中?如何将8位地址移入x86程序集的16位寄存器?
.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?
除了拉胡尔的回答,如果您还需要零出bh
和任何80386或更高版本(由.686p
所示)的工作是:
movzx bx, X
如果你正在使用X作为一个符号值,需要符号扩展bx
作者:
movsx bx, X
指令'.686p'满足要求。 – 2013-03-21 06:24:04
我怀疑这个,但是想要防止任何人把这个指令当作样板。 (公平地说,我可能没有在20年内编写16位代码,所以无论如何,这个假设看起来很安全。) – DocMax 2013-03-21 06:28:57
BX的低8位可寻址为BL。
所以,你需要做的是:
哇,那很快 - 我没想到很快就会看到答案。 :) – 2013-03-21 05:58:52
不客气!如果这对你有帮助,请接受答案(检查点):) – 2013-03-21 06:00:11
[不能移动8位地址到16位寄存器](http://stackoverflow.com/questions/33959446/cannot-move-8-bit-address-to-16-bit-register) – 2015-11-27 15:05:16