实验三 无符号双字节乘法程序设计
一、 实验目的和要求
本次实验的目的是用MCS-51汇编语言实现一无符号双字节乘法运算子程序编程实验。实验前要认真阅读本次实验的内容,参考给出的无符号双字节乘法运算的算法、流程图及参考程序,可考虑用另一种方法设计程序。然后上机调试,达到进一步掌握MCS-51汇编语言程序设计的基本方法。
二、 预备知识
由于MCS-51指令中只有8位数乘法指令MUL,用它来实现双字节数相乘时,要做一些算法处理才可以进行。
算法:两个双字节无符号数被分别存放在R2R3和R6R7中。可把被乘数和乘数分解为: (R2)(R3)=(R2)•2+(R3), (R6)(R7)=(R6)•2+(R7)
88则这两个数的乘积可表示为:
(R2)(R3)(R6)(R7)=[ (R2)•2+(R3)]•[ (R6)•2+(R7)]
88 =(R2)(R6)•216+(R2)(R7)•28+(R3)(R6)•28+(R3)(R7)
根据上面的算法公式,然后画出流程图,就能设计两个双字节无符号数进行乘法运算的程序了。
三、 程序流程图
图1 无符号双字节乘法程序流程图
四、实验步骤
在R2R3和R6R7中分别输入无符号整数,以0970H为起始地址连续或单步运行本实验程序后检查R4 R5 R6 R7中内容,就是两数的乘积。
入口:(R2R3)=被乘数;(R6R7)=乘数;出口:(R4R5R6R7)=乘积,R4为积的最高位。
ORG 0970H
QKUL: MOV A,R3
MOV B,R7
MUL AB ;R3*R7
XCH A,R7 MOV R5,B MOV B,R2
MUL AB ADD A,R5
MOV R4,A
CLR A
ADDC A,B
MOV R5,A MOV A,R6
;R7=(R3*R7)低字节
;R5=(R3*R7)高字节
;R2*R7
;R5=(R2*R7)高字节
MOV B,R3
MUL AB ;R3*R6
ADD A,R4
XCH A,R6
XCH A,B
ADDC A,R5
MOV R5,A
MOV PSW.5,C MOV A,R2
MUL AB ADD A,R5
MOV R5,A
CLR A
;存CY
;R2*R6
MOV ACC.0,C
MOV C,PSW.5 ;加上次加法的进位
ADDC A,B
MOV R4,A
SJMP $
END
五、思考题
1、简述指令MUL AB;XCH A,B;ADDC A,R5;的功能。
2、程序中ORG, END,SJMP $的功能什么?
六、实验报告要求
1、 写出修改后的正确程序,并做注释。
2、 画出流程图。
3、 回答思考题。
因篇幅问题不能全部显示,请点此查看更多更全内容