专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

用左移减法做4位16进制数除以2位16进制数运算

作者:佚名   来源:本站原创   点击数:  更新时间:2013年03月21日   【字体:
;只能整数运算及非0运算
 ORG 0000H
 JMP A1
 ORG 002BH
A1: MOV R0,#04H;被除数
 MOV R1,#0D2H;被除数
 MOV R2,#0;余数
 MOV R3,#0;商
 MOV R4,#0;商
 MOV R5,#34;除数
 MOV 30H,#16
A2: MOV A,R1;先把移低字节移到高字节位
 RLC A;
 MOV R1,A;
 MOV A,R0;先处理高字节和接收低字节传上来的位字节
 RLC A;
 MOV R0,A;
 MOV A,R2;把移出来的数处理
 RLC A;
 MOV R2,A;
CLR C;清C因为减法A=A-C-R5
 SUBB A,R5;移出来的数减除数
 JC A3;比较移出来的数和除数大小
 MOV R2,A;移出来的数大则商要置1并将余数赋给R2用于下次移位后再减除数
      ;由于除数为2位16进制数所以余数不不超过2位16进制数用一个寄存器就够了
A3: CPL C;商处理
 MOV A,R4;先把存到低字节位
 RLC A;
 MOV R4,A;
 MOV A,R3;通过低字节存到高字节
 RLC A;
 MOV R3,A;
 DJNZ 30H,A2;
 JMP $
 END
;思路--除数为2位16进制数所以余数不不超过2位16进制数用一个寄存器就够了
;    --除数为4位16进制数就得要用2个寄存器
;      R2       R5                   R3        R4
;1、 00000000-00100010小于0,商值为00000000》00000000B
;2、 00000000-00100010小于0,商值为00000000》00000000B
;3、 00000000-00100010小于0,商值为00000000》00000000B
;4、 00000000-00100010小于0,商值为00000000》00000000B
;5、 00000000-00100010小于0,商值为00000000》00000000B
;6、 00000001-00100010小于0,商值为00000000》00000000B
;7、 00000010-00100010小于0,商值为00000000》00000000B
;8、 00000100-00100010小于0,商值为00000000》00000000B
;9、 00001001-00100010小于0,商值为00000000》00000000B
;10、00010011-00100010小于0,商值为00000000》00000000B
;11、00100110-00100010大于0,商值为00000000》00000001B;余数为00000100B赋值给R2
;12、00010010-00100010小于0,商值为00000000》00000010B
;13、00100100-00100010小于0,商值为00000000》00000100B
;14、00100101-00100010大于0,商值为00000000》00001001B;余数为00000010B赋值给R2
;15、00001010-00100010小于0,商值为00000000》00010010B;
;16、00010100-00100010小于0,商值为00000000》00100100B,余数为00010100B
;至此算法完成
关闭窗口

相关文章