实验3 MCS-51 汇编语言指令系统(一)
CH3 MCS-51单片机指令系统-1 单片机优秀课件

2020/7/3
§3-3 寻址方式
寻址方式:寻找操作数存放单元的地址的方式。 1、立即寻址 1)定义
操作数在指令中直接给出,通常把出现在指令中的 操作数称之为立即数,因此就把这种寻址方式称之为 立即寻址。 2)举例
8位立即数操作:MOV A,#data 1620/7/3
MCS-51指令格式: [标号:] [操作码][第一操作数][,第二操作数][;注释]
LOOP: MOV A,#40H ;取参数
§3-2 指令格式
助记符举例:
MOV __ move
传送
XCH __ exchange
交换
ANL __ and logic
与逻辑运算
XRL __ exclusive or logic 异或运算
CH3 MCS-51单片机指令系统及汇编程序设计
内容提要: §3-1 指令系统简介 §3-2 指令格式 §3-3 寻址方式 §3-4 指令系统 §3-5 汇编语言程序设计 CH3 习题课
2020/7/3
2020/7/3
§3-2 指令格式
指令 = 操作码 + 操作数 操作码:表示了该指令所能执行的操作功能。 操作数:表示参加操作的数的本身或操作数所在的地址。
MUL __ multiply
乘法
RR __ rotate right
右循环
SJMP __ short jump
短跳转
RET __ return
子程序返回
§3-2 指令格式
操作数的表示形式: (1)无操作数或操作数隐藏在操作码中
如:NOP RET
(2)只有一个操作数 如:INC A DEC A
(3)有两个操作数 如:MOV A, #00H
MCS51单片机指令系统及汇编语言程序设计

结果为 :(R0)= 7EH,(7EH)=0FFH,(7FH)=3FH。
三、乘法和除法指令 乘法: MUL AB ;(A)×(B),积的低8位在A中,积的
; 高8位在B中; C总为0。
除法: DIV AB ;(A)÷(B),商在A中,余数在B中。
; 若(B)= 0 ,则结果不定,(OV)= 1, ;(C)= 0。
MCS51单片机指令系统及汇编语言程序设计
§3-1 汇编语言与指令系统简介
一、汇编语言程序设计的意义 什么是程序? 完成某项特定任务的指令的集合。 计算机按程序一条一条地依次执行指令,从而完成指定任务。 要让计算机完成各项任务,就应设计各种程序。
程序设计语言: 机器语言: 用二进制代码表示指令和数据。 汇编语言: 用助记符表示指令操作功能,用标号表示操作对象。 高级语言: 独立于机器,面向过程,接近自然语言和数学表达式.
MOV #data, A
Х
等等指令是非法指令。
2、栈操作指令
PUSH direct
POP direct
不影响任何标志位。
PUSH direct 指令执行中,机器自动进行两步操作:
(1) (SP)
(SP)+ 1
(2)((SP)) (direct)
例1、设(SP) = 09H,(DPTR)= 0123H,分析:
小结: 1、逻辑操作分为哪两类操作? 2、循环移位指令每执行一次,移几位? 3、ANL、ORL、XRL指令有哪些使用技巧?
§3-5 控制转移类指令
作用:改变程序计数器PC的值,从而改变程序执行方向。 分为四大类:无条件转移指令;条件转移指令;调用指令; 返回指令。
例4、两个4位BCD码相加,一个存放在(31H)(30H); 另一个存放在(33H)(32H);和数拟回存在(31H) (30H)中,试编程实现之。
MCS-51系列单片机的指令系统和汇编语言程序

3·1 汇编指令第3 章MCS 一51 系列单片机的指令系统和汇编语言程序3·1·1 请说明机器语言、汇编语言、高级语言三者的主要区分,进一步说明为什么这三种语言缺一不行。
3·1·2 请总结:(1)汇编语言程序的优缺点和适用场合。
(2)学习微机原理课程时,为什么肯定要学汇编语言程序?3·1·3MCS 一51 系列单片机的寻址方式有哪儿种?请列表分析各种寻址方式的访问对象与寻址范围。
3·1·4 要访问片内RAM,可有哪几种寻址方式?3·1·5 要访问片外RAM,有哪几种寻址方式?3·1·6 要访问ROM,又有哪几种寻址方式?3·1·7 试按寻址方式对MCS 一51 系列单片机的各指令重进展归类(一般依据源操作数寻址方式归类,程序转移类指令例外)。
3·1·8 试分别针对51 子系列与52 子系列,说明MOV A,direct 指令与MOV A,@Rj 指令的访问范围。
3·1·9 传送类指令中哪几个小类是访问RAM 的?哪几个小类是访问ROM 的?为什么访问ROM 的指令那么少?CPU 访问ROM 多不多?什么时候需要访问ROM?3·1·10 试绘图示明MCS 一51 系列单片机数据传送类指令可满足的各种传送关系。
3·1·11 请选用指令,分别到达以下操作: (1)将累加器内容送工作存放器R6.(2)将累加器内容送片内RAM 的7BH 单元。
(3)将累加器内容送片外RAM 的7BH 单元。
(4)将累加器内容送片外RAM 的007BH 单元。
(5)将ROM007BH 单元内容送累加器。
3·1·12 区分以下指令的不同功能:(l)MOV A,#24H 与MOV A.24H(2)MOV A,R0 与MOV A,@R0(3)MOV A,@R0 与MOVX A,@R03·1·13 设片内RAM 30H 单元的内容为40H;片内RAM 40H 单元的内容为l0H;片内RAM l0H 单元的内容为00H;(Pl)=0CAH。
第三章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条)
MCS-51单片机实验集合(9个实验)

寄存器的初值。
附录A 实 验
二、实验器材 仿真器及附件(电源、仿真头、联机通讯电缆)、直流稳压
电源(最好是单片机专用电源)、逻辑笔、数字万用表各一套。
附录A 实 验
三、实验电路
+ 5V
U2 R1 2 1 7407
附录A 实 验
附录A 实 验
实验一 MCS-51单片机及其开发系统 (仿真器)的认识
实验二 MCS-51指令系统 实验三 MCS-51指令系统综合练习 实验四 中断实验 实验五 显示器与定时中断 实验六 串行通信 实验七 键盘扫描 实验八 A/D转换 实验九 D/A转换
附录A 实 验
实验一 MCS-51单片机及其开发系统(仿真器)的认识
一、实验目的 (1) 了解MCS-51单片机开发常用工具。 (2) 了解仿真器构成、功能及连接。 (3) 掌握MCS-51开发软件(汇编器)安装、功能及基本操作。 (4) 掌握源程序的编辑、汇编、运行(包括连续执行、单步执行和跟踪执
行)。 (5) 掌握汇编语言指令与机器语言指令之间的对应关系。 (6) 掌握ORG、DATA、BIT等伪指令的作用。 (7) 掌握在特定仿真开发系统下浏览、修改特殊功能寄存器、内部RAM、
25 24
23 22
21
U6
+ 5V
1
2 3
4
A0 Vcc A1 WP A2 SCL Vss SDA
8
7 6 P3.4 5 P3.5
33 pF 3.6864 MHZ
8 9C5 2 U4A
1 2
6
INT0
4
74LS21 5
2 4W C0 2
第三章 MCS-51汇编语言指令

ROM
0F87H
…… PC 1005H 0100 0000 PC 1006H 1000 0000 PC …… 1007H ……
取指
执行
00001111 00010000 10001111 00000111
ALU
1007+FF80=0F87H
3.1.7 寻址方式小结 方式 寄存器寻址 直接寻址 利用的变量 R0~R7、A、Cy、 DPTR 使用的空间
ORG伪指令总是出现在每段源程序或数据块的开始位置。 源程序的开始,一般都要设置一条ORG伪指令来指定该程 序在存储器中的起始位置,若省略则默认为0。可多次使 用ORG指令来规定不同程序段的起始地址,但是不允许和 前面指定的地址重叠,即不同的程序段之间不能有重叠。
⒉定义字节伪指令DB(Define Byte) 格式:[标号:] DB 字节数据表 功能:把字节数据表中的数据依次存放在由标号指定 的连续地址单元中。字节数据表中的数据多于一个时 用逗号分隔。
如:MOV A,70H;(A)←(70H) ROM
PC 1110 0101 操作码
直接地址
分析
执行
PC PC
0111 0000
……
SFR …… ACC 01100110 …… 70H 01100110 ……
3.1.4 寄存器间接寻址 指令指定的某一寄存器的内容作为操作数地址。 可用来间接寻址的寄存器有R0、R1、堆栈指针SP 和数据指针DPTR。前面加@表示间接寻址。 可访问内部数据存储器或外部数据存储器。
如:MOV A, @R0;(A)←(R0)
0 0 0 * * 0 0 0
… RS1 RS0 …
ROM PC PC 1110111 0 ……
3 MCS-51单片机的汇编语言指令系统

指令: 指令:SJMP rel
3.2.7 位寻址方式 位处理功能, 位处理功能,可以对数据位进行操作 如:MOV C,3AH , 把3AH位的状态送进位位 位的状态送进位位C 位的状态送进位位 寻址范围: 寻址范围: (1)内部 )内部RAM中的位寻址区 中的位寻址区 单元地址为20H~2FH,共16个单元 位,位地址 , 个单元128位 单元地址为 个单元 是00H~7FH (2)专用寄存器的可寻址位 ) 可供寻址的专用寄存器共有11个 实有寻址位 位 可供寻址的专用寄存器共有 个,实有寻址位83位
3.3.1 数据传送类指令(29条) 数据传送类指令( 条 1. 普通传送指令 MOV <目的操作数 ,<源操作数 目的操作数> 源操作数> 目的操作数 源操作数 源操作数:累加器A、通用寄存器Rn、 direct、 源操作数:累加器A、通用寄存器Rn、直接地址 direct、 间址寄存器和立即数
3.3 MCS-51单片机指令系统 单片机指令系统
指令111条 分为五大类: 指令 条,分为五大类: 数据传送类指令( ) 数据传送类指令(29)条 算术运算类指令( 条 算术运算类指令(24条) 逻辑运算及移位类指令( 条 逻辑运算及移位类指令(24条) 控制转移类指令( 条 控制转移类指令(17条) 位操作类指令( 条 位操作类指令(17条)
(4)以寄存器间接寻址为目的操作数的指令(3条) )以寄存器间接寻址为目的操作数的指令( 条 MOV @Ri , #data ;( )←data ;(Ri) MOV @Ri , direct ;( )←(direct) ;(Ri) ( ) MOV @Ri , A ;(Ri) ( ) ;( )←(A)
第3章 MCS-51单片机的汇编语言指令系统 章 单片机的汇编语言指令系统
3.MCS-51单片机指令系统及汇编语言程序设计

ROM、内部RAM SFR XXH
14
例:MOV A,3AH
程序存储器 内部RAM … …
PC
PC+1
11100101 操作码 00111010 直接地址
3AH
39H
100111111
A 10011111
15
…
3.寄存器寻址
定义:操作数存放在MCS-51内部的某个工作寄存器Rn(R0~R7) 或部分专用寄存器中,这种寻址方式称为寄存器寻址。 特点:由指令指出某一个寄存器的内容作为操作数。存放操作 数的寄存器在指令代码中不占据单独的一个字节,而是嵌入 (隐含)到操作码字节中。寻址范围:四组通用寄存器组Rn (R0~R7)、部分专用寄存器( A, B, DPTR, Cy )。
1000H+30H
PC DPTR
基址寄存器 1000H
变址寄存器 30H 65H
A
20
特点:指令操作码中隐含作为基址寄存器用的DPTR(或 PC )和作为变址用的累加器A。在执行变址寻址指令时, MCS-51单片机先把基地址( DPTR或PC 的内容)和地址偏 移量(A的内容)相加,以形成操作数地址,再由操作数地 址找到操作数,并完成相应的操作。变址寻址方式是单字 节指令。
其中:00H是片内RAM中20H地址单元的第0位。
24
(2)字节地址加位序号的形式。如:
MOV 20H.0, C ; (20H.0)←(Cy) 其中:20H.0是片内RAM中20H地址单元的第0位。
第3章 MCS-51单片机指令系统 与汇编语言程序设计
主要内容: 介绍 MCS-51单片机的寻址方式、指令系统、 基本程序结构及汇编语言的开发和调试。重点在 于寻址方式、各种指令的应用、程序设计的规范、 程序设计的思想及典型程序的理解和掌握。难点 在于控制转移、位操作指令的理解及各种指令的 灵活应用,以及程序设计的基本方法和针对具体 的硬件设计出最合理的软件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验3 MCS-51 汇编语言指令系统(一)
一、实验目的
1) 掌握8051的寻址方式及常用数据传送类指令和算术运算类指令的使用方法。
2) 掌握单步执行程序,查看专用寄存器和单片机RAM的执行结果。
3) 进一步熟悉Keil C51集成开发环境。
二、实验内容
1) 基本指令练习。
2) 数据传送(循环方式)。
3) ) 8051内部RAM的40H~4FH置初值A0H~AFH,然后将40H~4FH的内容传送到外部RAM
中的C000H~C00FH单元,再把外部数据RAM中的C000H~C00FH单元的内容传送到8051内部RAM中的50H~5FH单元。
4) 调试下列程序,熟悉程序调试手段,观测程序运行结果。
ORG 0000H
SJMP MAIN
ORG 0030H
MAIN:
MOV SP,#6FH
MOV R0,#40H
MOV R1,#30H
MOV 30H,#40H
MOV A,#40H
MOV @R0,A ;哪一个存储单元的内容与A中内容相等
INC A
MOV A,@R1 ;A中的内容?哪一个存储单元的内容传给A
PUSH ACC
POP 32H ;SP指针的变化?32H中的内容
MOV A,#5FH
SWAP A ;A中的内容
;上面程序为顺序执行的程序
XUNHUAN1:
MOV R0,#30H
MOV R7,#10H
CLR A ;这3条指令的作用
LOOP1:
MOV @R0,A
INC A
INC R0
DJNZ R7,LOOP1 ;R7的作用
;循环程序执行完之后,指出32H,37H,3BH,3FH存储单元中的值,为什么?
XUNHUAN2:
MOV R0,#30H
MOV R1,#40H
MOV R2,#10H
LOOP2:
MOV A,@R0
MOV @R1,A
DJNZ R2,LOOP2 ;说明这段程序的功能
;上面程序为2个循环程序
;下面为2个数比较程序,最大值存放在30H,最小值存放在31H中
PANDUAN1:
MOV 30H,#10H
MOV 31H,#4BH
MOV R0,#30H
MOV R1,#31H
PAN0:
MOV A,@R0
CLR C
SUBB A,@R1
JNC PAN1
MOV A,@R0
MOV 40H,@R1
MOV @R0,40H
MOV @R1,A
PAN1:
NOP ;注意能不能继续往下运行,为什么
END
三、实验步骤
1)启动计算机。
2)进入Keil C51集成开发环境。
3)建立工程项目文件,选择单片机型号:PHILIPS 公司的P80/P87C52X2。
4)在Keil C51集成开发环境中, 编辑源程序;将源文件添加至工程项目的源文件组中。
5)对源文件进行编译,生成目标代码。
6)运行、调试程序和查看执行结果。
7)分别采用单步、宏单步、执行到光标处等调试手段,调试用户程序,观察有关存储器
单元中的内容。
8)修改有关单元中的内容,再观察有关单元中的内容。
四、思考题
1) 说明每段程序分别完成哪些任务。
2) 若比较程序为3个数比较,数据从大到小排列,最大值放在30H,最小值放在32H。
如果是16个数排序,如何排序,提出编程思路。
五、预习要求
1) 阅读教科书中8051的指令系统,重点掌握的指令有数据传送、判断跳转指令的使用
方法。
2) 阅读Keil C51集成开发软件说明书,掌握集成开发软件的进入、退出、源文件的编
辑和编译等方法。
熟悉各种调试手段。
六、实验报告
1) 将程序加上注释语句,写出程序执行的结果。
2) 回答思考题(第2题的第2个问题选作)。
背景知识
一 MCS-51 共有7 种寻址方式:
1.立即寻址:操作数就写在指令中,和操作码一起放在程序存贮器中。
把“#”号放在立即数前面,以表示该寻址方式为立即寻址,如MOV A,#20H。
2.寄存器寻址:操作数放在寄存器中,在指令中直接以寄存器的名来表示操作数地址。
如MOV A,R0 就属于寄存器寻址,即R0 寄存器的内容送到累加器A中。
3.直接寻址:操作数放在单片机的内部RAM某单元中,在指令中直接写出该单元的地址。
如ADD A,70H 中的70H。
4.寄存器间接寻址:操作数放在RAM 某个单元中,该单元的地址又放在寄存器R0 或R1中。
如果RAM 的地址大于256,则该地址存放在16 位寄存器DPTR(数据指针)中,此时在寄存器名前加@符号来表示这种间接寻址。
如MOV A,@ R0。
5.变址寻址:指定的变址寄存器的内容与指令中给出的偏移量相加,所得的结果作为操作数的地址。
如MOVC A,@A+DPTR
6.相对寻址:由程序计数器中的基地址与指令中提供的偏移量相加,得到的为操作数的地址。
如SJMP rel
7.位寻址:操作数是二进制中的某一位,其位地址出现在指令中。
如SETB bit
二 MCS-51 的指令系统
MCS-51 的指令系统按功能分有:数据传送类、转移指令、算术运算类、逻辑运算类、和十进制指令及一些伪指令。
(1)数据传送类指令(7 种助记符)
MOV(Move):对内部数据寄存器RAM 和特殊功能寄存器SFR 的数据进行传送;
MOVC(Move Code)读取程序存储器数据表格的数据传送;
MOVX (Move External RAM) 对外部RAM 的数据传送;
XCH (Exchange) 字节交换;
XCHD (Exchange low-order Digit) 低半字节交换;
PUSH (Push onto Stack) 入栈;
POP (Pop from Stack) 出栈;
(2)算术运算类指令(8 种助记符)
ADD(Addition) 加法;
ADDC(Add with Carry) 带进位加法;
SUBB(Subtract with Borrow) 带借位减法;
DA(Decimal Adjust) 十进制调整;
INC(Increment) 加1;
DEC(Decrement) 减1;
MUL(Multiplication、Multiply) 乘法;
DIV(Division、Divide) 除法;
三keil的51单片机仿真调试中如何查看内存的内容
在Keil中,调试时编译器给出了寄存器窗口(Register)、中断系统窗口(Interrupt System)、I/O口查看窗口(I/O ports)、串口和定时器设置窗口(serial、Timer)。
但是如何查看某一块内存区域的内容呢?
在Memory窗口中输入址值,得到的结果是程序代码区的内容,由于51是采用的是哈佛结构,程序指令存储和数据存储分开。
要查看各种内存区域的内容,只要在Address框内输入“字母:地址”即可显示相应的内存值。
其中字母可以是C、D、I、X,分别代表的意义是:
C:代码存储空间
D:直接寻址片内存储空间
I :间接寻址片内存储空间
X:扩展的外部RAM空间
如输入“d:0x30”就可显示直接寻址片内30H存储空间的内容了。
还可以使用右键“Modify Memory”选项修改指定内存的内容。