马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Beng! 于 2012-4-20 00:50 编辑
绞尽脑汁想出来的方法
有点繁琐,不知道谁有比较好的方法 学习一下
我的程序如下:;X/N=int(H/N)*10000H+[rem(H/N)*1000H+L]/N
assume cs:code
stack segment
dw 10 dup (0)
stack ends
code segment
start:mov ax,stack
mov ss,ax
mov sp,20
mov ax,0
mov ax,4240h
mov dx,000fh
mov cx,0ah
call divdw ;(sp)=(x)
mov ax,4c00h
int 21h
divdw:push ax ;(sp)=(x-2)
push dx ;(sp)=(x-4)
;思路是先计算 int(H/N)*10000H的值,再计算[rem(H/N)*1000H+L]/N 的值。
;int(H/N)*10000H=int(H/N)*8000H*2
pop ax ;取出H ;(sp)=(x-2)
mov dx,0 ;初始化DX
div cx ;H/N 取商ax=1,dx=5
mov bx,8000h
mul bx ;高位dx,低位ax
sub sp,2 ;(sp)=(x-4)
push dx ;保存高位dx,(sp)=(sp-6)
mov bx,2
mul bx ;高位dx1,低位ax1(一定为0)
pop ax ;取出dx,(sp)=(x-4)
push dx ;保存dx1,(sp)=(sp-6)
mul bx ;高位dx2(一定为0),低位ax2
pop bx ;(sp)=(x-4)
add ax,bx ;完成 int(H/N)*1000H
push ax ;保存 int(H/N)*1000H 的值,(sp)=(x-6)
add sp,2 ;(sp)=(x-4)
pop ax ;取出H(sp)=(x-2)
div cx ;取余数 dx
mov ax,dx
mov bx,8000h
mul bx ;高位dx,低位ax
sub sp,4 ;(sp)=(x-6)
push dx ;保存高位dx,(sp)=(x-8)
mov bx,2
mul bx ;高位dx1,低位ax1(一定为0)
pop ax ;取出dx,(sp)=(x-6)
push dx ;保存dx1,(sp)=(x-8)
mul bx ;高位dx2(一定为0),低位ax2
pop bx ;(sp)=(x-6)
add ax,bx ;完成 rem(H/N)*1000H
add sp,4 ;(sp)=(x-2)
mov dx,ax ;将高位转移到dx
pop ax ;取出L(sp)=(x),完成[rem(H/N)*1000H+L]
div cx ;[rem(H/N)*1000H+L]/N
sub sp,6 ;(sp)=(x-6)
pop dx ;(sp)=(x-4)
add sp,4 ;(sp)=(x)
ret
code ends
end start
|