单片机常见汇编语言程序设计举例:
数制转换程序
算术和逻辑运算类程序设计
查表程序设计
子程序设计
定时程序
2-4 汇编语言程序设计方法(二)
1、数制转换
例1:将20H单元的两个压缩BCD码拆开变成ASCII码,存入21H、22H单元。(假设20H中的BCD码为00110100)
什么是BCD码?
什么是ASII码?
·
·
·
·
·
·
·
·
·
20H
21H
22H
A
B
0011
压缩BCD码
0011
0011
0100
低四位ASII码
高四位ASII码
方法1:将BCD码除以10H,恰好是将BCD码分别移到了A、B的低4位。然后再各自与30H相或,即成为ASCII码。
方法2:利用半字节交换指令来实现。
ORG 0000H
MOV A,20H
MOV B,#10H
DIV AB
ORL B,#30H
MOV 21H,B
ORL A,#30H
MOV 22H,A
SJMP $
END
开始
(20H)A
10HB
A/B (A中为高4位BCD码,B中为低4位BCD码)
B+30HB
B(22H)
A+30HA
A(21H)
结束
数制转换程序1---方法1
源程序如下:
·
·
·
·
·
·
·
·
·
20H
21H
22H
A
B
0011
0100
PC
PC
0011 0100
0001 0000
PC
0011
0000
0000 0100
PC
0011 0100
PC
PC
PC
0011
PC
ORG 0000H
MOV R0,#20H
MOV A,#30H
XCHD A,***@R0
MOV 21H,A
MOV A,***@R0
SWAP A
ANL A, #0FH
ORL A , #30H
MOV 22H, A
SJMP $
END
简单程序例1---方法2
开始
#20HR0
#30HA
A的低4位(20H)的低4位
A(21H)
(20H)A
A的低4位A的高4位
A(22H)
结束
A+30HA
PC
PC
PC
PC
PC
PC
PC
PC
源程序如下:
·
·
·
·
·
·
·
·
·
20H
21H
22H
A
R0
0011
0010 0000
0011
0100
0000
0100
0011
0100
0011
0000
0011
0000
0011
PC
0011
PC
BCD码十进制转换成二进制
例:假如在内部RAM40H单元中存储有一个压缩BCD编码的两位十进制数,设计一段程序把这个数转换成二进制数并存入41H单元中。
16
(40H)
余数
商为二进制的高四位
余为二进制的低四位
解题思路:
将高四位乘以0AH,再加上低四位即可。
程序清单
ORG 0000H
MOV A,40H
MOV B,#16
DIV AB
MOV 20H,B
MOV B,#0AH
MUL AB
ADD A,20H
MOV 41H,A
SJMP $
END
取出30H数据除以16,商A,余B
将十位数的二进制数加上个位数,结果41H
将十位数乘以0AH,其结果不会超过一个字节,在A中
算术和逻辑运算类程序设计
多字节BCD码十进制数相加例:假如在MCS-51单片机内部RAM中30H~37H单元、 38H~3FH单元分别存放有两个8字节BCD码十进制数,设计一段程序将这两个数相加,并把结果存于2FH~37H单元中,小地址存数据的高字节。
解题思路:先清Cy位,把(37H)和(3FH)进行带Cy相加,在进行十进制调整,结果存于37H单元中;把(36H)和(3EH)进行带Cy相加,在进行十进制调整……循环至结束,结果把最高字节的Cy存入2FH单元。
流程与程序清单
ORG 0000H
MOV R2,#08H
MOV R0,#37H
MOV R1,#3FH
CLR C
LOP:MOV A,***@R0
ADDC A,***@R1
DA A
MOV ***@R0,A
DEC R0
DEC R1
DJNZ R2,LOP
CLR A
RLC A
MOV 2FH,A
SJMP $
END
设定循环次数,R0和R1分别指向加数和被加数的首地址
相加,并回存结果
开始
R037H(被加数首地址)
R13FH(加数首地址)
R208H(循环次数)
清Cy位
加数和被加数
相加,十进制
调整,并回存
Cy存入2FH单元
结束
调整数据指针
R0(R0)
汇编语言程序设计方法(二) 来自淘豆网www.taodocs.com转载请标明出处.