除法

Tutorial: 汇编基础 Category: C语言 Published: 2026-04-07 13:58:26 Views: 20 Likes: 0 Comments: 0
1. 除法的存储
除数:8bit / 16bit   存在在内存单元或者寄存器中
被除数:AX 或者 AX 和 DX 中
    如果除数为 8bit 则被除数为16bit, 存放在AX中
    如果除数为 16bit 则被除数为32bit, AX存放低16位, DX存放高16bit
结果:
     如果除数为 8bit, AL存商,AH存余数
     如果除数为 16bit, AX存商,DX存余数

例如:div bx
      bx 是 16bit 寄存器, 则被除数在AX和DX中,除过之后, AX存商, DX存余数

    div byte ptr ds:[0]   8bit
    div word ptr ds:[0]   16bit

-r
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0DC0  ES=0DC0  SS=0DC0  CS=0DC0  IP=0100   NV UP EI PL NZ NA PO NC
0DC0:0100 0000          ADD     [BX+SI],AL                         DS:0000=CD
-a
0DC0:0100 mov ax,a
0DC0:0103 mov bx,3
0DC0:0106 div bx
0DC0:0108
-r
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0DC0  ES=0DC0  SS=0DC0  CS=0DC0  IP=0100   NV UP EI PL NZ NA PO NC
0DC0:0100 B80A00        MOV     AX,000A
-t

AX=000A  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0DC0  ES=0DC0  SS=0DC0  CS=0DC0  IP=0103   NV UP EI PL NZ NA PO NC
0DC0:0103 BB0300        MOV     BX,0003
-t

AX=000A  BX=0003  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0DC0  ES=0DC0  SS=0DC0  CS=0DC0  IP=0106   NV UP EI PL NZ NA PO NC
0DC0:0106 F7F3          DIV     BX
-t

AX=0003  BX=0003  CX=0000  DX=0001  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0DC0  ES=0DC0  SS=0DC0  CS=0DC0  IP=0108   NV UP EI PL NZ NA PO CY
0DC0:0108 0000          ADD     [BX+SI],AL                         DS:0003=AD
2. 100001 / 100
# 如果除数为 16bit 则被除数为32bit, AX存放低16位, DX存放高16bit
# AX 最大 FFFF = 65535  100001 = 186A1(H) 100 = 64(H)
# AX = 86A1             DX = 1

-a
0DC0:0100 mov ax,86a1
0DC0:0103 mov dx,1
0DC0:0106 mov bx,64
0DC0:0109 div bx
0DC0:010B
-r
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0DC0  ES=0DC0  SS=0DC0  CS=0DC0  IP=0100   NV UP EI PL NZ NA PO NC
0DC0:0100 B8A186        MOV     AX,86A1
-t

AX=86A1  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0DC0  ES=0DC0  SS=0DC0  CS=0DC0  IP=0103   NV UP EI PL NZ NA PO NC
0DC0:0103 BA0100        MOV     DX,0001
-t

AX=86A1  BX=0000  CX=0000  DX=0001  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0DC0  ES=0DC0  SS=0DC0  CS=0DC0  IP=0106   NV UP EI PL NZ NA PO NC
0DC0:0106 BB6400        MOV     BX,0064
-t

AX=86A1  BX=0064  CX=0000  DX=0001  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0DC0  ES=0DC0  SS=0DC0  CS=0DC0  IP=0109   NV UP EI PL NZ NA PO NC
0DC0:0109 F7F3          DIV     BX
-t

AX=03E8  BX=0064  CX=0000  DX=0001  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0DC0  ES=0DC0  SS=0DC0  CS=0DC0  IP=010B   NV UP EI PL NZ NA PO CY
0DC0:010B 0000          ADD     [BX+SI],AL                         DS:0064=20

03E8 = 1000
3. 1001 / 100
如果除数为 8bit 则被除数为16bit, 存放在AX中
如果除数为 8bit, AL存商,AH存余数
1001 = 03E9H     100 = 64H

-r
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0DC0  ES=0DC0  SS=0DC0  CS=0DC0  IP=0100   NV UP EI PL NZ NA PO NC
0DC0:0100 B8A186        MOV     AX,86A1
-a
0DC0:0100 mov ax,3E9
0DC0:0103 mov bl,64
0DC0:0105 div bl
0DC0:0107
-r
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0DC0  ES=0DC0  SS=0DC0  CS=0DC0  IP=0100   NV UP EI PL NZ NA PO NC
0DC0:0100 B8E903        MOV     AX,03E9
-t

AX=03E9  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0DC0  ES=0DC0  SS=0DC0  CS=0DC0  IP=0103   NV UP EI PL NZ NA PO NC
0DC0:0103 B364          MOV     BL,64
-t

AX=03E9  BX=0064  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0DC0  ES=0DC0  SS=0DC0  CS=0DC0  IP=0105   NV UP EI PL NZ NA PO NC
0DC0:0105 F6F3          DIV     BL
-t

AX=010A  BX=0064  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0DC0  ES=0DC0  SS=0DC0  CS=0DC0  IP=0107   NV UP EI PL NZ NA PO CY
0DC0:0107 64            DB      64