二进制除法移位相减_在汇编除法中:移位相减是怎么样的原理啊,程序看了几天了还是看不懂,哪位兄弟告诉我,本人感激涕零...
满意答案
jinqun138
2013.05.24
采纳率:42% 等级:12
已帮助:6963人
二进制的除法本质是通过重复减法运算实现
即通过重复”从被除数的高位依次取出每一位, 被取出的数据加上上次的减法结果*2,
然后减去除数”的处理, 求出除法结果
假设:16位除以16位
被除数 R0R1 (占用2字节)
除数 R2R3 (占用2字节)
商 R0R1 (占用2字节) ******************* 这里需要说明, 此程序执行
结束以后, 商的结果保存在被除数中 ************
余数 R4R5 (占用2字节)
移位次数 R6 (占用1字节) ******************* 这里需要说明, 其数值根据
被除数的位数定义, 这里为32 *************
操作流程如下:
a) 余数清零
b) 判断除数是否为0, 如果为0, 是错误, 不再往下执行.
c) 设定移位次数
d) 被除数左移1位, 溢出的最高位保存在进位标志C中, 再把余数左移1位, 把C(被除数溢出的最高位)放入余数的最低位
e) 余数与除数比较大小(余数减去除数):
余数 ≥ 除数(减法结果为正)时, 被除数的最低位, 赋值 1
余数 < 除数(减法结果为负时, 恢复到减法前的余数) 被除数的最低位, 赋值 0
f) 定移位次数递减
g) 直到移位次数为0, 否则重复d) ~ f)
假设32位除以16位
被除数R3R2R1R0
除数R5R4
余数R7R6
商也在R3R2R1R0中
计算开始的时候R7R6R3R2R1R0整体左移一位
然后余数R7R6与除数比较 如果大于除数 则r0最低位置一
依次循环32次
其他的多位除法类似 但是余数位数和除数位数要一致
; (r3r2r1r0) / (r5r4), 余数(r7r6)
div_4b: mov r7,#0
mov r6,#0
push cnt
mov cnt,#32
clr c
div_32_loop: mov a,r0
rlc a
mov r0,a
mov a,r1
rlc a
mov r1,a
mov a,r2
rlc a
mov r2,a
mov a,r3
rlc a
mov r3,a
mov a,r6
rlc a
mov r6,a
mov a,r7
rlc a
mov r7,a
clr c
mov a,r6
subb a,r4
mov b,a
mov a,r7
subb a,r5
jc div_4b_1
mov r6,b
mov r7,a
div_32: cpl c
djnz count,div_32_loop
mov a,r0
rlc a
mov r0,a
mov a,r1
rlc a
mov r1,a
mov a,r2
rlc a
mov r2,a
mov a,r3
rlc a
mov r3,a
pop cnt
ret
第二种方法 循环相减
移位相减的方法是仿照人们做除法的竖式编写,执行速度较快,但是计算的原理,一般人不好理解,难以让大家推广到更多的字节。故此下面采用循环相减的思路来编写程序。
设计思路:所谓除法,就是要求出在被除数中,含有多少个除数。那么就用被除数连续的减去除数,直到不够减为止,够减的次数,就是商,不够减的数值,就是余数。
比如:8/3,就是
第1次:8-3=5
第2次:5-3=2
2不够减3了,故8/3=2余2
下列程序,对数值范围的要求很宽松,被除数、除数和商,都可以是16位数,这比网上常见的16位除8位的除法程序,适用面要广得多。
注意,除数为0的问题,应该在主程序中进行检测。
;-------------------------------------
;16位/16位的子程序
;被除数:R2R3、除数:R4R5;商:DPTR、余数:R2R3。
;占用:A、B。
;-------------------------------------
R23DIVR45:
MOV DPTR, #0
D_LOOP:
CLR C
MOV A, R3
SUBB A, R5
MOV B, A
MOV A, R2
SUBB A, R4 ;R2R3-R4R5
JC DIV_E ;有借位转移
INC DPTR
MOV R3, B
MOV R2, A
SJMP D_LOOP
DIV_E:
RET ;不够减就结束
;-------------------------------------
;完
你看看是否对你有帮助。
http://blog.sina.com.cn/s/blog_4522f0b80100lvc7.html
11分享举报
二进制除法移位相减_在汇编除法中:移位相减是怎么样的原理啊,程序看了几天了还是看不懂,哪位兄弟告诉我,本人感激涕零...相关推荐
- python 生成器 原理_你知道python中的函数、生成器的工作原理吗?
1.python中函数的工作原理 python的解释器,也就是python.exe(c编写)会用PyEval_EvalFramEx(c函数)运行foo()函数 首先会创建一个栈帧(stack Fram ...
- java整数的因式分解_如何在Java中找到整数的质数-因式分解
java整数的因式分解 编程课程中的常见家庭作业/任务之一是关于Prime Factorization. 要求您编写一个程序以找到给定整数的素因子 . 一个数字的素数因子是将精确地除以给定数字的所有素 ...
- mysql中日期相减_解放双手!用这3个日期函数解决入职、工龄等天数的计算
人事部门员工的入职天数.财务部门合同的到期剩余天数等等,可以通过Excel表格来实现自动计算功能. 今天小编分享三个与日期有关的函数 一.EDATE函数 很多公司新员工入职会有3个月试用期,根据入职日 ...
- python列表两两相减_用Python做打字软件,让你的打字快如闪电!附超详解和源码链接
版本正在更新--,目前1.3.2 项目结果 GIF制作十分粗劣,自己看着都揪心,不过基本看清楚了 详细解释 下面我会详细解释一下,如果不看,就不看吧,直接向下看源码,传送门 基本结构+标题标签+提示+ ...
- excel日期相减去除周末_仅在Excel中允许周末日期
excel日期相减去除周末 With Excel Data Validation, you can add rules to a data entry sheet, and control what ...
- 更相减损术程序设计c语言,更相减损术
本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 更相减损术是出自<九章算术>的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合 ...
- string类型加减_测试人员应该知道的Redis知识(四) String
一.概述 完整的说,应该是Binary-safe string,二进制安全字符串.从官网内容我们可以看到,String类型是最简单的一种数据类型,和Memcached的类型一致,一个key对应一个va ...
- 两个多精度十进制数加法程序设计_初中数学之有理数的加减,学会加法,减法即会,掌握技巧轻松计算...
学习了有理数中的相关知识点,关于有理数的加减运算,也是考试中必考的内容,尤其是对于刚进入初中的学生来说,小数的时候学的加减法,到了初中突然发现数字前面有带符号了,其实整体而言,小学时候学的加减运算法则 ...
- 小学生计算机辅助教学系统--练习加,减,乘,除法
一.前言 最近几天,老师布置一个小学生计算机辅助教学系统–练习加,减,乘,除法的作业要我们实现,我花费了几个小时把它干完了,本想拿这个小项目练练手,因为要考研了,复习复习C语言.没有想到这个项目涉及到 ...
最新文章
- python实现条件匹配_python3 re如何匹配满足条件的选项?
- 软件开发的核心是技术人员吗?
- 微信小程序富文本rich-text使用详解-微信小程序系统学习攻略​
- php 参数 问号_php获取不到url问号之后的参数
- 学python需要什么基础-学习Python需要哪些基础知识?
- MariaDB 在 RedHat Linux 上的安装过程以及 MySQL 相关命令的使用
- 黑苹果OC配置工具 OpenCore Configurator 2.25中文版
- 百度 AI Studio 车牌识别
- 上传任意文件或者上传漏洞
- 运用Excel实现描述性统计分析
- Dialog去掉默认白色背景
- 灵遁者组诗:无数个存在的可能
- Python批量爬取谷歌原图,2021年最新可用版
- 达梦数据库一些基础的SQI语句
- linux安装vsftpd
- python爬虫:scrapy-redis分布式爬虫(详细版)
- OGG-01008 Extract displays Discarding bad record (discard recs=1) when using filter or where clause
- 史上最全 人工智能AI、黑客电影、网络安全题材电影最全合集
- HTML5七夕情人节表白网页(雪花爱心表白) HTML+CSS+JS 求婚 html生日快乐祝福代码网页 520情人节告白代码 程序员表白源码 抖音3D旋转相册 js烟花代码 css爱心表白
- Python中strip用法