《汇编语言》 王爽版 实验10-2应用实例
2017-11-04 16:30
369 查看
问题描述:解决除法溢出的问题
功能:进行不会产生溢出的除法运算,被除数为dword型,除数为word型,结果为dword型
参数:(ax)=dword型数据的低16位
(dx)=dword型数据的高16位
(cx)=除数
返回:(ax)=商的低16位
(dx)=商的高16位
(cx)=余数
公式:X/N = int(H/N)*65536+[rem(H/N)*65536+L]/NX:被除数,范围:[0, FFFFFFFF]
N:除数,范围:[0, FFFF]
H:X高16位,范围:[0, FFFF]
L:X低16位,范围:[0, FFFF]
int():描述性运算符,取商,比如,int(38/10)=3
rem():描述性运算符,取余数,比如,rem(38/10)=8
注意:1.以cx存储除数,除数为16位,根据div使用,ax存储商,dx存储余数
2.公式解析:65536=10000H=2^16
格式中*65536意思是向左移16位,即移向高位。因此,int(H/N)为计算结果的高位,根据要求,结果存入dx。rem(H/N)*65536将高位运算中的余数放入低位运算中的高位上,即进行[rem(H/N)*65536+L]/N运算是
将rem(H/N)放入dx中,将L放入ax中的div运算。
结果:DX中存放int(H/N),AX中存放(rem(H/N)*65536+L)/N的商,CX中存放(rem(H/N)*65536+L)/N的余数
assume cs:code code segment start: mov ax,4240H mov dx,000FH mov cx,0AH call divdw mov ax,4c00h int 21h ;;解决除法溢出问题,注意入栈出栈顺序 divdw: push ax ;将ax入栈,这样进行除法运算时,更改ax数值对后面ax计算没有影响 mov ax,dx mov dx,0 div cx mov bx,cx mov cx,dx mov dx,ax pop ax push dx ;将dx入栈,因为进行16位除数运算时,dx存储余数 mov dx,cx div bx mov cx,dx pop dx ret code ends end start
链接中文章讲得更清楚
http://www.cnblogs.com/cxjchen/archive/2013/03/19/2968824.html
相关文章推荐
- 《汇编语言》王爽版 实验10-1 应用举例
- 10、王爽《汇编语言》笔记_实验12
- 王爽《汇编语言》实验13:编写、应用中断例程 - 打印字符串 解答
- 《汇编语言(王爽)》(第八章、实验7寻址方式在结构化数据访问中的应用)学习笔记
- 王爽《汇编语言》实验10:编写子程序show_str 解答
- 王爽《汇编语言》实验10:编写子程序dtoc 解答
- 王爽《汇编语言》实验10:编写子程序divdw 解答
- 《汇编语言》王爽第三版 - 实验10
- 王爽《汇编语言》实验13——编写、应用中断例程
- 汇编语言(王爽)--实验13编写,应用中断历程
- 王爽《汇编语言》实验10:编写子程序show_str
- 王爽《汇编语言》实验10:编写子程序divdw 解答
- 王爽《汇编语言》第10章 实验10 编写子程序
- 王爽《汇编语言》实验13:编写、应用中断例程 - 模拟loop 解答
- 《汇编语言》(第三版)王爽第八章实验7个人方法记录
- 3、王爽《汇编语言》笔记_实验6
- 汇编语言 第三版 王爽 实验10 显示字符串 show_str 独立完成
- 实验10 防病毒软件的应用与部署
- 汇编语言 第三版 王爽 实验10-1 编写子程序 之 显示字符串
- 王爽《汇编语言》实验15 安装新的int 9中断例程