如何将两个单词转换为双字变量?

时间:2015-03-20 04:42:12

标签: assembly x86

如何将两个单词转换为双字变量?具体来说,我希望在这个变量的上半部分有一个单词,而另一个单词则在下半部分。

3 个答案:

答案 0 :(得分:2)

下一个代码完成工作(后面的解释):

.stack 100h
.data

upper dw 195
lower dw 22

.code
  mov  ax, @data
  mov  ds, ax

;MOVE TWO WORDS TO ONE DWORD.
  mov  ax,  upper
  mov  cl,  16
  shl  eax, cl
  mov  ax,  lower

  mov ax, 4c00h
  int 21h

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

enter image description here

答案 1 :(得分:1)

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

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

MASM:
 push wHigh
 push wLow
 pop dwResult

答案 2 :(得分:0)

//这是一些PSEUDO代码,假设16位字大小:

单词lowWord =?;

单词highWord =?;

dword combined =((dword)lowWord& 0xFFFF)| (((dword)highWord<<< 16& 0xFFFF0000);

//注意:可能不需要使用0xFFFF和0xFFFF0000进行屏蔽