您好,欢迎来到钮旅网。
搜索
您的当前位置:首页汇编除法运算原理

汇编除法运算原理

来源:钮旅网


汇编除法原理

除法说得简单一点就是循环做减法,等减到不能再减了,那商也就出来了,余数也就得到了。

在单片机系统中,有时候也要用到除法的,但如果没有除法指令怎么办呢?

而且单片机系统中除法和现实纯数学中的又不一样,它需要节约硬件资源又要运算速度快。

下面就介绍一种即省时又节约资源的单字节除法算法,并附上51的汇编程序:

算法思想

00001001/00000011=00000011

被除数是00001001(9)

除数是00000011(3)

商是00000011(3)

余数是00000000(0)

算法思想是:

1、将被除数高位移入Temp中

2、将Temp减去除数

3、如果小于0,则置商值低位为0

如果大于等于0,则置商值低位为1,并将相减的结果放入Temp中

4、将商值左移1位

5、判断是否循环完成(一共循环8次)

6、没有则跳到步骤1继续执行

7、完成则存入商值和余数(Temp)

按照上面的例子执行的结果如下:

1、00000000-00000011小于0,商值为00000000

2、00000000-00000011小于0,商值为00000000

3、00000000-00000011小于0,商值为00000000

4、00000000-00000011小于0,商值为00000000

5、00000001-00000011小于0,商值为00000000

6、00000010-00000011小于0,商值为00000000

7、00000100-00000011大于0,商值为00000001,余数为00000001赋值给Temp

8、00000011-00000011等于0,商值为00000011,余数为00000000

至此算法完成

注:单字节是循环8次,如果是双字节就要循环16次,依次类推

附51单片机汇编程序

lt1 db ? ;除数

lt2 db ? ;被除数

tmp1 db ? ;商

tmp2 db ? ;中间变量

tmp3 db ? ;作为被除数的中间变量

tmp db ? ;循环的次数

code .section at 0 'code'

org 00h

jmp start

org 04h

ret

org 20h

start:

mov a,05h

mov lt2,a mov a,00h

mov lt1,a sz acc

jmp go_on

;赋值给被除数

;赋值给除数

jmp end_ ;如果除数为0,程序结束

;----------------

go_on:

mov a,lt2

divui_0: ;开始除法运算

mov tmp3,a ;被除数赋给tmp3

mov a,8

mov tmp,a ;循环的次数

clr tmp1

clr tmp2

divui_1:

clr c ;清除借位标志

rlc tmp3 ;被除数左移一位

rlc tmp2 ;把被除数从高位左移至tmp2

mov a,lt1 ;除数赋给acc

sub a,tmp2 ;tmp2与除数比较大小

sz z ;两数相等则z为1

jmp divui_2 ;等于,跳到divui_2

sz c ;不等于,判断是否有借位

jmp divui_3 ;没有借位,除数大于被除数

divui_2: ;有借位,被除数大于除数

mov a,tmp2

sub a,lt1 ;被除数减去除数

mov tmp2,a ;得到余数

set c ;商1

jmp divui_4

divui_3:

clr c ;商0

divui_4:

rlc tmp1 ;把商移进tmp1

sdz tmp ;循环是否有8次?

jmp divui_1 ;没有,继续循环

mov a,tmp1 ;把商存在acc

;----------------------------

end_:

jmp $ ;原地踏步

end ;程序结束

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- niushuan.com 版权所有 赣ICP备2024042780号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务