Moving from DX:AX register to single 32 bit register

前端 未结 2 1119
不思量自难忘°
不思量自难忘° 2021-01-26 05:13

I\'m having a problem adding to a product of a 16 bit multiplication. I want to multiply a year such as 2015, by 365 to do so I

mov dx, 0    ; to clear the regis         


        
相关标签:
2条回答
  • 2021-01-26 05:21

    The usual method is to use a 32 bit multiply to start with. It's especially easy if your factor is a constant:

    movzx ecx, cx      ; zero extend to 32 bits
                       ; you can omit if it's already 32 bits
                       ; use movsx for signed
    imul ecx, ecx, 365 ; 32 bit multiply, ecx = ecx * 365
    

    You can of course also combine 16 bit registers, but that's not recommended. Here it is anyway:

    shl edx, 16 ; move top 16 bits into place
    mov dx, ax  ; move bottom 16 bits into place
    

    (There are other possibilities too, obviously.)

    0 讨论(0)
  • 2021-01-26 05:45
    mov dx, 0    ; to clear the register
    mov ax, cx   ; cx holds the year such as 2015
    mov dx, 365  ; to use as multiplier
    mul dx       ; multiply dx by ax into dx:ax
    

    You can start by simplifying this code (You don't need to clear any register before doing the multiplication):

    mov  ax, 365
    mul  cx       ; result in dx:ax
    

    Next to answer your title question and have the result DX:AX moved into a 32-bit register like EAX you could write:

    push dx
    push ax
    pop  eax
    
    0 讨论(0)
提交回复
热议问题