【汇编】dword型除法

被除数为dword弄,除数为word型,结果为dword型

参数:

(ax)=dword型数据的低16位

(dx)=dword型数据的高16位

(cx) =word型除数

返回:

(dx)=结果的高16位,(ax)=结果的低16位

(cx)=余数

公式:X/N = int(H/N)*65536 + [rem(H/N)*65536 + L]/N
X:被除数
N:除数
H:被除数高16位
L:被除数低16位
int:描述性运算符,取商,如int(38/10)=3
rem:描述性运算符,取余,如rem(38/10)=8

分析:
1.a=int(H/N)*65536的值是32位的,b=[rem(H/N)*65536 + L]/N的值是16位的,a+b相当于将a的值放入dx,将b的值放入ax
2.分别计算a和b的值,然后相加

assume cs:code code segment start: mov ax,4240h mov dx,0fh mov cx,0ah call divdw mov ax,4c00h int 21 divdw:mov bx,ax mov ax,dx mov dx,0 div cx ;H/N push ax ;保存最终结果的高16位值 mov ax,bx ;将被除数的低16位值存入ax div cx ;此时,dx保存着上一步的余数,因此当前dx,ax的组合刚好可以表示[rem(H/N)*65536 + L] ;div cx相当于[rem(H/N)*65536 + L]/N ;div cx后dx保存着最终结果的余数,ax存着最终结果的低16位 mov cx,dx ;因为返回值要求余数保存在cx中,因此进行此步 pop dx ;把保存的最终结果的高16位赋予dx ;现在返回值ax,cx,dx都有正确值拉,返回 ret code ends end start



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值