;X/N=int(H/N)*65536+[rem(H/N)*65536+L]/N
;---------------------------------------
assume cs:code
code segment
start:
mov ax,4240h
mov dx,0fh
mov cx,0ah
call divdw
mov ax,4c00h
int 21h
;************
divdw:
mov bx,ax ;用bx存储被除数低16位
mov ax,dx
mov dx,0 ;为被除数高16位H除以除数N做准备
div cx
mov si,ax ;用si存储int(H/N)
mov ax,bx ;恢复被除数低16位
div cx ;dx=rem(H/N),ax=L 此时ax为X/N的低16位
mov cx,dx ;X/N的余数放在cx
mov dx,si ;X/N的高16位放在dx
ret
;*************
code ends
end start
- [huangbeidu] 哦 原来这样 07/05 22:27
- [游客] h回答正确。 07/02 08:18
- [游客] 每一个command窗口都是一个独立的模拟dos环境的,所以,关闭窗口后,这个环境就消失了,你在这个 07/02 08:12
- [huangbeidu] 有点不明白为什么关闭窗口后 再运行除法溢出的程序 还是老样子 怎么让它常驻内存? 07/02 00:15
- [huangbeidu] 是 SF应该是0的 06/05 02:20
- [tomato] Right! 05/31 18:19
- [tomato] 第一题的最后一条指令的答案写错了。建议上机验证一下。 05/31 18:18
- [huangbeidu] 这个是不算精简版的精简版了 代码是没有少多少 就是嫌以前的那个程序把数据段改成那样 在实际的操作中恐 05/14 17:29
- [游客] 可以参考前面的那个不会溢出的除法处理方式来想想这个程序怎么去支持dx为非0的数据显示,让显示的数据超 04/29 10:31
- [游客] 绝对有帮助。 04/28 11:47
[ huangbeidu 发表于 2009-04-23 17:44 ]
貌似又忘记保存相关寄存器
[ younggay 发表于 2009-04-24 10:45 ]
貌似又忘记保存相关寄存器
=============
只在一个子程序中使用的寄存器,不涉及到最为返回参数存放的寄存器,应该在子程序中进行临时保存和释放的操作,以免对之后的程序有影响。
博主意识到了,为什么不做了呢。