x86 assemblée de multiplier et de diviser l'instruction des opérandes, 16 bits et plus

Je suis un peu confus sur la façon dont le multiplier et diviser des opérations de travaux en x86 assemblée. Par exemple, le code ci-dessous ne semble pas trop difficile car les traite avec 8 bits.

8-Bits De Multiplication:

; User Input:
; [num1], 20
; [num2] , 15

mov    ax, [num1]    ; moves the 8 bits into AL
mov    bx, [num2]    ; moves the 8 bits into BL

mul    bl            ; product stored in AX

print  ax

Mais ce qui arrive quand vous voulez multiplier deux nombres 16 bits? Comment multiplier deux 16 bits numéros de la même manière comme il a été fait avec les 8 bits les nombres?

Je suis confus quant à ce que les registres les valeurs seront stockées. Auraient-ils être stockés dans AL et AH ou serait-il simplement stocker le 16-nombre de bits dans AX. Pour montrer ce que je veux dire:

; User Input:
; [num1], 20
; [num2], 15

mov    eax, [num1]    ; Does this store the 16-bit number in AL and AH or just in AX
mov    ebx, [num2]    ; Does this store the 16-bit number in BL and BH or just in BX

mul    ???            ; this register relies on where the 16-bit numbers are stored

print  eax

Quelqu'un pourrait-il élaborer un peu sur la façon dont la multiplication et la division de marche? (plus précisément, avec 16 bits et 32 bits des nombres? Aurais-je besoin de faire pivoter bits si les valeurs sont stockées dans le bas de l'AL et AH?

Ou peut-on simplement mov num1 et num2 en ax et bx, respectivement, et puis les multiplier pour obtenir le produit dans eax?

Avez-vous essayez de lire le documentation?

OriginalL'auteur StartingGroovy | 2012-03-20