Assembly 如何将两个单词移动到一个双单词变量中?

Assembly 如何将两个单词移动到一个双单词变量中?,assembly,x86,Assembly,X86,如何将两个单词移动到一个双单词变量中?具体来说,我希望一个单词放在这个变量的上半部分,另一个放在下半部分。//下面是一些伪代码,假设16位单词大小: 单词lowWord= 单词highWord= dword组合=((dword)lowWord&0xFFFF)|((dword)highWord下一个代码执行此任务(解释紧跟其后): 使用寄存器EAX,您将上一个字分配给AX。AX是EAX的下一个字,然后将其向左推16位(SHL),现在上一个字不再在AX中,现在它在EAX的上一个字中。最后,您将下一个

如何将两个单词移动到一个双单词变量中?具体来说,我希望一个单词放在这个变量的上半部分,另一个放在下半部分。

//下面是一些伪代码,假设16位单词大小:

单词lowWord=

单词highWord=

dword组合=((dword)lowWord&0xFFFF)|((dword)highWord下一个代码执行此任务(解释紧跟其后):

使用寄存器EAX,您将上一个字分配给AX。AX是EAX的下一个字,然后将其向左推16位(SHL),现在上一个字不再在AX中,现在它在EAX的上一个字中。最后,您将下一个字分配给AX。使用EAX中的两个字,您可以将值从EAX移动到任何变量


一种干净的方法是使用堆栈

NASM:
 push word [wHigh]
 push word [wLow]
 pop dword [dwResult]

MASM:
 push wHigh
 push wLow
 pop dwResult

这在概念上是正确的,但我相信这个问题需要实际的英特尔汇编代码作为答案。每个支持32位寄存器的CPU也支持
shl eax,16
,因此您应该使用立即计数,而不是将其放在CL中。除此之外,用尼斯图表给出一个不错的答案。同一问题的dword->qword版本:
NASM:
 push word [wHigh]
 push word [wLow]
 pop dword [dwResult]

MASM:
 push wHigh
 push wLow
 pop dwResult