解决除法溢出的问题

;--------------------------------------------------------------------------------------------
;解决除法溢出的问题:
; 除法溢出
;  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
原文地址:https://www.cnblogs.com/qintangtao/p/2860109.html