The following tutorial explains how to divide large numbers with assembly language and where the results end up.
Numbers are most commonly divided by smaller numbers. (e.g., A 16-bit number is divided by an 8-bit number.)
The numerator must be placed in specific registers, and the denominator is supplied as a single operand.
This example takes a possible 32-bit number and shows how to move its contents to the correct 16- bit registers.
XOR EDX,EDX ;clear EDX
;place number to be divided into EDX (32-bit)
XOR CX,CX ;clear CX
;place 16-bit denomenator into CX
do_division:
mov AX,DX ;move least significant bits to AX
shr EDX,16 ;shift most significant bits to DX
div CX ;divide DX:AX by CX
;quotient in AX
;remainder in DX
Sixteen-bit numbers are, of course, easier to manage as there is no bit shifting involved since DH and DL are available directly.
Thus, if this result were a fraction, the solution would be AX + DX / CX, where DX/CX is the remainder over the divisor as the fractional part of the solution.
Questions/Comments: [email protected]