51单片机小实验——双字节二进制乘法

双字节二进制乘法,被乘数的首地址由30h给出,乘数的首地址由31h给出,结果的存储单元,结果的存储单元首地址由32h给出。


chengshu data 30h

beicheng data 31h

jieguo  data 32h

         org 0000h

         ljmp start

         org 0100h

start: clr c

         mov r0,chengshu

         mov a,@r0

         mov b,a

         mov r1,beicheng

         mov a,@r1

         mul ab

         mov r0,jieguo

         mov @r0,a

         inc r0

         mov @r0,b;第一次部分和,即被乘数低位乘以乘数低位

         mov r0,chengshu

         mov a,@r0

         mov b,a

         mov r1,beicheng

         inc r1

         mov a,@r1

         mul ab

         mov r0,jieguo

         inc r0

         addc a,@r0

         mov @r0,a

         inc r0

         mov @r0,b;第二部分和,被乘数高位乘以乘数低位

         mov r0,chengshu

         inc r0

         mov a,@r0

         mov b,a

         mov r1,beicheng

         mov a,@r1

         mul ab

         mov r0,jieguo

         inc r0

         addc a,@r0

         mov @r0,a

         inc r0

         mov a,b

         addc a,@r0

         mov @r0,a;第三部分,被乘数低位乘以乘数高位

         mov r0,chengshu

         inc r0

         mov a,@r0

         mov b,a

         mov r1,beicheng

         inc r1

         mov a,@r1

         mul ab

         mov r0,jieguo

         inc r0

         inc r0

         addc a,@r0

         mov @r0,a

         inc r0

         mov @r0,b;第四部分,高位乘以高位

         sjmp $

         end