用汇编语言实现多字节乘法计算.docxVIP

  • 12
  • 0
  • 约2.65千字
  • 约 9页
  • 2023-09-14 发布于山东
  • 举报
用汇编语言实现多字节乘除法计算 CPU一般都提供乘除法运算指令,可是能够直接运算的乘除法受限于CPU的字长,如MCS-51单片机是8位的,就只能计算8位二进制乘除法,也就是被乘数、乘数、被除数、除数都小于256的计算。如果需要计算的数据较大怎么办?加减法我们还能够用先加/减低字节,再带进/借位加/减高字节的方法来计算,但乘除法这样子显然不行。 下面经过剖析二进制乘法的计算特点介绍通用的部分积右移乘法运算: 首先看乘法,列竖式我们都会的,二进制乘法和十进制的其实也差不多,都是按位相乘,再将各部分积错位相加,不同的是二进制乘法各位相乘时结果只有两种:乘数该位为0时乘积为0,乘数该位为1时乘积即被乘数本身。如下列图所示: 图1二进制乘法竖式计算过程 这是一个8位二进制数乘法,过程简洁易懂,可是我们怎么将这个过程转变 为汇编语言程序呢?下面是根据图1竖式设计的程序流程,很容易看懂,但关于 写程序来讲就比较繁琐了,关于乘数的每一位办理方法都不同样,关于每一位乘 数我们都要判断它是第几位,然后它和被乘数的积要左移几位相加,这样编出来 的程序冗长而且效率很低。 其实我们反过来看,乘数由低到高位每位对应的乘积依次左移一位相加,和 每次乘积不动而将结果右移一位相加效果是不是同样的呢?如图3所示: 积蓄储器清零 N 乘数第1位=1? Y 积+被乘数 积+0 N 乘数第2位=1? Y 积+被乘数左移1位 积+0 N 乘数第3位=1? Y 积+被乘数左移2位 积+0 。。。。 图2乘法流程图 图3部分积右移乘法计算过程 如此详尽的图示相信大家都看理解了,图中第二步到第九步所有的操作都是同样的,乘数带进位右移→积+被乘数或0→积右移。因此我们能够用循环的方法来设计程序,关于上述8位*8位的乘法需要循环8次,循环次数取决于乘数的位数。用这样的算法,不论数据的长度是多少,每一位的操作都是同样的,只要要根据乘数的位数改正循环次数就能够了。 下面给出long种类,也就是32位数据的乘法计算程序流程。 乘法 初始化: 积蓄储器清零 设置循环次数 乘数带进位位右移1位 N C=1? Y 积+被乘数 积+0 积右移一位 N 循环32次? Y 返回 图3部分积右移乘法计算流程图 程序如下: ; MULTI0: ;MULTIPLY:32位二进制乘办法程序 CLR C ;乘数1:73H~70H MOV R0,#73H ;乘数2:77H~74H MOV R6,#4 ;积:7FH~78H MULTI1: ;用到的存放器:R7,循环次数; MOV A,@R0 ;R6,移位循环次数;R0,间址存放器 RRC A ; MOV @R0,A DEC R0 MULTIPLY: DJNZ R6,MULTI1 ;乘数带进位右移 PUSH 07H ;将程序会用到的存放器 PUSH 06H ;R0,R6,R7压入堆栈保留 JNC MULTI2 ;C=0跳转 PUSH 00H MOV A,7CH MOV R7,#32 ;设循环次数 ADD A,74H MOV 7CH,A MOV 7FH,#0 MOV A,7DH MOV 7EH,#0 ADDC A,75H MOV 7DH,#0 MOV 7DH,A MOV 7CH,#0 MOV A,7EH MOV 7BH,#0 ADDC A,76H MOV 7AH,#0 MOV 7EH,A MOV 79H,#0 MOV A,7FH MOV 78H,#0 ;积蓄储单元清零 ADDC A,77H MOV 7FH,A ;积高4字节+被乘数 MULTI2: CLR MOV MOV  C R0,#7FH R6,#8 MULTI3: MOV RRC MOV DEC DJNZ  A,@R0 A @R0,A R0 R6,MULTI3  ;积右移一位 DJNZ  R7,MULTI0;循环  32次? POP POP POP RET  00H 06H 07H;恢复R0,R6,R7 用汇编语言实现多字节除法计算 ORG0000H LJMPSTART ORG 0030H ;主程序开始 START: MOV R7,#05H ;设定一个32位的被除数 MOV R6,#0F5H ;05F5E0FFH MOV R5,#0E0H ;MOV R4,#0FFH MOVR3,#69H MOV R2,#98H ;设定一个 24位的除数 MOV R1,#96H ;989680H MOV R0,#80H ;CALLDIV_32_24;调用除办法程序 MOVP1,30H SJMP$;商,能够用计算器考证 ;余数为:98967FH=9999999 ; ;* ;*  四字节/三字节无符号数除法程序已经测试经过  * * ; R7R6R5R4

文档评论(0)

1亿VIP精品文档

相关文档