实验10 编写子程序2解决除法溢出的问题

本文通过一个具体的16位汇编语言程序实例,详细解析了如何使用寄存器进行大数除法运算的过程。通过对程序的逐步分析,解释了如何利用AX寄存器的最大值65535来实现复杂除法运算,并展示了如何将结果拆分为高位和低位。

分析:

前面大概都能看懂,主要书那个公式是怎样分析出来的,理解后代码就很简单了。

好比如一个最大存99的数,你要计算1012/3;

先拿出10/3 = 3;注意这个就是余数的最高位

然后剩下(1*100+12)/3,不用说,这个就是低位,你可以笔算来模拟一下你是怎样算出1012/3你就知道我说啥了。


他为什么会有65535这个数字,其实就是ax寄存器最大的数值。

公式X/N中,int那部分就是除数的高位,那么剩下的就是低位了。


assume cs:codesg

codesg segment
start:
	mov ax,4240h
	mov dx,000fh
	mov cx,0Ah
	call divdw

	mov ax,4c00h
	int 21h
	
divdw:
	mov bx,ax
	mov ax,dx
	mov dx,0
	div cx	;计算int的内容
	push ax	;入栈保存高位数
	mov ax,bx
	div cx	;计算后面的内容
	mov cx,dx	
	pop dx	;出站到高位数
	ret

codesg ends
end start

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值