汇编实验10-2 解决除法溢出的问题
2015-05-29 21:11
309 查看
代码及注释:
代码截图及结果:
小结:
主要是算法高端~~我没起啥作用
必要的东西都写在上面了。
加油把!
;本程序主要意图为制作一个子程序,实现32位被除数/16位除数因为16位寄存器不够储存 ;而产生除法溢出的情况(如FFFFFFFF/1,16位寄存器ax储存不了32位数据) ;子程序的实现过程在书中实验的提示给了算法,在理解的基础上写出程序即可 ;以下为程序 assume cs:code,ss:stack stack segment db 16 dup (0) stack ends code segment start: mov ax,stack mov ss,ax mov sp,16 ;源程序中这条指令没写,无伤大雅,以上为初始化栈指针指向栈底 mov ax,4240h mov dx,0fh mov cx,0ah ;ax为32位被除数的低16位数据,dx为高16位数据,cx为16位除数 call divdw mov ax,4c00h int 21h ;子程序描述 ;名称:divdw ;功能:进行不会产生溢出的除法运算,被除数dword型,除数word型,结果为dword型 ;参数:(ax)=被除数低16位、(dx)=被除数高16位、(cx)=除数 ;返回:(dx)=结果的高16位、(ax)=结果低16位、(cx)=余数 ;实验提示: ;X:被除数 ;N:除数 ;H:X高16 ;L:X低16 ;int():描述性运算符,取商 ;rem():描述性运算符,取余 ;公式:X/N=int(H/N)*65536+[rem(H/N)*65536+L]/N divdw: push ax mov ax,dx mov dx,0 div cx ;计算H/L,ax中的值为最终结果的高16位(看公式可知) mov si,ax mov di,dx pop ax div cx ;因为dx保存着H/L的余数,可以做公式后面运算的高16位。 ;取出X的低16位 mov cx,dx ;公式后面运算结果的余数给cx mov dx,si ;公式前面的运算结果之前保存给si了
代码截图及结果:
小结:
主要是算法高端~~我没起啥作用
必要的东西都写在上面了。
加油把!
相关文章推荐
- mahout 协同过滤 参数大全
- cc1plus.exe: out of memory allocating 3355443200 bytes
- java多线程基础1
- hdu 2157 从a点走到b点刚好k步的方案数是多少 (矩阵快速幂)
- leetcode 11 -- Container With Most Water
- USACO--3.3A Game+dp
- 关于当前的一点记忆or牢骚
- [Java]交换排序
- leetcode Maximum Gap
- 数字集成电路设计-20-multi-cycle
- 关于错误perhaps the designated entry point is not set的解决方法
- Drbd的概念和安装一
- 盒子模型与定位
- 二叉树的遍历(前序+中序+后序)
- 【转】变色龙启动知识
- import和class关键字的区别
- PhpStorm快捷键设置/个性化设置,如何多项目共存?如何更换主题?
- 黄洁:Intel Spark应用优化和实践经验
- hdu 4291(矩阵快速幂 + 循环节)
- 王爽汇编程序设计练习题