x86汇编中的操作数大小冲突?

Mar*_* V. 7 x86 assembly

我是第一次尝试组装的新手程序员.如果这是一个令人难以置信的蹩脚问题,请提前抱歉.

我有一个存储在EAX寄存器中的字符,但我需要将它移动到我的DL寄存器中.当我尝试:mov dl,eax我得到一个错误C2443:操作数大小冲突.我知道eax寄存器是32位而dl是8位...我正在做什么?我该如何解决这个问题.

Soa*_*Box 12

你想要的可能是:

movzx edx, al
Run Code Online (Sandbox Code Playgroud)

这将al复制到dl,零填充edx的其余部分.这条单指令相当于这两条指令:

xor edx, edx 
mov dl, al
Run Code Online (Sandbox Code Playgroud)

  • 我更喜欢这个.movzx处理所有尾随位.谢谢一些抽象!(我的热情应该背叛我缺乏装配经验). (3认同)

Jus*_*eff 6

尝试

xor edx,edx
mov dl, al
Run Code Online (Sandbox Code Playgroud)

也许?将edx的"非必要"高阶位(可选)清零的第一条指令,然后将低位8从eax移到edx.

正如其他人所指出的那样,movzx只需一步即可完成.值得一提的是,沿着相同的行,如果你在al中有一个带符号的值,你可以使用"movsx edx,al"用alb的msb的副本填充edx的高位,从而放置一个带符号的32位代表al到edx.