|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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
复制代码
|
|