《单片机两个双字节无符号数相乘程序举例》由会员分享,可在线阅读,更多相关《单片机两个双字节无符号数相乘程序举例(3页珍藏版)》请在金锄头文库上搜索。
1、单片机两个双字节无符号数相乘程序举例本程序适用于Intel的51系统单片机 例 将(R2R3)和(R6R7)两个双字节无符号数相乘,结果送R4R5R6R7。 用移位和迭加的方式,步骤如下: 1)清部分积(高16位)R4R5=0。循环数16。 2)把R4R5R6R7右移一位,从最低位开始检查乘数R6R7的各个位。 3)如乘数位为1 本程序适用于Intel的51系统单片机例 将(R2R3)和(R6R7)两个双字节无符号数相乘,结果送R4R5R6R7。用移位和迭加的方式,步骤如下:1)清部分积(高16位)R4R5=0。循环数16。2)把R4R5R6R7右移一位,从最低位开始检查乘数R6R7的各个位。
2、3)如乘数位为1,则被乘数R2R3加到部分积R4R5中,否则不加。4)循环数减1,不到16次再返回1)。NMUL:MOV R4,#0MOV R5,#0 ;积的高16位=0MOV R0,#16 ;乘数16位二进制CLR CNMLP:MOV A,R4RRC AMOV R4,AMOV A,R5RRC AMOV R5,AMOV A,R6RRC AMOV R6,AMOV A,R7RRC AMOV R7,A ;(R4R5R6R7)右移一位JNC NMLNMOV A,R5 ;若移出位=1,则(R4R5)=(R4R5)+(R2R3)ADD A,R3MOV R5,AMOV A,R4ADDC A,R2MOV R4,ANMLN:DJNZ R0,NMLPMOV A,R4 ;最后再移位一次RRC AMOV R4,AMOV A,R5RRC AMOV R5,AMOV A,R6RRC AMOV R6,AMOV A,R7RRC AMOV R7,A ;(R4R5R6R7)右移一位RET