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

 我来答
10伯乐01
推荐于2016-03-15 · TA获得超过501个赞
知道小有建树答主
回答量:95
采纳率:0%
帮助的人:104万
展开全部
二进制的除法本质是通过重复减法运算实现
即通过重复”从被除数的高位依次取出每一位, 被取出的数据加上上次的减法结果*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
追问
我能发个程序给你吗,帮忙看下,在问我看不懂的地方,可以吗,搞不懂我睡觉都睡不着啊。象你这样的人太好了
追答
这个我也是网上找的  你把程序给我看看   我也不保证能会  

邮箱:tzj021036@163.com
Wohatel
2015-12-22 · 超过14用户采纳过TA的回答
知道答主
回答量:34
采纳率:0%
帮助的人:7.2万
展开全部
首先,首先你要明白你看这个是为何?考试还是工作? 如果是考试,那么你继续看下去,如果是工作!呵呵,劝你别看这个知识点啦,完全没有用,工作中遇到这样的问题比你你中彩票概率还低,劝你研究下一个知识点...........
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式