第4章AT89S51汇编语言程序设计
合集下载
第4章 AT89S51汇编语言程序设计

第4章 AT89S51汇编语言程序设计
单片机技术
⑤ 标号并不是每一行都必须要有,而只在需要 时才使用。 ⑥每行只能有一个标号,且标号不能重复。 (2)操作码:操作码用于规定语句执行的操作。 对每一行源程序来说,只有操作码是必不可少的, 它由指令助记符表示。
第4章 AT89S51汇编语言程序设计
单片机技术
如:
④程序流向:用带箭头的线段表示。
第4章 AT89S51汇编语言程序设计
单片机技术
找出第一个学生 N
他选单片机吗?
第 三 步 : 设 计 流 程
Y
他选了模电吗?
N N
Y
他选了英语吗?
重复该过程
Y
记录要找的人
N
还有学生吗?
Y 下一个学生 结束
第4章 AT89S51汇编语言程序设计
单片机技术
第4章 AT89S51汇编语言程序设计
单片机技术
例如: LEN EQU 10 SUM EQU 21H BLOCK EQU 22H CLR A MOV R7,#LEN MOV R0,#BLOCK LOOP:ADD A,@R0 INC R0 DJNZ R7,LOOP MOV SUM,A END 该程序的功能是,把BLOCK单元开始存放的10个无 符号数进行求和,并将结果存入SUM单元中。
第4章 AT89S51汇编语言程序设计
单片机技术
第三步:设计流程图
1,进行总体设计,即从整体出发,确定程序结构, 勾划出程序执行的逻辑顺序,要求严密细致,完整 和正确、可靠。 2,在上述考虑的基础上,用图形的方法将整体设计 思路及程序流向完整的展现在平面图上,使程序的 总体直观、一目了然,便于审核、查错和修改。此 步骤可大大节省源程序的编辑调试时间,保证其质 量、正确性。 3,程序流程图的画法可以先粗后细,有粗有细,主 要考虑程序的逻辑结构和算法,暂不考虑指令。
单片机技术
⑤ 标号并不是每一行都必须要有,而只在需要 时才使用。 ⑥每行只能有一个标号,且标号不能重复。 (2)操作码:操作码用于规定语句执行的操作。 对每一行源程序来说,只有操作码是必不可少的, 它由指令助记符表示。
第4章 AT89S51汇编语言程序设计
单片机技术
如:
④程序流向:用带箭头的线段表示。
第4章 AT89S51汇编语言程序设计
单片机技术
找出第一个学生 N
他选单片机吗?
第 三 步 : 设 计 流 程
Y
他选了模电吗?
N N
Y
他选了英语吗?
重复该过程
Y
记录要找的人
N
还有学生吗?
Y 下一个学生 结束
第4章 AT89S51汇编语言程序设计
单片机技术
第4章 AT89S51汇编语言程序设计
单片机技术
例如: LEN EQU 10 SUM EQU 21H BLOCK EQU 22H CLR A MOV R7,#LEN MOV R0,#BLOCK LOOP:ADD A,@R0 INC R0 DJNZ R7,LOOP MOV SUM,A END 该程序的功能是,把BLOCK单元开始存放的10个无 符号数进行求和,并将结果存入SUM单元中。
第4章 AT89S51汇编语言程序设计
单片机技术
第三步:设计流程图
1,进行总体设计,即从整体出发,确定程序结构, 勾划出程序执行的逻辑顺序,要求严密细致,完整 和正确、可靠。 2,在上述考虑的基础上,用图形的方法将整体设计 思路及程序流向完整的展现在平面图上,使程序的 总体直观、一目了然,便于审核、查错和修改。此 步骤可大大节省源程序的编辑调试时间,保证其质 量、正确性。 3,程序流程图的画法可以先粗后细,有粗有细,主 要考虑程序的逻辑结构和算法,暂不考虑指令。
第4章 AT89S51汇编语言程序设计.

idata:片内间接寻址区,片内RAM所有地址单元
(00H~FFH)。
22
23
(2)片外数据存储器
pdata:片外数据存储器页,一页为256字节。 xdata:片外数据存储器RAM的64KB空间。 (3)片外程序存储器 code:外部程序存储器的64KB空间。 对单片机编程,正确地定义数据类型以及存储类型,是所 有编程者在编程前都需要首先考虑的问题。在资源有限的 条件下,如何节省存储单元并保证运行效率,是对开发者 的一个考验。只有对C51中的各种数据类型以及存储类型
器,在后面语句中可用“P1=0xff”(使P1的所有引脚输出
18
为高电平)之类的语句来操作特殊功能寄存器。 (3)特殊功能寄存器sfr16 “sfr16”数据类型占用两个内存单元。sfr16和sfr一样
用于操作特殊功能寄存器。所不同的是它用于操作占两个字
节的特殊功能寄存器。 例如: sfr16 DPTR=0x82语句定义了片内16位数据指 针寄存器DPTR,其低8位字节地址为82H。在后面的语句中 可以对DPTR进行操作。
取值必须是0~7。
注意,不要把bit与sbit混淆。bit用来定义普通的位变 量,值只能是二进制的0或1。而sbit定义的是特殊功能
20
寄存器的可寻址位, 其值是可进行位寻址的特殊功能寄
存器的位绝对地址,例如PSW寄存器OV位的绝对地址 0xd2。 3. 数据的存储类型 C51完全支持51单片机硬件系统的所有部分。在51单 片机中,程序存储器与数据存储器是完全分开的,且分为 片内和片外两个独立的寻址空间,特殊功能寄存器与片内
非常熟练的掌握,才能运用自如。
24
定义变量类型应考虑如下问题:程序运行时该变量可
能的取值范围,是否有负值,绝对值有多大,以及相应需 要的存储空间大小。在够用的情况下,尽量选择8位即一 个字节的char型,特别是unsiged char。对于51系列这样 的定点机而言,浮点类型变量将明显增加运算时间和程序
第4章89C51汇编语言程序的设计与调试

汇编语言程序设计举例
程序设计方法和技巧
1. 程序设计的一般步骤 (1) 分析工作任务,明确要达到的工作目的、技术指标等。 (2) 确定解决问题的算法。算法就是如何将实际问题转化成程序模块来处理, 要对不同的算法进行分析、比较,找出最适宜的算法。 (3) 画程序流程图。其图形的符号规定均与高级语言流程图相同,如桶形框 表示程序的开始或结束,矩形框表示需要进行的工作,菱形框表示需要 判断的事情,指向线表示程序的流向等。 (4) 分配内存工作单元,确定程序与数据的存放地址。 (5) 编写源程序。 (6) 上机调试、修改源程序。
2. 汇编语言(Assembly Language) 汇编语言是一种用助记符来表示的面向机器的程序设计 语言。不同的机器所使用的汇编语言一般是不同的。但计 算机的CPU不能直接识别汇编语言,所以计算机不能立即执 行汇编语言程序。用汇编语言编写的源程序,在由计算机 执行之前,必须将它翻译成机器语言程序。 特点:这种语言弥补了机器语言的不足,用汇编语言编写程序 比用机器语言方便、直观、易懂、易用、易记。可以编写 出结构紧凑、运行时间精确的程序。所以,这种语言非常 适合于实时控制的需要。
2.程序设计的一般原则 按照尽可能使程序简短和缩短运行时间两个原则编写程序。 应用程序一般都由一个主程序(包括若干个功能模块)和多个子程序构 成,即采用模块化的程序设计方法。 每一功能模块或子程序都能完成一个明确的任务,实现某个具体功能, 如检测输入信号、码制转换、输出控制信号、发送数据、接收数据、 延时、显示、打印等。 3. 模块化程序设计方法的特点 单个模块结构的程序功能单一,易于编写、调试和修改。 对程序的局部修改,可以使无关的部分保持不变。 程序可读性好,便于功能扩展和版本升级。 对于使用频繁的子程序可以建立子程序库,便于多个模块调用。 可实现多人同时进行程序的编写和调试工作,缩短程序编写时间。
第4篇 AT89S51汇编语言程序设计 (11)

6FH 6EH 6DH P1.0 P1.3 R2,#08H
A,ADCOMD C,P1.2 A P1.1,C P1.0 P1.0 R2,LOOP1
;定义命令存储单元 ;定义存储转换结果高4位单元 ;定义存储转换结果低8位单元 ;时钟脚为低电平 ;片选 有效,选中TLC2543 ;送出下一次8位转换命令和 ;读8位转换结果做准备 ;下一次转换命令在ADCOMD单元 ;中送A ;读入1位转换结果 ;1位转换结果带进位位右移 ;送出命令字节中1位 ;产生1个时钟
【例12-2】 设计AT89S51单片机与串行A/D转换器TLC2543SPI接口。
命令字通过P1.1输入到TLC2543输入寄存器中。
下面子程序为AT89S51选择某一通道进行1次数据采集,A/D 转换结果共12位,分两次读入。先读入TLC2543中8位转换结果到
单片机中,同时写入下一次转换命令,然后再读入4位转换结果
12.1
单总线串行扩展
单总线(也称1-Wire bus)是由美国DALLAS公司推出外围串
行扩展总线。 只有一条数据输入/输出线DQ,总线上所有器件都挂在DQ上,
电源也通过这条信号线供给,使用一条信号线串行扩展技术,称
为单总线技术。 单总线系统各种器件,由DALLAS公司提供专用芯片实现。每 个芯片都有64位ROM,厂家对每一个芯片用激光烧写编码,其中 存有16位十进制编码序列号,它是器件地址编号,确保它挂在总 线上后,可唯一被确定。 除地址编码外,片内还包含收发控制和电源存储电路,如图 12-1所示。这些芯片耗电量都很小(空闲时几微瓦,工作时几毫 瓦),从总线上馈送电能到大电容中就可以工作,故一般不需另 加电源。
;是否完成8次转换结果读入和命 ;令输出?未完则跳
第4章 89S51的汇编语言程序设计.

2021/7/12
3
4.1.2 程序编制的方法和技巧
强化模块观念
程序模块(主程序模块、各种子程序模块) 模块化优点:分块设计、层次清晰、便于接口。
采用循环和子程序的优点
使程序结构清晰。 简化代码。 注意:1、循环初值和结束条件,避免“死循环”现象。
2、子程序的现场保护。
2021/7/12
4
4.1.3 汇编语言的语句格式
2021/7/12
7
4.2 源程序的编辑
4.2.1 伪指令 4.2.2 源程序的编辑
2021/7/12
8
4.2.1 伪指令
伪指令:用于指导汇编工作。 汇编后,伪指令没有与之对应的机器代码。
起始地址设定伪指令ORG
ORG 表达式 表达式通常为十六进制地址,例:
ORG 8000H START:MOV A,#30H
SJMP PP2
PP1:MOV R3,#01H ;结果大于255时,高字节R3内容为01H
PP2:MOV R4,A ;结果的低字节在R4中
RET
2021/7/12
17
【例】求单字节有符号数的二进制补码。
正数补码是其本身,负数补码是其反码加1。因此,应首先判被转换数 的符号,负数进行转换,正数本身即为补码。
【例4-4】有一巡回检测报警装置,需对16路(x)输入 进行检测,每路有一个最大允许值(y),为双字节数。需 根据测量的路数(x),查表找出对应该路的最大允许值 (y),看输入值是否大于最大允许值,如果大于就报警。
取路数为x(0≤x≤15),y为最大允许值,放在表格 中。设进入查表程序前,假设路数x已放于R2中,查表后该 路的最大允许值y放于R3R4中。查表的程序如下:
第4章__89C51汇编语言程序设计(2)

4
┇
;MAIN为主程序或调用程序标
第 4章
89C51汇编语言程序设计 89C51汇编语言程序设计
SUB:
PUSH PSW PUSH ACC
;现场保护 ;
子程序处理程序段 POP ACC POP PSW RET ;现场恢复 ; ;最后一条指令必须为RET
5
第 4章
89C51汇编语言程序设计 89C51汇编语言程序设计
⑴ MOVC ⑵ MOVC
A,@A+DPTR A,@A+PC
MOVC A,@A+DPTR 完成把A中的内容作为一个无符号数与DPTR中的内容相加,所 得结果为某一程序存储单元的地址,然后把该地址单元中的内容 送到累加器A中。 MOVC A,@A+PC 以PC作为基址寄存器,PC的内容和A的内容作为无符号数,相加 后所得的数作为某一程序存储器单元的地址,根据地址取出程序 存储器相应单元中的内容送到累加器A中。
12
第 4章
89C51汇编语言程序设计 89C51汇编语言程序设计
例6:多字节二进制加法程序:2个4字节无符号二进制数求和, 分别存放于33H,32H,31H,30H及43H,42H,41H,40H中,和存放于 34H,33H,32H,31H,30H。 ORG 1000H DADD: MOV R0,#30H MOV R1,#40H MOV R7,#04H CLR C LOOP: MOV A,@R0 ADDC A,@R1 MOV @R0,A
例5:21H单元开始存放数据块(每单元有16进制数0-F),长度 存放于20H单元中,将它们转化为ASCII码,存放于41H开始单元。 0-9:ASCII:30H-39H=0-9+30H A-F: ASCII:41H-46H=A-F+37H ORG 0030H MAIN: MOV SP,#60H MOV R1,#41H MOV R0,#21H MOV R2,20H LOOP: MOV A,@R0 LCALL ZHCX MOV @R1,A INC R0 INC R1 DJNZ R2,LOOP SJMP $ ORG 1000H ZHCX: CJNE A,#0AH,NEXT NEXT: JC ASC1 ADD A,#37H SJMP ASC2 ASC1: ADD A,#30H ASC2: RET
┇
;MAIN为主程序或调用程序标
第 4章
89C51汇编语言程序设计 89C51汇编语言程序设计
SUB:
PUSH PSW PUSH ACC
;现场保护 ;
子程序处理程序段 POP ACC POP PSW RET ;现场恢复 ; ;最后一条指令必须为RET
5
第 4章
89C51汇编语言程序设计 89C51汇编语言程序设计
⑴ MOVC ⑵ MOVC
A,@A+DPTR A,@A+PC
MOVC A,@A+DPTR 完成把A中的内容作为一个无符号数与DPTR中的内容相加,所 得结果为某一程序存储单元的地址,然后把该地址单元中的内容 送到累加器A中。 MOVC A,@A+PC 以PC作为基址寄存器,PC的内容和A的内容作为无符号数,相加 后所得的数作为某一程序存储器单元的地址,根据地址取出程序 存储器相应单元中的内容送到累加器A中。
12
第 4章
89C51汇编语言程序设计 89C51汇编语言程序设计
例6:多字节二进制加法程序:2个4字节无符号二进制数求和, 分别存放于33H,32H,31H,30H及43H,42H,41H,40H中,和存放于 34H,33H,32H,31H,30H。 ORG 1000H DADD: MOV R0,#30H MOV R1,#40H MOV R7,#04H CLR C LOOP: MOV A,@R0 ADDC A,@R1 MOV @R0,A
例5:21H单元开始存放数据块(每单元有16进制数0-F),长度 存放于20H单元中,将它们转化为ASCII码,存放于41H开始单元。 0-9:ASCII:30H-39H=0-9+30H A-F: ASCII:41H-46H=A-F+37H ORG 0030H MAIN: MOV SP,#60H MOV R1,#41H MOV R0,#21H MOV R2,20H LOOP: MOV A,@R0 LCALL ZHCX MOV @R1,A INC R0 INC R1 DJNZ R2,LOOP SJMP $ ORG 1000H ZHCX: CJNE A,#0AH,NEXT NEXT: JC ASC1 ADD A,#37H SJMP ASC2 ASC1: ADD A,#30H ASC2: RET
AT89S51汇编语言程序设计
取路数为x(0≤x≤15),y为最大允许值,放在表格中。设进 入查表程序前,假设路数x已放于R2中,查表后该路的最大允许 值y放于R3R4中。查表程序如下:
TB3: TAB3:
MOV A,R2
ADD A,R2
;(R2)*2→(A)
MOV R3,A
;保存指针
ADD A,#6
;加偏移量
MOVC A,@A+PC
Y3Y2Y1Y0+4
DB 00H,01H,04H,09H,10H DB 19H,24H,31H,40H,51H
;数0~9的平方表
如果DPTR已被使用,则在查表前必须保护DPTR,且结束后恢复 DPTR,例4-3可改成如下形式:
TAB1:
PUSH DPH
;保存DPH
PUSH DPL
;保存DPL
MOV DPTR,#TAB1
DEC R2
LP02: MOV A,@R0
MOV R3,A
INC R0
MOV A,@R0 ;比较大小
CLR C
SUBB A,R3
JNC LP01
MOV A,R3 ;
XCH A,@R0 ;两个数互换
DEC R0
XCH A,@R0
SETB F0
;互换标志位F0置1
INC R0
LP01:DJNZ R2,LP02
第4章 AT89S51汇编语言程序设计
• 4.1.2 汇编语言语句和格式
• 两种基本语句:指令语句和伪指令语句。
(1)指令语句
• 汇编语言四分段格式:
标号字段 操作码字段 操作数字段
注释字段
(LABLE) (OPCODE) (OPRAND) (COMMENT)
START: MOV A,#00H
TB3: TAB3:
MOV A,R2
ADD A,R2
;(R2)*2→(A)
MOV R3,A
;保存指针
ADD A,#6
;加偏移量
MOVC A,@A+PC
Y3Y2Y1Y0+4
DB 00H,01H,04H,09H,10H DB 19H,24H,31H,40H,51H
;数0~9的平方表
如果DPTR已被使用,则在查表前必须保护DPTR,且结束后恢复 DPTR,例4-3可改成如下形式:
TAB1:
PUSH DPH
;保存DPH
PUSH DPL
;保存DPL
MOV DPTR,#TAB1
DEC R2
LP02: MOV A,@R0
MOV R3,A
INC R0
MOV A,@R0 ;比较大小
CLR C
SUBB A,R3
JNC LP01
MOV A,R3 ;
XCH A,@R0 ;两个数互换
DEC R0
XCH A,@R0
SETB F0
;互换标志位F0置1
INC R0
LP01:DJNZ R2,LP02
第4章 AT89S51汇编语言程序设计
• 4.1.2 汇编语言语句和格式
• 两种基本语句:指令语句和伪指令语句。
(1)指令语句
• 汇编语言四分段格式:
标号字段 操作码字段 操作数字段
注释字段
(LABLE) (OPCODE) (OPRAND) (COMMENT)
START: MOV A,#00H
第4章 AT89S51汇编语言程序设计
Y A内容为负数? N 计算a+b 计算a-b 开始
(30H)
A
结果送32H单元 结束
END
4.2 AT89S51汇编语言程序设计(续)
三、程序举例------循环程序
例3:数据块传递程序:将内RAM 60H 单元
开始 ORG 0000H AJMP MAIN ORG 0100H MAIN: MOV MOV MOV MOV MOV R0,#60H R1,#70H R2,#10H A,@R0 @R1,A 初始化 取数 送数 N
R6,DL2 R7,DL1
设晶振为12MHZ,则机器周期为1us。 所以子程序延时:1+[1+(1+1+2)×48+2]×10+2 = 1953 (us)
习题 讲解
POP DPH POP DPL MOV DPTR,#3000H RL A MOV B,A MOVC A,@A+DPTR PUSH Acc MOV A,B INC A
三、 伪指令(续) 5.DW(Define Word)定义数据字命令
用于在程序存储器的连续单元中定义16位的数据字 例: ORG DW 2000H 1246H,7BH,10 ;第1个字
汇编后 (2000H)=12H (2001H)=46H (2002H)=00H (2003H)=7BH (2004H)=00H (2005H)=0AH
表示TEST=2000H,汇编时,凡是遇到TEST,均 以2000H来代替。
三、 伪指令(续)
4.DB(Define Byte)定义数据字节命令
用于在程序存储器连续单元中定义字节数据
例:
ORG DB
2000H 30H,24,”C”
汇编后 (2000H)=30H (2001H)=18H (十进制数24) (2002H)=43H (字符“C”的ASCII码)
(30H)
A
结果送32H单元 结束
END
4.2 AT89S51汇编语言程序设计(续)
三、程序举例------循环程序
例3:数据块传递程序:将内RAM 60H 单元
开始 ORG 0000H AJMP MAIN ORG 0100H MAIN: MOV MOV MOV MOV MOV R0,#60H R1,#70H R2,#10H A,@R0 @R1,A 初始化 取数 送数 N
R6,DL2 R7,DL1
设晶振为12MHZ,则机器周期为1us。 所以子程序延时:1+[1+(1+1+2)×48+2]×10+2 = 1953 (us)
习题 讲解
POP DPH POP DPL MOV DPTR,#3000H RL A MOV B,A MOVC A,@A+DPTR PUSH Acc MOV A,B INC A
三、 伪指令(续) 5.DW(Define Word)定义数据字命令
用于在程序存储器的连续单元中定义16位的数据字 例: ORG DW 2000H 1246H,7BH,10 ;第1个字
汇编后 (2000H)=12H (2001H)=46H (2002H)=00H (2003H)=7BH (2004H)=00H (2005H)=0AH
表示TEST=2000H,汇编时,凡是遇到TEST,均 以2000H来代替。
三、 伪指令(续)
4.DB(Define Byte)定义数据字节命令
用于在程序存储器连续单元中定义字节数据
例:
ORG DB
2000H 30H,24,”C”
汇编后 (2000H)=30H (2001H)=18H (十进制数24) (2002H)=43H (字符“C”的ASCII码)
第4章89C51汇编语言程序的设计与调试
89C51的汇编语言的四分段格式如下: 89C51的汇编语言的四分段格式如下: 的汇编语言的四分段格式如下 标号字段) 操作数1(,操作数 操作数3))); 操作数2 ( 标号字段 ): 操作码 ( 操作数 1(, 操作数 2( 操作数 3))); 注释字 段 规则: 规则: (1)标号字段和操作字码段之间要有冒号":"相隔; 标号字段和操作字码段之间要有冒号" 相隔; (2)操作码字段和操作数字段间的分界符是空格; 操作码字段和操作数字段间的分界符是空格; (3)操作数之间用逗号相隔; 操作数之间用逗号相隔; (4)操作数字段和注释字段之间的分界符用分号";"相隔. 操作数字段和注释字段之间的分界符用分号" 相隔. 操作码字段为必选项,其余各段为任选项. 操作码字段为必选项,其余各段为任选项. 例4-1 下面是一段汇编语言程序的四分段书写格式
必须以分号" 必须以分号";"开头,换行书写,但必须注意也要以分号 开头,换行书写, ";"开头. 开头. 汇编时,注释字段不会产生机器代码. 汇编时,注释字段不会产生机器代码. 4.1.3 伪指令
汇编语言源程序中应有向汇编程序发出的指示信息, 在89C51 汇编语言源程序中应有向汇编程序发出的指示信息, 告诉它如何完成汇编工作,这是通过使用伪指令来实现的. 告诉它如何完成汇编工作,这是通过使用伪指令来实现的. 如何完成汇编工作 也称为汇编程序控制命令. 也称为汇编程序控制命令.只有在汇编前的源程序中才有伪 指令.经过汇编得到目标程序(机器代码) 指令.经过汇编得到目标程序(机器代码)
R1,LOOP;R1内容减1不为零,则循环 LOOP; 内容减1不为零,
HERE: HERE:
AT89S51单片机原理及应用技术第4章
在一个源程序中,可多次用ORG指令,规定不同的程序段的起始地 址。但是,地址必须由小到大排列,且不能交叉、重叠。
2.END(End of Assembly)汇编终止命令 END是源程序结束标志,终止源程序的汇编工作。整个源程序中只
能有一条END命令,且位于程序的最后。如果END出现在程序中间,其 后的源程序将不进行汇编处理。
4.1 AT89S51的汇编语言简介
4.1.3 汇编语言常用的伪指令 伪指令具有控制汇编程序的输入/输出、定义数据和符号、条件汇编
、分配存储空间等功能。下面介绍单片机汇编语言中常用的伪指令。
1.ORG(Origin)汇编起始地址命令 源程序或数据块的开始,用ORG伪指令规定程序的起始地址,指示
汇编程序开始对源程序进行汇编。如果不用ORG,则汇编得到的目标程 序将从0000H地址开始。例4-1中,规定标号START代表地址从2000H开 始,第1条指令及其后续指令汇编后的机器码都从2000H单元开始存放。
4.1 AT89S51的汇编语言简介
例4-1 结合一个汇编语言程序片段分析四分段格式,见表4-1。 表4-1 汇编语言程序片段
标号段 操作码段
操作数段
注释段
说明
ORG START: MOV
MOV MOV LOOP: ADD
2000H A,#00H R1,#5
;A←0 ;R1←5
R2,#00000010B ;R2←02H
4.1 AT89S51的汇编语言简介
用汇编语言编写的程序效率高,占用的内存单元和CPU资源少,执行 速度快;可直接调用和访问存储器、输入/输出接口以及扩展的各种芯片 ,能直接管理和控制硬件设备;能准确地掌控指令的执行时间,适用于实 时控制系统,也可以直接处理中断。 汇编语言依赖具体的机器硬件,属于低级语言范畴,程序通用性和可移植 性较差。 4.1.2 汇编语言语句及格式
2.END(End of Assembly)汇编终止命令 END是源程序结束标志,终止源程序的汇编工作。整个源程序中只
能有一条END命令,且位于程序的最后。如果END出现在程序中间,其 后的源程序将不进行汇编处理。
4.1 AT89S51的汇编语言简介
4.1.3 汇编语言常用的伪指令 伪指令具有控制汇编程序的输入/输出、定义数据和符号、条件汇编
、分配存储空间等功能。下面介绍单片机汇编语言中常用的伪指令。
1.ORG(Origin)汇编起始地址命令 源程序或数据块的开始,用ORG伪指令规定程序的起始地址,指示
汇编程序开始对源程序进行汇编。如果不用ORG,则汇编得到的目标程 序将从0000H地址开始。例4-1中,规定标号START代表地址从2000H开 始,第1条指令及其后续指令汇编后的机器码都从2000H单元开始存放。
4.1 AT89S51的汇编语言简介
例4-1 结合一个汇编语言程序片段分析四分段格式,见表4-1。 表4-1 汇编语言程序片段
标号段 操作码段
操作数段
注释段
说明
ORG START: MOV
MOV MOV LOOP: ADD
2000H A,#00H R1,#5
;A←0 ;R1←5
R2,#00000010B ;R2←02H
4.1 AT89S51的汇编语言简介
用汇编语言编写的程序效率高,占用的内存单元和CPU资源少,执行 速度快;可直接调用和访问存储器、输入/输出接口以及扩展的各种芯片 ,能直接管理和控制硬件设备;能准确地掌控指令的执行时间,适用于实 时控制系统,也可以直接处理中断。 汇编语言依赖具体的机器硬件,属于低级语言范畴,程序通用性和可移植 性较差。 4.1.2 汇编语言语句及格式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
它和字符A~F区别开来。 内RAM:地址可以用B、H、D表示。 SFR和工作寄存器:可用特殊功能寄存器名或工作寄存器名表示, 也可用其地址来表示。 外RAM:用@DPTR表示。 2、操作数存在与否由指令决定:1个、2个、3个或没有。如有2个或3 个,各操作数之间用逗号隔开。
注释 1、注释用于说明语句的功能,增加程序的可读性。 2、可有可无,如果有,则必须以分号开头,若一行不够,可以
一个程序只经过一次编写就完全
成功的,所以必须经过上机调试。
按程序的走向可以将程序分成4种结构:
顺序结构 分支结构 循环结构 子程序
4.3.1简单程序
简单程序是指一种无分支的直接程序,即CPU从第一条指令 开始依次执行每一条指令,直到最后一条指令。 这种程序虽然比较简单,但也能完成一定的功能,并且往往 也是构成复杂程序的基础。 拆字程序 拼字程序 求和程序
MOV A,#00H
ADDC A,#0 MOV 42H,A SJMP $
4.3.2子程序的设计 将需多次应用的、完成相同的某种基本运算或操作的程序段从 整个程序中独立出来,单独编成一个程序段,需要时进行调用。 这样的程序段称为子程序。 优点:采用子程序可使程序结构简单,缩短程序的设计时间,
减少占用的程序存储空间。
机器语言、汇编语言和高级语言比较一览表
名 称 特 点 缺 点 优 点 适用场合 无
机器语言 用机器码书 写指令 汇编语言 用符号书写 指令(用助 记符表示操 作码,特殊 符号表示操 作数) 高级语言 用以英语为 基础的语句 编程
不易被人们识别和读写。 计算机可以直 难写、难读、难交流 接识别和执行 机器不能直接识别;程 序员必须了解机器的结 构和指令系统,不易推 广和普及;不能移植, 不具备通用性 机器不能直接识别;执 行时间长
下列字符能否做标号: LOOP 123 ACC P OV ADD1 DEC JNZ
操作码 ——说明语句的功能,汇编语句中必不可少的部分。
操作数 ——说明操作的对象。
1、操作数有二种表示方法:操作数和操作数地址 操作数可以用D、B、H、ASCII码、表达式来表示。若十六进制的
操作数以字符A~F开头时,需在它前面加一个 “0”,以便在汇编时把
子程序在程序设计中非常重要,读者应熟练掌握子程序的设计 方法。
编写子程序时应注意以下问题: 1.子程序的第一条指令的地址称为子程序的入口地址。该指令 前必须有标号。 2.主程序调用子程序—— 两条子程序调用指令: (1)绝对调用指令:ACALL addr11。双字节,addr11指出 了调用的目的地址,PC中16位地址中的高5位不变,被调用的
言源程序的格式必须正确,程序员还要了解伪指令。
4.1.2 汇编语言语句和格式
两种基本语句:指令语句和伪指令语句。
(1)指令语句——每一条指令语句在汇编时都产生一个指令
代码(机器代码),执行该指令代码对应着机器的一种操作。 (2)伪指令语句——是控制汇编(翻译)过程的一些控制命 令。在汇编时没有机器代码与之对应。
MOV A,30H ADD A,32H MOV 40H,A (31H)+(33H)+Cy送41H单 元; Cy+0送42H单元 开始 (30H)+(32H)送40H单元 (31H)+(33H)+Cy 送41H单元 Cy+0送42H单元 结束
确定算法
画流程图 编写程序 上机调试
MOV A,31H
ADDC A,33H MOV 41H,A
子程序的首地址与绝对调用指令的下一条指令的高5位地址相同,
即只能在同一个2KB区内。 (2)长调用指令:LCALL addr16。三字节,addr16为直接
调用的目的地址,子程序可放在64KB程序存储器区任意位置。
3.注意设置堆栈指针和现场保护。 4.最后一条指令必须是RET指令。 5.子程序可以嵌套,即子程序可以调用子程序。
第四章 汇编语言程序设计
汇编语言程序设计概述
汇编语言源程序格式
伪指令
汇编语言程序设计基础
4.1.1 程序设计语言
计算机程序设计语言是指计算机能够理解和执行的语言。
程序设计语言的种类很多,归纳起来有三种:
机器语言、汇编语言和高级语言。
编程时采用哪种语言由程序设计语言的特点和适用场合决 定。
DB功能是从指定单元开始定义(存储)若干字节,十进制数自
然转换成十六进制数,字母按ASCII码存储。
DW(Define Word)定义数据字命令
该命令用于从指定的地址开始,在程序存储器的连续单元中定义
16位的数据字。 例如:ORG 2000H DW 1246H,7BH,10 ;第1个字
汇编后:(2000H)=12H (2001H)=46H (2002H)=00H
;第2个字
(2003H)=7BH
(2004H)=00H (2005H)=0AH ;第3个字
DS(Define Storage)定义存储区命令 从指定地址开始,保留指定数目的字节单元作为存储区,供程序 运行使用。
例如: TABEL:DS 10
表示从TABEL代表的地址开始,保留10个连续的地址单元。 例如: ORG 2000H DS 10 H
序段的起始位置。所规定的地址应该是从小到大,且不允许有重
叠,即不同的程序段之间不能有重叠。一个源程序若不用ORG 指令开始,则从0000H开始存放目标码。
例如:
ORG 2000H ……
START: MOV A,#00H
即规定标号START代表地址为2000H开始。
例如: ORG 2000H …… ORG 2500H …… ORG 3000H …… ORG 2500H …… ORG 2000H …… ORG 3000H ……
易为人们识别、 时间、空 记忆和读写 间要求严 格控制系 统
易于推广和交 流;不依赖于 机器,具有通 用性
科学运算 和数据处 理
1、高级语言程序转换为机器语言程序的过程称为编译过程, 通过编译程序实现。 2、汇编语言源程序转换为机器语言目的程序的过程称为汇编 过程,通过手工查表 或汇编程序实现。 3、用汇编程序将汇编语言源程序转换为机器语言时,汇编语
汇编可分为手工汇编和机器汇编两类。 手工汇编——通过查指令的机器代码表,逐个把助记 符指令“翻译”成机器代码,再进行调试和运行。 手工汇编遇到相对转移偏移量的计算时,较麻烦,易
出错,只有小程序或受条件限制时才使用。实际中,多采
用“汇编程序”来自动完成汇编。
4.2.2 机器汇编 用微型计算机上的软件(汇编程序)来代替手工汇编。在微机上 用编辑软件进行源程序编辑,然后生成一个ASCII码文件,扩展 名为 “.ASM”。在微机上运行汇编程序,译成机器码。 机器码通过微机的串口(或并口)传送到用户样机(或在线仿
真器),进行程序的调试和运行。有时,在分析某些产品的程序
的机器代码时,需将机器代码翻译成汇编语言源程序,称为“反 汇编”。
Байду номын сангаас
一段源程序的汇编结果,机器码从1000H单元开始存放。
25 E0 25 F0
4.3 汇编语言程序设计举例
一、汇编语言程序设计的一般步骤 分析课题
确定算法
画流程图 编写程序 上机调试 二、程序结构 在应用程序的设计中,几乎没有
指令没有相应的机器代码产生。
伪指令具有控制汇编程序的输入/输出、定义数据和符号、条件汇 编、分配存储空间等功能。 不同汇编语言的伪指令有所不同,但基本内容相同。 常用的伪指令: ORG END EQU DB DW DS BIT
ORG(汇编起始命令)
功能: 规定下面的目标程序的起始地址。
格式: [标号:] ORG 说明: 1、括号内是选项,可以没有。 2、一般在一个汇编语言源程序的开始,都用一条ORG伪指令来 规定程序存放的起始位置,故称为汇编起始命令。 3、在一个源程序中,可以多次使用ORG指令,以规定不同的程 16位地址。
END(汇编结束命令) 功能:汇编到此结束。 格式:[标号:] END
说明:
1、END是汇编语言源程序的结束标志,在END以后所写的指 令,汇编程序都不予处理。 2、一个源程序只能有一个END命令。在同时包含有主程序和 子程序的源程序中,也只能有一个END命令。
EQU(EQUate)标号赋值命令 用于给标号赋值。赋值后,标号值在整个程序有效。 例如:TEST:EQU 2000H
08H 32H 拆字程序 09H 31H 89H 30H 例:将30H单元中存放的一个两位的BCD 拆开并存入 31H 和 32H单元单元,高字节存入32H单元。
解:
分析命题 确定算法 画流程图 编写程序 上机调试
分别屏蔽高4位与 低4位,再将高4位 交换
开始 将30H单元的内容送A 屏蔽A中内容的低4位
表示TEST=2000H,汇编时,凡是遇到TEST时,均以2000H
来代替。
DB(Define Byte)定义数据字节命令
用于从指定的地址开始,在程序存储器连续单元中定义字节数据。 例如: ORG 2000H
DB
汇编后:
30H,40H,24,"C","B"
(2000H)=30H,(2001H)=40H,(2002H)=18H(十进制数24), (2003H)=43H(字符“C”的ASCII码) (2004H)=42H(字符“B”的ASCII码)
表示从2000H地址开始,保留16个连续地址单元。
注意:DB、DW和DS命令只能对程序存储器有效,不能对数据
存储器使用。
BIT 位定义命令 用于给字符名称赋以位地址,位地址可以是绝对位地址,也可 是符号地址。
例如:
QA
BIT P1.6
功能是把P1.6的位地址赋给变量QA。
注释 1、注释用于说明语句的功能,增加程序的可读性。 2、可有可无,如果有,则必须以分号开头,若一行不够,可以
一个程序只经过一次编写就完全
成功的,所以必须经过上机调试。
按程序的走向可以将程序分成4种结构:
顺序结构 分支结构 循环结构 子程序
4.3.1简单程序
简单程序是指一种无分支的直接程序,即CPU从第一条指令 开始依次执行每一条指令,直到最后一条指令。 这种程序虽然比较简单,但也能完成一定的功能,并且往往 也是构成复杂程序的基础。 拆字程序 拼字程序 求和程序
MOV A,#00H
ADDC A,#0 MOV 42H,A SJMP $
4.3.2子程序的设计 将需多次应用的、完成相同的某种基本运算或操作的程序段从 整个程序中独立出来,单独编成一个程序段,需要时进行调用。 这样的程序段称为子程序。 优点:采用子程序可使程序结构简单,缩短程序的设计时间,
减少占用的程序存储空间。
机器语言、汇编语言和高级语言比较一览表
名 称 特 点 缺 点 优 点 适用场合 无
机器语言 用机器码书 写指令 汇编语言 用符号书写 指令(用助 记符表示操 作码,特殊 符号表示操 作数) 高级语言 用以英语为 基础的语句 编程
不易被人们识别和读写。 计算机可以直 难写、难读、难交流 接识别和执行 机器不能直接识别;程 序员必须了解机器的结 构和指令系统,不易推 广和普及;不能移植, 不具备通用性 机器不能直接识别;执 行时间长
下列字符能否做标号: LOOP 123 ACC P OV ADD1 DEC JNZ
操作码 ——说明语句的功能,汇编语句中必不可少的部分。
操作数 ——说明操作的对象。
1、操作数有二种表示方法:操作数和操作数地址 操作数可以用D、B、H、ASCII码、表达式来表示。若十六进制的
操作数以字符A~F开头时,需在它前面加一个 “0”,以便在汇编时把
子程序在程序设计中非常重要,读者应熟练掌握子程序的设计 方法。
编写子程序时应注意以下问题: 1.子程序的第一条指令的地址称为子程序的入口地址。该指令 前必须有标号。 2.主程序调用子程序—— 两条子程序调用指令: (1)绝对调用指令:ACALL addr11。双字节,addr11指出 了调用的目的地址,PC中16位地址中的高5位不变,被调用的
言源程序的格式必须正确,程序员还要了解伪指令。
4.1.2 汇编语言语句和格式
两种基本语句:指令语句和伪指令语句。
(1)指令语句——每一条指令语句在汇编时都产生一个指令
代码(机器代码),执行该指令代码对应着机器的一种操作。 (2)伪指令语句——是控制汇编(翻译)过程的一些控制命 令。在汇编时没有机器代码与之对应。
MOV A,30H ADD A,32H MOV 40H,A (31H)+(33H)+Cy送41H单 元; Cy+0送42H单元 开始 (30H)+(32H)送40H单元 (31H)+(33H)+Cy 送41H单元 Cy+0送42H单元 结束
确定算法
画流程图 编写程序 上机调试
MOV A,31H
ADDC A,33H MOV 41H,A
子程序的首地址与绝对调用指令的下一条指令的高5位地址相同,
即只能在同一个2KB区内。 (2)长调用指令:LCALL addr16。三字节,addr16为直接
调用的目的地址,子程序可放在64KB程序存储器区任意位置。
3.注意设置堆栈指针和现场保护。 4.最后一条指令必须是RET指令。 5.子程序可以嵌套,即子程序可以调用子程序。
第四章 汇编语言程序设计
汇编语言程序设计概述
汇编语言源程序格式
伪指令
汇编语言程序设计基础
4.1.1 程序设计语言
计算机程序设计语言是指计算机能够理解和执行的语言。
程序设计语言的种类很多,归纳起来有三种:
机器语言、汇编语言和高级语言。
编程时采用哪种语言由程序设计语言的特点和适用场合决 定。
DB功能是从指定单元开始定义(存储)若干字节,十进制数自
然转换成十六进制数,字母按ASCII码存储。
DW(Define Word)定义数据字命令
该命令用于从指定的地址开始,在程序存储器的连续单元中定义
16位的数据字。 例如:ORG 2000H DW 1246H,7BH,10 ;第1个字
汇编后:(2000H)=12H (2001H)=46H (2002H)=00H
;第2个字
(2003H)=7BH
(2004H)=00H (2005H)=0AH ;第3个字
DS(Define Storage)定义存储区命令 从指定地址开始,保留指定数目的字节单元作为存储区,供程序 运行使用。
例如: TABEL:DS 10
表示从TABEL代表的地址开始,保留10个连续的地址单元。 例如: ORG 2000H DS 10 H
序段的起始位置。所规定的地址应该是从小到大,且不允许有重
叠,即不同的程序段之间不能有重叠。一个源程序若不用ORG 指令开始,则从0000H开始存放目标码。
例如:
ORG 2000H ……
START: MOV A,#00H
即规定标号START代表地址为2000H开始。
例如: ORG 2000H …… ORG 2500H …… ORG 3000H …… ORG 2500H …… ORG 2000H …… ORG 3000H ……
易为人们识别、 时间、空 记忆和读写 间要求严 格控制系 统
易于推广和交 流;不依赖于 机器,具有通 用性
科学运算 和数据处 理
1、高级语言程序转换为机器语言程序的过程称为编译过程, 通过编译程序实现。 2、汇编语言源程序转换为机器语言目的程序的过程称为汇编 过程,通过手工查表 或汇编程序实现。 3、用汇编程序将汇编语言源程序转换为机器语言时,汇编语
汇编可分为手工汇编和机器汇编两类。 手工汇编——通过查指令的机器代码表,逐个把助记 符指令“翻译”成机器代码,再进行调试和运行。 手工汇编遇到相对转移偏移量的计算时,较麻烦,易
出错,只有小程序或受条件限制时才使用。实际中,多采
用“汇编程序”来自动完成汇编。
4.2.2 机器汇编 用微型计算机上的软件(汇编程序)来代替手工汇编。在微机上 用编辑软件进行源程序编辑,然后生成一个ASCII码文件,扩展 名为 “.ASM”。在微机上运行汇编程序,译成机器码。 机器码通过微机的串口(或并口)传送到用户样机(或在线仿
真器),进行程序的调试和运行。有时,在分析某些产品的程序
的机器代码时,需将机器代码翻译成汇编语言源程序,称为“反 汇编”。
Байду номын сангаас
一段源程序的汇编结果,机器码从1000H单元开始存放。
25 E0 25 F0
4.3 汇编语言程序设计举例
一、汇编语言程序设计的一般步骤 分析课题
确定算法
画流程图 编写程序 上机调试 二、程序结构 在应用程序的设计中,几乎没有
指令没有相应的机器代码产生。
伪指令具有控制汇编程序的输入/输出、定义数据和符号、条件汇 编、分配存储空间等功能。 不同汇编语言的伪指令有所不同,但基本内容相同。 常用的伪指令: ORG END EQU DB DW DS BIT
ORG(汇编起始命令)
功能: 规定下面的目标程序的起始地址。
格式: [标号:] ORG 说明: 1、括号内是选项,可以没有。 2、一般在一个汇编语言源程序的开始,都用一条ORG伪指令来 规定程序存放的起始位置,故称为汇编起始命令。 3、在一个源程序中,可以多次使用ORG指令,以规定不同的程 16位地址。
END(汇编结束命令) 功能:汇编到此结束。 格式:[标号:] END
说明:
1、END是汇编语言源程序的结束标志,在END以后所写的指 令,汇编程序都不予处理。 2、一个源程序只能有一个END命令。在同时包含有主程序和 子程序的源程序中,也只能有一个END命令。
EQU(EQUate)标号赋值命令 用于给标号赋值。赋值后,标号值在整个程序有效。 例如:TEST:EQU 2000H
08H 32H 拆字程序 09H 31H 89H 30H 例:将30H单元中存放的一个两位的BCD 拆开并存入 31H 和 32H单元单元,高字节存入32H单元。
解:
分析命题 确定算法 画流程图 编写程序 上机调试
分别屏蔽高4位与 低4位,再将高4位 交换
开始 将30H单元的内容送A 屏蔽A中内容的低4位
表示TEST=2000H,汇编时,凡是遇到TEST时,均以2000H
来代替。
DB(Define Byte)定义数据字节命令
用于从指定的地址开始,在程序存储器连续单元中定义字节数据。 例如: ORG 2000H
DB
汇编后:
30H,40H,24,"C","B"
(2000H)=30H,(2001H)=40H,(2002H)=18H(十进制数24), (2003H)=43H(字符“C”的ASCII码) (2004H)=42H(字符“B”的ASCII码)
表示从2000H地址开始,保留16个连续地址单元。
注意:DB、DW和DS命令只能对程序存储器有效,不能对数据
存储器使用。
BIT 位定义命令 用于给字符名称赋以位地址,位地址可以是绝对位地址,也可 是符号地址。
例如:
QA
BIT P1.6
功能是把P1.6的位地址赋给变量QA。