×
单片机 > 单片机程序设计 > 详情

无符号双字节除以单字节(51单片机,汇编源码)

发布时间:2020-05-27 发布时间:
|

采用移位减法的算法。源码如下:


 1 ;//////////////////////////////////////////////////////////////////////////////

 2 ;函数:    div_u16_u8

 3 ;描述:    无符号双字节除以单字节

 4 ;入口:    (R6,R7)/(R0)

 5 ;出口:    (R6,R7).(R5)

 6 ;注意:    余数在R5;OV=1时表示溢出

 7 ;影响:    A,B,R0,R5,R6,R7

 8 div_u16_u8:    mov    r5,#0

 9         mov    b,#16

10 #ifdef __SPEED_P__

11         mov    a,r6        ;高字节小于除数的时候,只要移位8次

12         jz    _du168_line_03

13         clr    c

14         subb    a,r0        

15         jnc    _du168_loop_00

16         

17         mov    b,#8

18         clr    a        

19         xch    a,r7

20         xch    a,r6

21         xch    a,r5

22         sjmp    _du168_loop_00

23 

24 _du168_line_03:    mov    a,r7

25         mov    b,r0

26         div    ab

27         mov    r7,a

28         mov    r5,b

29         sjmp    _du168_line_04

30 #endif

31 _du168_loop_00:    clr    c

32 

33         mov    a,r7        ;向左移位

34         rlc    a

35         mov    r7,a

36         

37         mov    a,r6

38         rlc    a

39         mov    r6,a

40         

41         mov    a,r5

42         rlc    a

43         mov    r5,a

44         

45         mov    F0,c               ;移出位=1,或者高字节够减的时候,商+1

46         clr    c

47         subb    a,r0

48         anl    c,/F0

49         jc    _du168_line_01

50         mov    r5,a

51         inc    r7

52 _du168_line_01:    djnz    b,_du168_loop_00

53 

54 _du168_line_04:    mov    a,r5        ;四舍五入

55         add    a,r5

56         jc    _du168_line_02

57         subb    a,r0

58         jc    return_du168

59 _du168_line_02:    clr    c

60         mov    a,#1

61         add    a,r7

62         mov    r7,a

63         clr    a

64         addc    a,r6

65         mov    r6,a

66 

67 return_du168:    mov    OV,C

68         ret


关键字:无符号  双字节  单字节  51单片机 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多