2013-03-21 63 views
1

在这里,我试图将变量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? 
+1

[不能移动8位地址到16位寄存器](http://stackoverflow.com/questions/33959446/cannot-move-8-bit-address-to-16-bit-register) – 2015-11-27 15:05:16

回答

5

除了拉胡尔的回答,如果您还需要零出bh和任何80386或更高版本(由.686p所示)的工作是:

movzx bx, X 

如果你正在使用X作为一个符号值,需要符号扩展bx作者:

movsx bx, X 
+0

指令'.686p'满足要求。 – 2013-03-21 06:24:04

+0

我怀疑这个,但是想要防止任何人把这个指令当作样板。 (公平地说,我可能没有在20年内编写16位代码,所以无论如何,这个假设看起来很安全。) – DocMax 2013-03-21 06:28:57

3

BX的低8位可寻址为BL。

所以,你需要做的是:

+0

哇,那很快 - 我没想到很快就会看到答案。 :) – 2013-03-21 05:58:52

+0

不客气!如果这对你有帮助,请接受答案(检查点):) – 2013-03-21 06:00:11

相关问题