满意答案

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分享举报

二进制除法移位相减_在汇编除法中:移位相减是怎么样的原理啊,程序看了几天了还是看不懂,哪位兄弟告诉我,本人感激涕零...相关推荐

  1. python 生成器 原理_你知道python中的函数、生成器的工作原理吗?

    1.python中函数的工作原理 python的解释器,也就是python.exe(c编写)会用PyEval_EvalFramEx(c函数)运行foo()函数 首先会创建一个栈帧(stack Fram ...

  2. java整数的因式分解_如何在Java中找到整数的质数-因式分解

    java整数的因式分解 编程课程中的常见家庭作业/任务之一是关于Prime Factorization. 要求您编写一个程序以找到给定整数的素因子 . 一个数字的素数因子是将精确地除以给定数字的所有素 ...

  3. mysql中日期相减_解放双手!用这3个日期函数解决入职、工龄等天数的计算

    人事部门员工的入职天数.财务部门合同的到期剩余天数等等,可以通过Excel表格来实现自动计算功能. 今天小编分享三个与日期有关的函数 一.EDATE函数 很多公司新员工入职会有3个月试用期,根据入职日 ...

  4. python列表两两相减_用Python做打字软件,让你的打字快如闪电!附超详解和源码链接

    版本正在更新--,目前1.3.2 项目结果 GIF制作十分粗劣,自己看着都揪心,不过基本看清楚了 详细解释 下面我会详细解释一下,如果不看,就不看吧,直接向下看源码,传送门 基本结构+标题标签+提示+ ...

  5. excel日期相减去除周末_仅在Excel中允许周末日期

    excel日期相减去除周末 With Excel Data Validation, you can add rules to a data entry sheet, and control what ...

  6. 更相减损术程序设计c语言,更相减损术

    本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 更相减损术是出自<九章算术>的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合 ...

  7. string类型加减_测试人员应该知道的Redis知识(四) String

    一.概述 完整的说,应该是Binary-safe string,二进制安全字符串.从官网内容我们可以看到,String类型是最简单的一种数据类型,和Memcached的类型一致,一个key对应一个va ...

  8. 两个多精度十进制数加法程序设计_初中数学之有理数的加减,学会加法,减法即会,掌握技巧轻松计算...

    学习了有理数中的相关知识点,关于有理数的加减运算,也是考试中必考的内容,尤其是对于刚进入初中的学生来说,小数的时候学的加减法,到了初中突然发现数字前面有带符号了,其实整体而言,小学时候学的加减运算法则 ...

  9. 小学生计算机辅助教学系统--练习加,减,乘,除法

    一.前言 最近几天,老师布置一个小学生计算机辅助教学系统–练习加,减,乘,除法的作业要我们实现,我花费了几个小时把它干完了,本想拿这个小项目练练手,因为要考研了,复习复习C语言.没有想到这个项目涉及到 ...

最新文章

  1. python实现条件匹配_python3 re如何匹配满足条件的选项?
  2. 软件开发的核心是技术人员吗?
  3. 微信小程序富文本rich-text使用详解-微信小程序系统学习攻略​
  4. php 参数 问号_php获取不到url问号之后的参数
  5. 学python需要什么基础-学习Python需要哪些基础知识?
  6. MariaDB 在 RedHat Linux 上的安装过程以及 MySQL 相关命令的使用
  7. 黑苹果OC配置工具 OpenCore Configurator 2.25中文版
  8. 百度 AI Studio 车牌识别
  9. 上传任意文件或者上传漏洞
  10. 运用Excel实现描述性统计分析
  11. Dialog去掉默认白色背景
  12. 灵遁者组诗:无数个存在的可能
  13. Python批量爬取谷歌原图,2021年最新可用版
  14. 达梦数据库一些基础的SQI语句
  15. linux安装vsftpd
  16. python爬虫:scrapy-redis分布式爬虫(详细版)
  17. OGG-01008 Extract displays Discarding bad record (discard recs=1) when using filter or where clause
  18. 史上最全 人工智能AI、黑客电影、网络安全题材电影最全合集
  19. HTML5七夕情人节表白网页(雪花爱心表白) HTML+CSS+JS 求婚 html生日快乐祝福代码网页 520情人节告白代码 程序员表白源码 抖音3D旋转相册 js烟花代码 css爱心表白
  20. Python中strip用法

热门文章

  1. mysqlsum绝对值_MySQL数据库中如何求一个数的绝对值(abs函数)呢?
  2. @Mock,@Spy和@InjectMock
  3. TRACE32——常用操作
  4. 统计一段时期内股票的涨幅情况
  5. 趣谈5W2H | 被冷落的经典分析法!
  6. 无线网络慢应该怎么解决
  7. 通过一致性评价的仿制药和原研药“一样”吗
  8. Linux 中卷组不真实存在情况下,强制删除卷组及其PV信息
  9. 复数四则运算(PTA)
  10. php有关error的处理