assume cs:code,ds:data
data segment
dd 4 dup(0)
data ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,4240h
mov dx,0fh
mov cx,0ah
call divdw
mov ax,4c00h
int 21h
divdw:
mov si,0
mov [si],ax
mov [si+2],dx
mov [si+4],cx ;被除数低16位(ax),低16位(dx),除数(cx)传送到data段中
mov ax,dx
mov dx,0
div cx
mov dx,0 ;计算int(h/n)
mul 65536 ;65536??这一乘不就是32位乘32位64位了?是不是错了(过不了编译65536溢出)
mov [si+6],ax
mov [si+8],dx ;保存int(h/n)*65536的值
mov ax,[si+2]
mov dx,0
div cx
mov ax,dx
mov dx,0
mul 65536
add ax,[si]
adc dx,0
div cx ;计算[rem(h/n)*65536+l]/n
add ax,[si+6]
adc dx,[si+8]
ret
code ends
end start |