简单程序设计
简单程序又称顺序程序。计算机是按指令在存储器中存放的先后次序来顺序执行程序的。
例1 求多项式y=a-b。
2
解: 设a存放在R2中,b在R3中,结果存入R6和R7中。流程图如图1所示。 程序为: MOV MOV MUL CLR SUBB MOV MOV SUBB MOV
END
A, R2 ;A←a B, A AB C A, R3 R7, A ;R7←结果的低8位
A, B
A, #00H ;高八位减进位位 R6, A
开始
B←100
A/B
R7←(A)
A←(B) B←10
A/B
结束
A7~4←(A)3~0 A3~0←(B)
图2 例2流程图
例2 单字节十六进制数转换为BCD码。
解: 单字节十六进制数在0~255之间,将其除100后,商即百位数,
余数除以10,商为十位数,余数即个位数。
设单字节数在累加器A中,转换结果的百位数放在R3中,十位、个位则放在A中。流程图如图2所示。该程序写成子程序形式,程序为:
HBCD:
MOV DIV MOV MOV XCH DIV SWAP A ADD RET
例3 无符号双字节乘法。
解: 设乘数和被乘数分别放在R2、R3和R6、R7中,计算结果放入R4、R5、R6、R7中。双字节无符号数的乘法可以采用重复加法的方法进行。MCS-51单片机有乘法指令,采用乘法指令的程序流程图如图3所示。
(R2
× (R6
R3)
R7)
A, B B,#100 AB R3,A A,#10 A,B A,B
;R3←立即数 ;分离十位和各位数 ;分离出百位数
(R3*R7)H (R3*R7)L
(R2*R7) H (R2*R7)L (R3*R6) H (R3*R6)L + (R2*R6) H (R2*R6)L
R4 R5 R6 R7 程序为:
MUL:
MOV MOV
MUL XCH MOV MOV MUL
ADD
MOV
A, R3 B, R7 AB A, R7 R5, B B, R2 AB A, R5 R4, A
CLR ADDC MOV MOV MOV
A A, B R5, A A, R6 B, R3 AB A, R4 A, R6 A, B A, R5 R5, A F0, C A, R2 AB A, R5 R5, A A ACC.0, C, F0 A, B R4, A
C
MUL ADD XCH XCH ADDC MOV MOV MOV MUL ADD MOV CLR MOV MOV ADDC MOV RET
此程序的特点是除使用用户标志外,相关单元只使用了标志位。在程序中多次使用字节交换指令,中间运算结果只使用R2~R7寄存器,使改变内容的单元尽量少。
该方法很容易推广到多字节无符号数的乘法运算中。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- sceh.cn 版权所有 湘ICP备2023017654号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务