MCS 51单片机汇编语言
第三章MCS51单片机的指令系统和汇编语言程序示例(第5范文
第三章MCS51单片机的指令系统和汇编语言程序示例(第5、6、7节)1.试分析单片机执行下列指令后累加器A和PSW中各标志位的变化状况?(1)MOV A,#19HADD A,#66H(2)MOV A,#5AHADD A,#6BH2.已知:A=85H,R0=30H,(30H)=11H, (31H)=0FFH,C=1,试计算单片机执行下列指令后累加器A和C中的值各是多少?(1)ADDC A,R0, (2)ADDC A,31H(3) ADDC A,@R0, (4) ADDC A,#85H3.已知M1和M2中分别存放两个16位无符号数的低8位,M1+1和M2+1中分别存放两个16位无符号数的高8位,计算两数之和(低8位存放在M1,高8位存放在M1+1,设两数之和不超过16位)。
4.试分析单片机执行下列指令后累加器A和PSW中各标志位的变化状况?CLR CMOV A,#52HSUBB A,#0B4H5.已知:A=0DFH,R1=40H,R7=19H,(30H)=00H,(40H)=0FFH,试分析单片机执行下列指令后累加器A和PSW中各标志位的变化状况?(1) DEC A (2) DEC R7 (3) DEC 30H (4) DEC @R16.试写出能完成85+59的BCD加法程序,并对工作过程进行分析。
7.已知:两个8位无符号乘数分别放在30H和31H单元中,编程实现他们乘积的低8位存放在32H,高8位存放在33H。
8.已知:R0=30H,(30H)=0AAH,试分析执行下列指令后累加器A和30H单元的内容是什么?(1)MOV A, #0FFH ANL A, R0(2)MOV A, #0FH ANL A, 30H(3)MOV A, #0F0H ANL A, @R0(4)MOV A, #80H ANL 30H, A9.设:A=0AAH和P1=0FFH,试编程把累加器A的低四位送入P1口的低四位,P1口的高四位保持不变。
MCS-51单片机指令系统与汇编语言程序设计
docin/sundae_meng
P73 例2.58
ORG 0100H
MOV DPTR,#DATA LOOP2: MOV R1,A
MOV R0,#30H
INC R1
MOV R1,#40H LOOP: MOVX A,DPTR
START:
ORG 1000H MOV DPTR,#TABLE MOV A,20H ANL A,#0FH MOVC A,@A+DPTR MOV 21H,A
docin/sundae_meng
TABLE:
MOV A,20H ANL A,#0F0H
SWAP A MOVC A,@A+DPTR MOV 22H, A SJMP $ DB 30H,31H,32H,33H,34H
docin/sundae_meng
ORG 1000H
START: MOV A, 40H
; 将X送入A中
JZ COMP
; 若A为0,转至COMP处
JNB ACC.7, POST ; 若A第7位不为1(X为正数),则程序转到
POST处,否则(X为负数)程序往下执行
MOV A, #0FFH ; 将1(补码)送入A中
docin/sundae_meng
2.4.1 汇编语言程序设计的步骤
汇编语言程序设计:根据任务要求,采用汇编语言编制程序的过程称为汇编 语言程序设计。 汇编语言程序设计的步骤: (1)拟订设计任务书 (2)建立数学模型 (3)确定算法 (4)分配内存单元,编制程序流程图 (5)编制源程序
进一步合理分配存储器单元和了解I/O接口地址;按功能设计程序,明确 各程序之间的相互关系;用注释行说明程序,便于阅读和修改调试和修改。 (6)上机调试 (7)程序优化
单片机c51汇编语言51单片机汇编语言
单片机c51汇编语言51单片机汇编语言单片机C51汇编语言单片机(C51)是指一种集成电路上只包含一个集中式控制器的微处理器,具有完整的CPU指令集、RAM、ROM、I/O接口等功能。
汇编语言是一种低级语言,是用于编写单片机指令的一种语言。
汇编语言能够直接操作单片机的寄存器和输入/输出端口,因此在嵌入式系统的开发中非常重要。
本文将介绍单片机C51的汇编语言编程。
一、了解单片机C51单片机C51是目前应用最广泛的一种单片机系列,广泛用于各种电子设备和嵌入式系统的开发。
C51指的是Intel公司推出的一种基于MCS-51架构的单片机。
该系列单片机具有较高的性能和低功耗的特点,可用于各种控制和通信应用。
二、汇编语言的基本概念汇编语言是一种低级语言,与机器语言紧密相关。
它使用助记符来代替机器指令的二进制表示,使程序的编写更加易读。
在单片机C51汇编语言中,每一条汇编指令都对应着特定的机器指令,可以直接在单片机上执行。
三、汇编语言的基本指令在单片机C51汇编语言中,有一些基本的指令用于控制程序的执行和操作寄存器。
以下是一些常用的指令:1. MOV指令:用于将数据从一个寄存器或内存单元复制到另一个寄存器或内存单元。
2. ADD指令:用于将两个操作数相加,并将结果存储到目的寄存器中。
3. SUB指令:用于将第一个操作数减去第二个操作数,并将结果存储到目的寄存器中。
4. JMP指令:用于无条件跳转到指定的地址。
5. JZ指令:用于在条件为零时跳转到指定的地址。
6. DJNZ指令:用于将指定寄存器的值减一,并根据结果进行跳转。
四、编写单片机C51汇编程序的步骤编写单片机C51汇编程序需要按照以下步骤进行:1. 确定程序的功能和目标。
2. 分析程序的控制流程和数据流程。
3. 设计算法和数据结构。
4. 编写汇编指令,实现程序的功能。
5. 调试程序,并进行测试。
六、实例演示以下是一个简单的单片机C51汇编程序的示例,用于实现两个数的相加,并将结果输出到LED灯上:org 0H ; 程序的起始地址为0mov a, 05H ; 将05H赋值给累加器mov b, 07H ; 将07H赋值给B寄存器add a, b ; 将A寄存器和B寄存器的值相加mov P1, a ; 将相加结果输出到P1口end ; 程序结束在这个例子中,首先将05H赋值给累加器A,然后将07H赋值给B寄存器,接着使用ADD指令将A和B的值相加,将结果存储到累加器A中,最后将累加器A的值输出到P1口。
第三章MCS51系列单片机指令系统及汇编语言程序设计
SJMP rel ;PC+ 2 + rel→PC 短转移指令为一页地址范围内的相对转移指令。因为rel为1字节补码 偏移量,且SJMP rel指令为2字节指令,所以转移范围为-126D~+ 129D 【4】间接转移指令
表3.4 程序存储器空间中的32个基本2K地址范围
0000H~07FFH 0800H~0FFFH 1000H~17FFH 1800H~1FFFH 2000H~27FFH 2800H~2FFFH 3000H~37FFH 3800H~3FFFH 4000H~47FFH 4800H~4FFFH 5000H~57FFH
3. 寄存器寻址
以通用寄存器的内容为操作数的寻址方式。通用寄存 器包括:A,B,DPTR,R0~R7。其中,R0~R7必须在 工作寄存器组之中。
例如:INC R0 ;(R0)+1→R0
需要注意的是,A和B既是通用寄存器,又是具有直 接地址的特殊功能寄存器。
4. 寄存器间接寻址
以寄存器中的内容为地址,该地址中的内容为操作数的寻址方式。能够 用于寄存器间接寻址的寄存器有:R0,R1,DPTR,SP。其中,R0,R1必 须在工作寄存器组之中,SP仅用于堆栈操作。
MCS-51单片机共有111条指令,按功能分类, MCS-51指令系统可分为5大类:
➢ 数据传送类指令(共29条) ➢ 算术操作类指令(共24条) ➢ 逻辑操作类指令(共24条) ➢ 控制转移类指令(共17条) ➢ 布尔变量操作类指令(共17条)
1.数据传送类指令(共29条)
以累加器A为目的操作数类指令(4条)
大学课件MCS51单片机指令系统与汇编语言程序设计
ANL C, P ; (C)← (C)∧(P)
其中:P是PSW的第0位,C是PSW的第7位。
(4)字节符号地址(字节名称)加位序号的形式。对于部分特 殊功能寄存器(如状态标志寄存器PSW),还可以用其字节名 称加位序号形式来访问某一位。AC 如:
定义:操作数存放在MCS-51内部的某个工作寄存器Rn (R0~R7)或部分专用寄存器中,这种寻址方式称为 寄存器寻址。
特点:由指令指出某一个寄存器的内容作为操作数。 存放操作数的寄存器在指令代码中不占据单独的一个 字节,而是嵌入(隐含)到操作码字节中。
寻址范围:四组通用寄存器Rn(R0~R7)、部分专用 寄存器( A, B, DPTR, Cy )。
伪指令只出现在汇编前的源程序中,仅提供汇编用的某些控制 信息,不产生可执行的目标代码,是CPU不能执行的指令。
(1)定位伪指令ORG
格式:ORG n
其中:n通常为绝对地址,可以是十六进制数、标号或表达式。
功能:规定编译后的机器代码存放的起始位置。在一个汇编 语言源程序中允许存在多条定位伪指令,但每一个n值都应和前
2.2.2 直接寻址
定义:将操作数的地址直接存放在指令中,这种寻址方式称为 直接寻址。 特点:指令中含有操作数的地址。该地址指出了参与操作的数 据所在的字节单元地址或位地址。计算机执行它们时便可根据 直接地址找到所需要的操作数。
寻址范围:ROM、片内RAM区、SFR和位地址空间。P42
2.2.3 寄存器寻址
定义:指令中给出的操作数是一个可单独寻址的位地址,这种寻址 方式称为位寻址方式。
特点:位寻址是直接寻址方式的一种,其特点是对8位二进制数中 的某一位的地址进行操作。
寻址范围:片内RAM低128B中位寻址区、部分SFR(其中有83位 可以位寻址)。
51单片机汇编语言4-MCS51硬件结构-2
第1章
单片机硬件系统
(2) PC的内容自动加1变为0001H,指向下一个指令字节。 (3) 地址寄存器中的内容0000H通过地址总线送到存储器,
经存储器中的地址译码选中0000H单元。 (4) CPU通过控制总线发出读命令。 (5) 被选中单元的内容74H送内部数据总线,该内容通过 内部数据总线送到单片机内部的指令寄存器。至此,取指令 过程结束,进入执行指令过程。
第1章
单片机硬件系统
MCS-51单片机片内有256B的数据存储器,它分为低
128B的片内RAM区和高128B的特殊功能寄存器区。低128B 的片内RAM又可分为工作寄存器区(00H~1FH)、位寻址区 (20H~2FH)和数据缓冲器(30H~7FH)。累加器A、程序状态 寄存器PSW、堆栈指针SP、数据存储器地址指针DPTR、程 序存储器地址指针PC,均有着特殊的用途和功能。 MCS-51单片机有4个8位的并行I/O口,它们在结构和特 性上基本相同。当需要片外扩展RAM和ROM时,P0口分时 传送低8位地址和8位数据,P2口传送高8位地址,P3口常用 于第二功能,通常情况下只有P1口用作一般的输入/输出引脚。
第1章
单片机硬件系统
图1.15 MCS-51单片机的取指/执行时序 (a) 单片机的机器周期;(b) 单字节单周期指令,如INC A;(c) 双字节单 周期指令,如ADD A,data;(d) 单字节双周期指令,如INC DPTR
第1章
单片机硬件系统
1.5 单片机的工作过程
单片机的工作过程实质上是执行用户编制程序的过程。 一般程序的机器码都已固化到存储器中,例如实训1中的步骤 (3),因此开机复位后,就可以执行指令。执行指令又是取指 令和执行指令的周而复始的过程。 例如指令MOV A,#56H表示把立即数56H这个值送入A 累加器。该指令对应的机器码是74H、56H,假设它们已存在 0000H开始的单元中。下面我们来说明单片机的工作过程。 接通电源开机后,PC =0000H,取指令过程如下: (1) PC中的0000H 送到片内的地址寄存器。
第4章 MCS-51单片机汇编语言程序设计
程序清单:
送转移地址序号
A,R3 ;取序号 A ;序号乘2 DPTR, #JTAB ;32个子程序 首地址送DPTR JMP @A+DPTR ;根据序号转移 JTAB: AJMP ROUT00 ;32个子程序首地址 AJMP ROUT01 … MP: MOV RL MOV AJMP ROUT31
第 四 章 MCS-51 单 片 机 汇 编 语 言 程 序 设 计
【例4-1】
双字节二进制数求补。
程序说明:对R3(高8位)、R2(低8位)中的二进制定 点数取反加1即可得到其补码。
开始
程序清单:
BINPL:MOV A,R2 CPL A ADD A,#01H MOV R2,A MOV A,R3 CPL A ADDC A,#00H MOV R3,A RET ;低位字节取反 ;加1 ;低位字节补码送R2 ;高位字节取反 ;加进位 ;高位字节补码送R3
散转生成正确偏移号
置换指令地址表首址
转入R3指示的程序
AJMP
……
AJMP
第 四 章 MCS-51 单 片 机 汇 编 语 言 程 序 设 计
3.循环程序
包括:循环初始化、循环处理、循环控制
开始 置初值 循环体 循环结束? Y 循环修改 N 循环体 循环结束? N Y 结束 循环修改 结束 开始 置初值
;调用查表子程序 ; 暂存R1中 ;调查表子程序 ;平方和存A中 ;等待
取第一个数→A 调查表子程序 结果存入R1 取下一个数→A 调查表子程序 两数平方相加 存结果
子程序清单:
SQR: INC A ;加RET占的一个字节 MOVC A,@A+PC ;查平方表 RET TAB: DB 0,1,4,9,16 DB 25,36,49,64,81 END
MCS-51汇编语言程序设计
01:31
单片机原理与接口技术(第2版).李晓林.电子工业出版社
返回目录
2
本章目录
4.2.1 顺序结构程序 4.2.2 分支结构程序 4.2.3 循环结构程序 4.2.4 查表程序 4.2.5 子程序 4.3 汇编语言程序设计实例 习题与思考题
4.1 程序设计概述 4.1.1 程序设计的步骤 4.1.2 程序设计的方法 4.1.3 汇编语言的规范 4.1.4 汇编语言程序编辑和 汇编 4.2 结构化程序设计方法
01:31
单片机原理与接口技术(第2版).李晓林.电子工业出版社
返回目录
15
4.1.3 汇编语言的规范
(5)定义字伪指令 )定义字伪指令DW
[标号:] 标号: DW 16位二进制数表 16位二进制数表
---伪指令 伪指令DW 伪指令
功能: DW 指令是在程序存储器 ( ROM ) 中 , 从指定的 指令是在程序存储器( 功能 : DW指令是在程序存储器 ROM) 地址单元开始,定义若干个16位数据 一个16位数 位数据。 地址单元开始,定义若干个16位数据。一个16位数 要占两个存储单元,其中高8位存入低地址单元, 要占两个存储单元, 其中高 8位存入低地址单元, 位存入高地址单元。 低8位存入高地址单元。 例如: 例如: ORG 1100H 1100H TAB : DW 1234H, 0ABH 10 1234H, 以上伪指令经汇编以后, 将对从1100H 以上伪指令经汇编以后 , 将对从 1100H 开始的若 干内存单元赋值。 干内存单元赋值。
01:31
单片机原理与接口技术(第2版).李晓林.电子工业出版社
返回目录
16
4.1.3 汇编语言的规范
例如:ORG 1100H 例如: TAB :DW 1234H, 0ABH 10 (1100H)=12H (1101H)=34H (1102H)=00H (1103H)=ABH (1104H)=00H (1105H)=0AH
MCS-51单片机的汇编语言
绝对地址段选择伪指令
CSEG
[AT
address]
DSEG
[AT
address]
ISEG
[AT
address]
BSEG
[AT
address]
XSEG
[AT
address]
分别为程序存储器、内部数据存储器、间接寻址的内部数据存 储器、位寻址区和外部数据存储器的使用指定绝对地址
1.5 通用的转移和调用语句
MCS-51汇编器允许程序员使用通用的转移和调用助记符JMP 与CALL
用来代替SJMP、AJMP、LJMP和ACALL、LCALL
汇编产生的未必是最优化的结果
1.6 条件汇编
将一个软件的多个版本保存在同一组源程序文件中 使用IF、ELSEIF、ELSE、ENDIF IF或ELSEIF后的表达式通常为关系表达式 当IF或ELSEIF后的数值表达式的值非零时,汇编其后的语句组;
1.4 伪指令语句
ORG伪指令
ORG
பைடு நூலகம்
expression
设置汇编计数器的值,指定其后语句的起始地址
伪指令语句
END伪指令
应当是源程序的最后一条语句 通知汇编程序汇编过程应在此结束 汇编器不理会END后面的文件内容
每个程序文件都应以END结束
伪指令语句
EQU和SET伪指令
symbol
单片机原理与应用
MCS-51单片机的汇编语言
INTS SET
IF ELSE ENDIF
INTS = 1 MAIN_START
MAIN_START
NUM1 DATA NUM2 DATA
DSEG AT
STACK: DS
20H
MCS-51单片机汇编语言程序IDE设计与实现的开题报告
MCS-51单片机汇编语言程序IDE设计与实现的开题报告一、选题背景单片机是由微处理器、存储器、计时器、I/O 及其他功能模块组成的集成电路芯片,它可以单独工作,也可以和其他器件连接起来共同完成特定的任务。
在现代电子技术中,单片机应用广泛,包括智能家居、自动化控制、智能照明、汽车电子等领域。
MCS-51单片机是英特尔公司推出的一种经典的单片机,它的指令集简洁明了,易于学习和掌握。
然而,MCS-51单片机汇编语言编写程序的过程较为繁琐,需要手动编写代码、编译、烧录等步骤,对初学者来说有一定的难度。
因此,设计一个MCS-51单片机汇编语言程序的IDE(集成开发环境),能够使得初学者更加方便快捷地编写和调试程序,并提高效率。
二、研究内容本课题主要研究MCS-51单片机汇编语言程序IDE的设计与实现,包括以下方面内容:1. 界面设计:设计一个直观、美观、易用的界面,包括菜单栏、工具栏、状态栏、编辑区、输出区等。
2. 代码编辑功能:实现代码的高亮显示、自动补全、代码折叠、代码片段等功能,提高编写代码的效率。
3. 代码调试功能:实现单步执行、断点调试、变量查看、寄存器查看等功能,方便调试程序。
4. 程序生成功能:实现代码编译、链接、烧录功能,生成可以直接在单片机上运行的程序文件。
三、研究方法1. 软件开发工具:主要使用Visual Studio和Keil C51,分别进行界面设计和MCS-51汇编语言程序的编写和调试。
2. 界面设计:使用Visual Studio中的Windows Form应用程序,结合C#语言编写,设计各种控件以及菜单、工具栏、状态栏等元素。
3. 代码编辑功能:使用Keil C51中的编辑器模块进行代码编辑,并结合Scintilla控件实现代码高亮显示、自动补全等功能。
4. 代码调试功能:使用Keil C51中的仿真器模块进行单片机程序的仿真调试,并输出调试信息,在编辑器中结合插件实现寄存器查看、变量查看等功能。
第4章 MCS-51单片机汇编语言程序设计(2)
XCH A,R3 INC A MOVC A,@A+DPTR MOV DPL,A MOV DPH,R3 CLR A JMP @A+DPTR TAB DW DW A0 A1
…………. DW AN
INC
DPTR
MOVX A,@DPTR SUBB A,R7 JNC XCH BIG1 A,R7
BIG0:INC DPTR
实现程序如下: 实现程序如下
START:CLR C : MOV DPTR,#ST1 , MOVX A,@DPTR , MOV R7,A
MOVX @DPTR,A RET BIG1:MOVX A,@DPTR SJMP BIG0
实现程序如下: 实现程序如下 MOV 30H, 20H ANL 30H,#00011111B MOV A,21H SWAP A RL A ANL A,#11100000B ORL 30H,A
第4章 MCS-51单片机汇编语言程序设计
实现程序如下: 实现程序如下 例 A,@R1 ADDC4.3 做3个字节的 无符号的加法. 无符号的加法.设一个加 MOV R0,#52H , MOV @R0,A 数存放在内部RAM 50H、 RAM的 数存放在内部RAM的50H、 MOV R1,#55H , DEC R0 51H、52H单元中 单元中, 51H、52H单元中,另一 DEC R1 RAM的53H、 MOV A,@R0 个加数存放在RAM 个加数存放在RAM的53H、 MOV A,@R0 54H、55H单元中 单元中, 54H、55H单元中,相加 ADD A,@R1 结果存内部RAM的50H、 结果存内部RAM的50H、 RAM ADDC A,@R1 51H、52H单元 单元, 51H、52H单元,均从高 MOV @R0,A 字节开始存放, 字节开始存放,进位存放 MOV 00H,C 在位寻址区的00H位中。 00H位中 在位寻址区的00H位中。 MOV @R0,A DEC DEC R0 R1
MCS-51单片机汇编语言的伪指令-文档资料
Copyright 2006
题意分析:
本例是典型的分支程序,根据两个无符号数的 比较结果(判断条件),分别点亮相应的发光二极 管。
6.定义空间伪指令DS
4.定义字节数据伪指令DB
格式:[标号:] DS 表达式
格式:[标号:] DB 字节数据表
功能:从指定的地址开始,保留
功能:字节数据表可以是多个字节数 多少个存储单元作为备用的空间。
据、字符串或表达式,它表示将字节数据表中的 数据从左到右依次存放在指定地址单元。
如: ORG 1000H
Copyright 2006
JC L1 CLR P1.0
SJMP FIN L1:CLR P1.1 FIN:SJMP $
END
;CY=1,转移到 L1 ;CY=0,(40H)≥(50H),点亮 P1.0 连 接的LED1 ;直接跳转到结束等待
;(40H)<(50H),点亮P1.1接的LED2
7. 数据地址赋值伪指令XDATA
格式:符号名 XDATA 表达式
功能:将表达式的值或某个特定 汇编符号定义为一个指定的符号名,可以 先使用后定义,并且用于双字节数据定义。
例如:
DELAY XDATA 0356H
LCALL DELAY ;执行指令后,程 序转到0356H单元执行
Copyright 2006
BUF: DS 50 ;
例如:ORG 1000H
TAB: DB 22H ;22H存放在1032H单元。
TAB: DB 2BH, 0A0H, ‘A’, 2*4 ;
表示从1000H单元开始的地方存放数 据2BH,0A0H,41H(字母A的ASCII码), 08H
MCS-51汇编语言程序设计
判断正误
ORG 0000 LEN1 DATA 31H LEN2 EQU 32H MOV A, LEN1+1 MOV B,LEN2+1 MOV R1,#LEN1 MOV R2,#LEN2 MOV R2,#LEN2+LEN1 ;CNT1 DATA R5 CNT2 EQU R6 ;CNT EQU ADD MOV R3,#LEN1+1 MOV R4,#LEN2+1 MOV DPTR,#TOEND TOEND:SJMP $ LEN1 DATA 31H LEN2 EQU 32H END
用汇编语言与用高级语言进行程序设计很相似。对于比 较复杂的问题可以先根据题目的要求作出流程图,然后 再根据流程图来编写程序。对于比较简单的问题则可以 不作流程因而直接编程。 两者的差别还是很大的。一个很重要的差别就在于用汇 编语言编程时,对于数据的存放位置,以及工作单元的 安排等都要由编程者自己安排。而用高级语言编程时, 这些问题都是由计算机安排的,编程者则不必过问。 主要知识点:顺序程序;分支程序;循环程序; 查表程序;子程序;运算程序 ;
6
基本语法规则3
对于直接地址direct,有多种选择: (1)直接数据地址(各种进制),如MOV A、30H等; (2)标号地址,如MOV A,SUM等, SUM应该在程序中 某处加以定义; (3)带有加减的表达式,设SUM为已定义的标号地址, 如MOV A,SUM十13; (4)特殊功能寄存器名,如MOV A,P2等。
24
程序框架
1. ORG 0000H 2. LJMP MAIN
;跳转至主程序
中断入口地址
3. ORG 0003H 4. LJMP INT0_INT ;跳转至外部中断0的中断服务程序
51单片机汇编语言指令教程(校对版)ppt课件
06
05
04
03
02
01
00
返回前一次
最新课件
19
2.2.3立即寻址
指令本身直接含有所需要的8位或16位的操作数。
将此数称为“立即数”(使用#标明)。如:
MOV A,#30H
;将(8位)立即数送累加器A
MOV DPTR,#2000H ;16位立即数送DPTR积存器
【注意】:MOV A,#30H MOV A,30H 两者的区别。 立即数寻址的指令长度为2或3个字节。
三字节指令在存储器中存放的方式示意图
最新课件
9
指令的字节数与指令的运行时间
指令的字节多是否意味着指令周期就长?
指令
字节数 周期数
MOV A,R0
1
1
MOV A,#0FFH 2
1
MOV 20H,#30H 3
2
MUL AB
1
4
INC DPTR
1
1
指令说明 R0内容送累加器A
立即数FFH送A 立即数30H送内存20h单元
MOV A,00H ;将RAM中00H单元数据送累加器A
MOV A,R0 ;将工作寄存器R0的内容送累加器A
这里使用了不同的寻址方式,其指令的结构也不相同。
前者是:11100101(0E5H)、00000000(00H) 双字节。
后者的机器码是:11101000(0E8H)
单字节;
在物理结构上,R0与RAM的00H单元恰好是同一单元, 所以不同的指令而执行结果是一样的。
或者:指令中分别包含1个字节的操作数和1个字节的操作 数地址。如:
MOV direct,#data 举例:MOV 20H,#0FFH
MCS-51单片机汇编语言概述
1.1 汇编语言的特点
汇编语言是用助记符来表示机器语言的指令代码的。汇编 语言具有如下特点: ① 助记符指令和机器指令一一对应。用汇编语言编写的程序效 率高,占用存储空间小,运行速度快,且能编写出最优化的 程序。 ② 汇编语言与计算机硬件设备密切相关。汇编语言程序能直接 管理和控制硬件设备,直接访问存储器及接口电路,也能处 理中断。 ③ 汇编语言编程比高级语言程序的编写和调试要困难。汇编语 言是面向计算机的,汇编语言的程序设计人员必须对计算机 硬件有相当深入的了解。 ④ 汇编语言缺乏通用性,程序不易移植。各种计算机都有自己 的汇编语言,不同计算机的汇编语言之间不能通用。
① 标号由1~8个ASCII码字符组成,第一个字符必须是字母,其余 字符可以是字母、数字和一些特定字符。
② 不能使用汇编语言中已经定义的符号作为标号,如指令助 记符、 伪指令、专用寄存器的符号名称等均不能用作标号。
③ 标号后必须紧跟一个冒号。
④ 同一个标号在一个程序中只能定义一次,不能重复定义。
⑤ 一条语句可以有标号,也可以没有标号,标号的有无取决于 本程序中的其他语句是否需要访问这条语句。
TBL:
DB
DB
30H 0C0H,0F9H,0A4H 0B0H,99H,92H
第二条伪指令定义了一个常数表,该表的起始地址为 TBL,表中数据按伪指令中数据的顺序排列。
又例如:
DB
“how old are you?”,“A”,“#”
把引号中的字符按ASCII码存于连续的ROM中。
5. DW 定义字命令
其功能是从指定的地址单元开始,定义若干个16位的数据字。 命令格式:
[标号:] DW 字数据表
一个数据字占两个字节。存放时,高8位在前(低地址),低8位在 后(高地址)。例如:
第三章MCS-51指令系统及汇编语言程序设计
指 令 系 统 的 寻 址 方 式
MCS-51指令系统及一般说明 MCS-51指令系统及一般说明
在介绍指令之前, 在介绍指令之前 , 先对指令中使用的一些符号意义进行简单 的说明。 的说明。 direct---直接地址, ---直接地址 ① direct---直接地址,即8位的内部数据存储器单元或特殊 功能寄存器的地址。 功能寄存器的地址。 #data--包含在指令中的8位常数。 --包含在指令中的 ② #data--包含在指令中的8位常数。 #datal6--包含在指令中的16位常数 包含在指令中的16位常数。 ③ #datal6--包含在指令中的16位常数。 rel-- 位的带符号的偏移量。用于SJMP --8 SJMP及所有的条件转移 ④ rel--8位的带符号的偏移量。用于SJMP及所有的条件转移 指令中。 指令中 。 偏移量按相对于下一条指令的第一个字节地址与跳转 后指令第一个字节地址之差计算, 范围内取值。 后指令第一个字节地址之差计算,在-128~+127范围内取值。 128 +127范围内取值 DPTR--数据指针,可用作16位的地址寄存器。 --数据指针 16位的地址寄存器 ⑤ DPTR--数据指针,可用作16位的地址寄存器。
指 令 系 统 的 寻 址 方 式
寄存器间接寻址
寄存器间接寻址方式可用于访问内部RAM 或外部数据存储器 寄存器间接寻址方式可用于访问内部 RAM或外部数据存储器 。 RAM 或外部数据存储器。 这种寻址方式是由指令指定某一寄存器的内容作为操作数的 地址。 地址。 其中(Ri)=40H (Ri)=40 例如 MOV A,@Ri ;(i=0或1),其中(Ri)=40H 这条指令表示从Ri中找到源操作数所在单元的地址, Ri中找到源操作数所在单元的地址 这条指令表示从Ri中找到源操作数所在单元的地址,把该地 址中的内容传送给A 即把内部RAM 40H单元的内容送到累加器A RAM中 址中的内容传送给A。即把内部RAM中40H单元的内容送到累加器A 中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
000EH 000FH
000EH 000FH 000EH 000FH
000EH 000FH
000EH 000FH
000EH 000FH
ORG 0000H MOV P2, #0H ;送地址高八位至P2口 MOV R0, #0EH ;R0= 0EH MOV R1, #0FH ;R1=OFH MOVX A, @R0 ;A=(000EH) MOV 20H, A ;(20H)=(000EH) MOVX A, @R1 ;A=(000FH) XCH A, 20H ; A=(000EH),(20H)=(000FH) MOVX @R1, A MOV A, 20H MOVX @R0, A ; 交换后的数送各单元 SJMP $ END
ORG 3000H TAB: DB 23H ,100,‘A'
2.字节定义 标号: DB(字节常数,或字符或表达式)
功能:指示在程序存储器中以标号 地址 数据
为起始地址的单元里存放的数为
LN
20
字节数据(八位二进制数)。
LN+1 43
例如 LN:DB 32,' C',25H,-1 LN+2 25
;LN~LN+2 地址单元依次存放
6. 位定义 标号 BIT [位地址] 作用: 同EQU指令,不过定义的是位操作地址。 例如 AIC BIT P1.1 。
7.汇编结束 END 作用: 指示源程序段结束。
END指令放在程序的最后。
A51汇编程序还有一些其它的伪指令,列在教材表 3-1 中,以备查阅。
4-2 汇编语言程序设计步骤
一.确定方案和计算方法 二.了解应用系统的硬件配置、性能指标
支持写入单片机或仿真调试的目标程序有两种文 件格式:
·BIN文件和 ·HEX文件,
·BIN 文件是由编译器生成的二进制文件,是程 序的机器码,
·HEX文件是由 INTER公司定义的一种格式,这 种格式包括地址、数据和校验码,并用 ASCII 码来存储,可供显示和打印。 ·HEX 文件需通 过符号转换程序 OHS51进行转换
两种语言的操作过程见图 3-1。
编译器C51
C语言程序
汇编语言 源程序 汇编器A51
浮
动
地 址 目
绝对地址 目标程序
标
.BIN
程
序
·HEX
连接/定位器 L51
符号转换程序 OHS51
图 3-1 两种语言源程序转换成目标程序
目前很多公司将编辑器、汇编器、编译器、连 接/定位器、符号转换程序做成集成软件包,用户进 入该集成环境,编辑好程序后,只需点击相应菜单 就可以完成上述的各步,如 WAVE 、
三.建立系统数学模型,确定控制算法和操作步骤
四.合理分配存储器单元和了解 I/O接口地址
五. 编制源程序 1.按功能设计程序,明确各程序之
间的相互关系
2. 用流程图表示程序结构和功能
3.程序中用注释说明指令在程序中 的作用,方便阅读、调试和修改
开始
?
Y
N
1
常用程序结构 顺序程序、分支程序、
循环程序、子程序 顺序程序设计
第三章 MCS-51单片机汇编语言 程序设计
第三章 MCS-51单片机汇编语言 程序设计
3.1 概述
MCS-51单片机的编程语言可以是汇编语言 也可以是高级语言(如 C语言),高级语言编 程快捷,但程序长,占用存储空间大,执行慢; 汇编语言产生的目标程序简短,占用存储空间 小,执行快,能充分发挥计算机的硬件功能。 无论是高级语言还是汇编语言,源程序都要转 换成目标程序(机器语言)单片机才能执行。
1.起始指令 ORG nn
功能:定义程序或数据块的起始地址。指示此语句后 面的程序或数据块以 nn为起始地址,连续存放在程序 存储器中。
指令地址 机器码
源程序
ORG 2000H
2000H 2002H
78 30 E6
MAIN: MOV R0 ,#30H
MOV A ,@R0 …
3000H 23 3001H 64 3002H 41
用计算机中的汇编程序对用户源程序进行汇编。 用机器汇编要提供给汇编一些信息,遵循汇编程序 的一些约定。这些由伪指令指定。
汇编的主要任务:
1)确定程序中每条汇编语言指令的指令机器码 2)确定每条指令在存储器中的存放地址 3)提供错误信息 4)提供目标执行文件 (*.OBJ/*.HEX) 和列表文件 (*.LST)
作用: 指示在程序存储器中保留以标号为起始地
址的若干字节单元,其单元个数由数值表达式指定。
例如 L1:DS 32 ; 从L1地址开始保留 32个存储单元。 5. 等值指令 标号 EQU(数值表达式)
表示EQU两边的量等值,用于为标号或标识符赋值。 例如: X1 EQU 2000H
X2 EQU 0FH … MAIN: MOV DPTR ,#X1 ; DPTR=2000H ADD A ,#X2 ; A=A+0FH
3. 宏指令 宏汇编功能:将需要反复多次执行的程序段定义
成一个宏指令名(宏定义)。编程时,可在程序中 使用宏指令名来替代被定义的ຫໍສະໝຸດ 序段(宏调用)。宏定义过程 :
宏指令名
MACRO …
ENDM
宏调用过程: …
宏指令名 …
宏指令名
形式参数 ;被定义的程序段
实际参数 实际参数
二.伪指令 常用伪指令及功能:
000EH 000FH
例3-1 编程将外部数据存储 器的 000EH 和000FH 单 元的内容相换。
分析: 外部数据存储器的数据操 作只能用 MOVX 指令,且只能 和A之间传送,因此必须用一个 中间环节作暂存,设用 20H单元。 用R0、R1指示两单元的低八位 地址,高八位地址由 P2指示。 编程过程如下:
LN+3 FF
20H , 43H , 25H ,FFH
3. 字定义 标号:DW (字常数或表达式) GH 12
作用: 指示在程序存储器中以标号为 起始地址的单元里存放的数为字数据
34 GH+2 56
78
(即16位的二进制数),例如:
GH+4 00
GH :DW 1234H ,5678H,08
08
4.保留字节 标号:DS (数值表达式)
KEIL ,WAVE 集成软件的使用见附录 。
? 汇编:将汇编语言源程序转换成机器语言目标 程序的过程称为汇编。
? 汇编程序:能将汇编语言源程序转换成机器语 言目标程序的系统软件称为汇编程序。
汇编的方法:汇编的方法有两种 1.手工汇编:
人工查指令表,查出程序中每条指令对应的机器 代码。早期的计算机使用。 2.机器汇编:
地址
2000H 2002H
机器码
78 30 E6
源程序 ORG 2000H MAIN: MOV R0,#30H
MOV A,@R0 …
一. 汇编语言指令类型
1. 机器指令:指令系统中的全部指令。每条机器 指令都有对应的机器代码,可以被 CPU执行。
2. 伪指令: 汇编控制指令,没有指令代码,只用 于汇编过程,为汇编程序提供汇编信息。