将多个寄存器移动到单个变量中

时间:2015-05-12 21:48:03

标签: assembly x86 nasm 32-bit

我有一个存储在eax中的32位数字和一个存储在ebx中的32位数字。我想将它们组合成.bss部分中定义的64位数字作为finalNum,但我不确定如何。我试过了

Table per Class

但由于某种原因,当我尝试打印出finalNum时,它没有正确打印出来,所以我认为这4行存在问题。这也是32位的。

编辑:

所以我试过

mov esi, finalNum
mov [esi], eax
add esi, 32
mov [esi], ebx

但是,仍然会出现一些奇怪的印刷品,我将finalNum声明为

    mov esi, finalNum
    mov [esi+0], eax
    mov [esi+4], ebx
你认为这可能是个问题吗?

编辑:

    finalNum:   resb 8

正如你所看到的那样,当我繁殖并打印出来时,我会得到一个奇怪的角色。

编辑: 用于打印结果的代码

    Enter first number to multiply:
    34567
    Enter second number to multiply:
    76543
    First Num: 34567
    Second Num: 76543
    Addition: 111110
    Multiply:
    ▒EAX : 0
    EBX : -1649105415
顺便说一句

BUFLENFINAL = 8

2 个答案:

答案 0 :(得分:3)

64位数字的低位字位于finalNum的低4字节,而高位字位于finalNum的高4字节:

mov esi, finalNum   ; Load address of where to store 64-bit number
mov [esi+0], eax    ; Store low 32 bits
mov [esi+4], ebx    ; Store high 32 bits

答案 1 :(得分:0)

替代方案:

  finalNum:  qword  0

    ....

   mov  dword ptr finalNum, eax
   mov  dword ptr finalNum+4, ebx