通过移位相减法实现汇编程序4字节数除以1字节数

梦想不抛弃苦心追求的人,只要不停止追求,你们会沐浴在梦想的光辉之中。再美好的梦想与目标,再完美的计划和方案,如果不能尽快在行动中落实,最终只能是纸上谈兵,空想一番。只要瞄准了大方向,坚持不懈地做下去,才能够扫除挡在梦想前面的障碍,实现美好的人生蓝图。通过移位相减法实现汇编程序4字节数除以1字节数,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

通过移位相减法实现汇编程序4字节数除以1字节数


1.移位相减法原理

与手动计算相似,以1110/10为例:

在手动计算时,我们会先看最高位(MSB),若比除数小则看前两位,大则减除数,然后看余数,以此类推直到最后看到LSB(最低位);而上述算法道理一样,1110左移进前四位目的就在于从1110本身的MSB开始看起,移4次则是看到LSB为止,期间若比除数大,则减去除数,注意减完以后正是此时所剩的余数。而商的末尾添加了0或1,只要比除数大,商就是1,而商0则是直接左移了,因为移位会自动补0。商值会随着1110继续左移,新的商值会继续加到末尾。经过比对会发现移4位后左右两边分别就是余数和商。


在这里插入图片描述


在网站上找到了描绘整个过程的图解

以1101/0010绘出整个过程如下:


在这里插入图片描述


2.汇编程序4字节数除以1字节数的实现

程序要求如下:

功能:4字节数除以1字节数,商为3字节

入口:(R0)=被除数低字节地址指针,(R6)=除数

出口:(R3R4R5)=商,(R2)=余数

根据程序要求,操作流程如下:

a) 余数清零

b) 判断商是否能用三字节表示, 如果为不能, 不再往下执行.

c) 设定移位次数

d) 被除数左移1位, 溢出的最高位保存在进位标志C中, 再把余数左移1位, 把C(被除数溢出的最高位)放入余数的最低位

e) 余数与除数比较大小(余数减去除数):

余数 ≥ 除数(减法结果为正)时, 被除数的最低位, 赋值 1

余数 < 除数(减法结果为负时, 恢复到减法前的余数) 被除数的最低位, 赋值 0

f) 定移位次数递减

g) 直到移位次数为0, 否则重复d) ~ f)

代码如下:

mov	r0,#20h
mov	r6,#90
mov	r7,#24
mov	50h,r0
inc	r0
mov	a,@r0
mov	r1,a
inc	r0
mov	a,@r0
mov	r2,a
inc	r0
mov	a,@r0
mov	r3,a
mov	r0,50h
mov	a,@r0
mov	r0,a
mov	a,r3
subb	a,r6
jnc	cdiv
loop:	clr	c
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	f0,c
clr	c
subb	a,r6
jc	less
inc	r0
mov	r3,a
sjmp	judge
less:	nop
judge:	djnz	r7,loop
clr	f0
mov	a,r3
xch	a,r2
mov	r3,a
mov	a,r1
mov	r4,a
mov	a,r0
mov	r5,a
sjmp	$
cdiv:	setb	f0
sjmp	$


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/153890.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!