 MUL, IMUL Divide Overflow and Sign Exten DIV, IDIV ## Using Division Instructions:

The DIV instruction divides unsigned numbers, and IDIV divides signed numbers. Both return a quotient and a remainder. Table 4.1 summarizes the division operations. The dividend is the number to be divided, and the divisor is the number to divide by. The quotient is the result. The divisor can be in any register or memory location but cannot be an immediate value.

 Size of Operand Dividend Register Size of Divisor Quotient Remainder 16 bits AX 8 bits AL AH 32 bits DX:AX 16 bits AX DX 64 bits (80386and 80486) EDX:EAX 32 bits EAX EDX

Table: Division Operations

Unsigned division does not require careful attention to flags. The following examples illustrate signed division, which can be more complex.

 signed division ``` .DATA mem16 SWORD -2000 mem32 SDWORD 500000 .CODE . . . ; Divide 16-bit unsigned by 8-bit mov ax, 700 ; Load dividend 700 mov bl, 36 ; Load divisor DIV 36 div bl ; Divide BL ------ ; Quotient in AL 19 ; Remainder in AH 16 ; Divide 32-bit signed by 16-bit mov ax, WORD PTR mem32 ; Load into DX:AX mov dx, WORD PTR mem32 ; 500000 idiv mem16 ; DIV -2000 ; Divide memory ------ ; Quotient in AX -250 ; Remainder in DX 0 ; Divide 16-bit signed by 16-bit mov ax, WORD PTR mem16 ; Load into AX -2000 cwd ; Extend to DX:AX mov bx,-421 ; DIV -421 idiv bx ; Divide by BX ----- ; Quotient in AX 4 ; Remainder in DX -316 ```

If the dividend and divisor are the same size, sign-extend or zero-extend the dividend so that it is the length expected by the division instruction. See “Extending Signed and Unsigned Integers,” later in this unit.