;--------------------------------------------------------------------------------------------
;解决除法溢出的问题:
; 除法溢出
; 1、标准:
; 被除数:
; 如果除数是8位,被除数则为16位,默认放在AX中
; 如果除数是16位,被除数则为32位,在DX和AX中存放,DX存放高16位,AX存放低16位
; 结果:
; 如果除数为8位,则AL存储除法操作的商,AH存储除法操作的余数
; 如果除数为16位,则AX存储除数操作的商,DX存储除法操作的余数
; 2、自定义:
; 被除数位dword型,除数位word型, 结果为dword型
; 参数:
; (ax)=dword型数据的低16位
; (dx)=dword型数据的高16位
; (cx)=除数
; 结果:
; (ax)=结果的低16位
; (dx)=结果的高16位
; (cx)=余数
;--------------------------------------------------------------------------------------------
assume cs:code code segment start: mov ax, start mov ss, ax mov sp, 10h ;栈顶 mov ax, 4240h ;低16位 mov dx, 0fh ;高16位 mov cx, 0ah ;除数 call divdw mov ax, 4c00h int 21h divdw: push ax mov ax, dx ;高16位 mov dx, 0 ; (新组合的32位的被除数)=0000 000fh div cx ;此时(dx)=余数 和 低16位 组合成一个新的32位的被除数 mov bx, ax ;结果的高16位 pop ax ;低16位 div cx mov cx, dx ;余数 mov dx, bx ;结果的高16位 ret code ends end start