# Assembly: Division

Posted June 15, 2006 by William_Wilson in Computer programming

Last Updated on

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.