文档介绍:第4章 MCS-51程序设计
汇编语言的格式与伪指令
汇编语言程序设计步骤
查表程序设计
循环程序设计
分支程序设计
散转程序设计
数制转换程序设计
汇编语言的格式与伪指令
一. 指令的格式
LOOP: MOV A, R0 ;将R0的内容送A
[标号] 操作码第一操作数第二操作数[注释]
(目的操作数) (源操作数)
注:白色的内容不是必须的
二、汇编语言格式:
地址机器码源程序注释
ORG 0000H ; 整个程序起始地址
0000 20 00 30 LJMP MAIN ; 跳向主程序
ORG 0030H ; 主程序起始地址
0030 C3 MAIN: CLR C ; MAIN为程序标号
0031 E6 LOOP: MOV A , ***@R0
0032 37 ADDC A, ***@R1
0033 08 INC R0
0034 DA FB DJNZ R1, LOOP ;相对转移
0036 80 03 SJMP NEXT
0038 78 03 MOV R0, #03H
003A 18 NEXT: DEC R0
003B 80FE SJMP $ ;HERE: SJMP HERE
END ; 结束标记
三. 伪操作指令
1、 ORG(Origin) 定义程序的起始地址
2、 END 程序结束标志
3、 DB (Define Byte) 定义字节
4、 DW (Define Word)定义字
5、 EQU(Equate) 表达式赋值
四、伪操作指令例子
MATH EQU 03H
ORG 0000H
MAIN: CLR C
LOOP: MOV A , ***@R0
MOV R1, #MATH ;相当于 MOV R1, #03H
NEXT: SJMP $
ORG 1100H
DB 01H , 04H, 09H , 05H ;
END
ROM中
地址数据
1100 01
1101 04
1102 09
1103 05
汇编语言程序设计步骤
、性能指
标。
,确定控制算法
和操作步骤。
, 确定程序的流向
5. 编制源程序
(1)合理分配存储器单元和了解I/O接
口地址。
(2)按功能设计程序,明确各程序之
间的相互关系。
(3)用注释行说明程序,便于阅读和
修改调试和修改。
开始
1
Y
N
?
举例
ORG 0000H ; 整个程序起始地址
AJMP MAIN ; 跳向主程序
ORG 0030H ; 主程序起始地址
MAIN: CLR C ; MAIN为程序标号
LOOP: MOV A , ***@R0
ADDC A, ***@R1
INC R0
DJNZ R1, LOOP ;相对转移
SJMP NEXT
MOV R1, #03H
NEXT: DEC R0
SJMP $ ;相当于 LOOP1: SJMP LOOP1
END ; 结束标记
查表程序设计
一. 用DPTR查表(查0~9平方表)
1000 C083 TA: PUSH DPH
1002 C082 PUSH DPL
1004 902000 MOV DPTR, #TAB
1007 93 MOVC A, ***@A+DPTR
1008 D082 POP DPL
100A D083 POP DPH
100C 22 RET
ORG 2000H
TAB: DB 00H, 01H, 04H, 09H
2000 00
2001 01
2002 04
2003 09
二. 用PC查表(查0~9平方表)
ORG 1000H
1000 C083 TA: ADD A, #01H ; # 01H 为偏移量
1002 83 MOVC A, ***@A+PC
1003 22 RET
1004 00 DB 00H, 01H, 04H, 09H
1005 01 END
1006 04
1007 09
偏移量=表首地址-(查表指令下一条指令地址)
=1004H - 1003H
=01H
循环程序设计
一. 延时50ms程序
DEL: MOV R7, #200
DEL1: MOV R6, #125
DEL2: DJNZ R6, DEL2 ;125*2=250us
DJNZ R7, DEL1 ; *200=50ms
RET
使用12MHz晶振时,一个机器周期为1us, 执行
DJNZ指令为2us,加其他指令的时间(250+1+2)
*200+1=
精确计算见 P327