- 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
您可能关注的文档
最近下载
- 广东省廉江市实验学校2025届小升初全真模拟数学检测卷含解析.doc VIP
- 2026年卫生专业技术资格考试中西医结合内科学(中级316)基础知识应考重点详解.docx VIP
- 22S521预制装配式混凝土检查井.docx VIP
- 黑龙江省齐齐哈尔市2025届高三下学期一模试题 历史 含答案.docx VIP
- 公立医院成本核算规范.pdf VIP
- 标准图集-S501-1~2 单层、双层井盖及踏步(2015年合订本).pdf VIP
- 2020年整合云南省事业单位教师招聘考试历年资料真题名师精品资料.docx VIP
- 小米招股说明书文档版.pdf VIP
- 2025-2026学年人教版八年级上册数学期末考试试卷5(含答案).pdf VIP
- 2025体育单招文化课试卷及答案.docx VIP
原创力文档

文档评论(0)