实验二:解决除法溢出
assume cs:code, ss:stack
stack segment
dw 8 dup(0)
stack ends
code segment
start:
mov ax, stack ;初始化栈
mov ss, ax
mov sp, 16
mov ax, 0ffffH ;被除数低位
mov dx, 0ffffH ;被除数高位
mov bx, 1 ;除数
call div_ext ;调用除法
mov ax, 4c00H
int 21H
div_ext:
push ax ;保存被除数低位
mov ax, dx ;将高位移入ax
mov dx, 0 ;将高位置0
div bx ;计算int(H/N), 得rem(H/N)=dx
pop cx ;将被除数低位取出
push ax ;保存int(H/N)的结果
mov ax, cx ;将被除数低位移入ax
div bx ;计算(rem(H/N)*65536+L) / N
mov cx, dx ;将余数保存到cx
pop dx ;将保存的商的高位送入dx
ret