第3章 89C51单片机汇编语言简介汇编

合集下载

第3章 89C51单片机汇编语言简介

第3章 89C51单片机汇编语言简介

第3章89C51单片机汇编语言简介教学目标本章主要介绍89C51单片机的寻址方式、指令系统、基本程序结构及汇编语言程序的编写,并给出了两个简单的应用实例。

通过本章节的学习,读者应初步掌握89C51单片机汇编语言的基本指令,并能够完成一些简单程序的编写和调试。

任务导入:基于汇编语言的静态LED显示系统的实现:利用89C51单片机的I/O端口驱动一个共阳极数码管,在数码管上循环显示0-9数字,时间间隔0.5秒。

任务分析要实现用一个数码管循环显示数字0~9的功能,我们可把数码管的段选线连接到单片的I/O口上,再通过程序让单片机的I/O口分时输出0~9对应的段码就可以了。

单片机的程序又如何编写呢?通过本章的学习,就可以用单片机的汇编语言让数码管按照要求进行显示。

任务必备知识3.1 89C51单片机指令系统3.1.1 89C51单片机指令分类89C51单片机指令系统共有111条指令。

这些指令可按不同方法进行分类:1.按字节数分单字节指令(49条)、双字节指令(45条)、三字节指令(17条)。

2.按指令的执行时间分单机器周期指令(64条)、双机器周期指令(45条)、四机器周期指令(2条)。

3.按指令的功能分数据传送指令(28条)、算术运算指令(24条)、逻辑运算指令(25条)、控制转移指令(17条)、位操作指令(17条)。

指令一般由两部分组成,即操作码和操作数。

在介绍指令系统前,我们先了解一些特殊符号的意义,这对今后程序的编写是相当有用的。

Rn——当前选中的寄存器区的8个工作寄存器R0—R7(n=0-7)。

Ri——当前选中的寄存器区中可作为地址寄存器的两个寄存器R0和R1(i=0,1)direct—内部数据存储单元的8位地址。

包含0—127(255)内部存储单元地址和特殊功能寄存地址。

#data—指令中的8位常数。

#data16—指令中的16位常数。

addr16—用于LCALL和LJMP指令中的16目的地地址,目的地址的空间为64kB程序存储器地址。

89C51单片机课件第3章

89C51单片机课件第3章
Microcomputer Control & Interface Technology
图3―1 寄存器间接寻址示意图
Microcomputer Control & Interface Technology
片内RAM
R0
30H
30H 34H
A
34H

MOV @R0,A间接寻址示意图
Microcomputer Control & Interface Technology
2000H+2
图3-5 相对寻址示意图
Microcomputer Control & Interface Technology
返回
3.4 MCS-51指令系统分类介绍
111条指令,按功能分类,可分为下面5大 类: (1)数据传送类(28条) (2)算术操作类(24条) (3)逻辑运算类(25条) (4)控制转移类(17条) (5)位操作类(17条)
Technology
(3) 只有乘、除两条指令的执行时间为4个机器周期 (48个时钟振荡周期)。 12MHz晶振:机器周期为1s。
3.2 指令格式 两部分组成,即操作码和操作数。 操作码用来规定指令进行什么操作 操作数则是指令操作的对象 有单字节指令、双字节指令、三字节不同长度的指令, 格式不同: (1)单字节指令:指令只有一个字节,操作码和操 作数同在一个字节中。
Microcomputer Control & Interface Technology
A 70H
MOV DPTR,#1600H ;DPTR←#1600H MOV 30H,#40H ;30H单元←#40H
PC PC+1 PC+2 M 1 0 0 程序存储空间 0 0 1 0 0 0 0 0 0 1 0 1 1 0 高位立即数 DPH 0 0 0 0 0 0 0 低位立即数 DPL

89c51计数器汇编语言

89c51计数器汇编语言

89c51计数器汇编语言
89c51是一种8位单片机,具有有限的指令集。

以下是一个简单的89c51计数器的汇编语言程序示例:
```
ORG 0H ;程序起始地址
mov R0,#00H ;将R0寄存器置零
mov R1,#01H ;将R1寄存器置一
LOOP: ;循环开始
inc R0 ;递增R0寄存器的值
;这里可以添加其他要执行的指令
cjne R0,#10H,LOOP ;比较R0寄存器的值和十进制数10,如果不相等则跳转到LOOP标签处,继续执行循环
END ;程序结束
```
这个程序将使用R0寄存器作为计数器,并在R0寄存器的值递增到十进制数10时停止循环。

在循环内部,您可以添加其他要执行的指令来实现更复杂的功能。

教学课件PPT 89C51单片机的C51程序设计

教学课件PPT 89C51单片机的C51程序设计

程序存储器(64K字节)
对应MOVC @DPTR访问
可位寻址片内数据存储器(16字节,128位) 允许位和字节混合访问
间接寻址片内数据存储器(256字节)
可访问片内全部RAM空间
分页寻址片外数据存储器(256字节)
对应MOVX @R0访问
4.2 C51程序设计基础
C51存储类型定义举例:
unsigned char data x,y,z; /*在内部RAM区定义了3个无符号字节型变量x,y,z*/
40M/80M/100M,而且还有很多是单周期的。
4.2 C51程序设计基础
4.2.1 C51变量/常量存储类型
C51存储类型 对应89C51单片机存储器空间
data
直接寻址片内数据存储器(128字节)
xdata
片外数据存储器(64K字节)
说明 访问速度快 对应MOVX @DPTR访问
code bdata idata pdata
序号 语句
1
=
2
if
3
表达式1 ? 表达式2 : 表达式3
4
switch/case
5
while
6
do-while
7
for
8
函数
含义 赋值语句 条件语句 条件运算符 多分支语句 循环语句 循环语句 循环语句 模块化程序设计
4.2 C51程序设计基础
表4-6 常用语句
序号 语句
1
=
2
if
3
表达式1 ? 表达式2 : 表达式3
4.3 C51程序举例
例4:把外部数据RAM中从地址2000H单元开始的100个有符号 数逐一取出,若为正数则放回原单元,若为负数则求补后放回。

单片机89C51指令

单片机89C51指令

MOV @Ri, direct;
0101 011i direct
(direct)
(Ri)
MOV @Ri, #data ;
0111 011I data
#data
(Ri)
Back
(Ri)表示 Ri 中的内容为指定的 RAM 单 元。 MOV 指令在片内存储器的操作功能如 图 3-6 示。
图 3-6 传送指令在片内存储器的操作功能
例如:将片内RAM 65H单元内容47H送A,可执
行指令“MOV A,@R0”。其中R0内容为65H。 如图所示:
以指令中所指定 的R0内容(65H) ① 为指针
数据存储器
R0
65H
地址

② A 47H
将片内RAM 65H 单元内容47H送A
65H ┋
47H
BACK
5、变址寻址(基址寄存器+变址寄存器间接寻址)
@Ri
direct
Rn
#data
direct
将直接地址源 direct 所指出的片内存储单 元中内容传送到直接 地址目的 direct 所 指出的片内存储单元 中 将间接寻址 (Ri 为 R0 或 R1) 所得的片内RAM 单元内容传送到直接 地址 direct 所指出 的片内存储单元中 将立即数传送到直接 地址 direct 所指出 的片内存储单元中
如:(A)=78H,(R5)=47H,(70H)=F2H, 执行指令: MOV R5,A ;(A) R5, (R5)=78H MOV R5,70H ;(70H) R5, (R5)=F2H MOV R5,#A3H; A3H R5, (R5)=A3H 注意,在89C51指令系统中没有“MOV Rn”传送指令。

第三章89C51的指令系统

第三章89C51的指令系统

5)变址寻址
变址寻址是通过“基址寄存器+变址寄存器”来进行间接寻 址 以DPTR(数据指针)或PC(程序计数器)为基址寄存器 以 A作为变址寄存器。 主要是用在查表操作。 例:MOVC A,@A+DPTR 指令代码:93H MOVC A,@A+PC
6)相对寻址
相对寻址:PC中的当前值+指令的第二字节给出的偏移量 ,相加的结果作为相对跳转指令的目的地址。 只在相对转移指令中使用 当前值:正运行指令之后的字节地址,即下一条指令起始 地址。 偏移量是带符号是数,有正负之分,以补码的形式给出, 转移范围是-128 到+127 。 例:JC 06H 指令代码:40H,06H
(A) (A) (A) (Rn) (direct) ((Ri)) 操作
机器周 期
1 1 1 1
振荡周 期
12 12 12 12
字 节
1 2 1 1
(A)0~3
((Ri))0~3
SWAP A
11000100
高4位 位
低4
1
12
1
9、堆栈指令
汇编格式 机器码 操作 机器周期 振荡 周期 字 节
PUSH direct
direct←data
2
24
3
4、以间接地址为目的操作数的指令
汇编格式 机器码 操作 机器 周期 振荡 字 周期 节
MOV
@Ri , A
1111011i
(Ri)←(A)
1
12
1
MOV
@Ri , direct
1010011i direct
(Ri)←(direct)
1
12
2
MOV
@Ri , #data

完全手册 51单片机C语言开发详解之第3章 AT89S51单片机的指令系统

完全手册 51单片机C语言开发详解之第3章  AT89S51单片机的指令系统

技术凝聚实力 专业创新出版
3.2.9 寻址方式与存储器的对应





虽然AT89S51单片机的寻址方式有很多种,但指令对哪一个存储器 空间进行操作是由指令的操作码和寻址方式确定的。一般来说,有 以下几点。 程序存储器:只能采用立即寻址和基寄存器加变址寄存器间接寻址 的寻址方式; 特殊功能寄存器空间:只能采用直接寻址方式,不能采用寄存器间 接寻址方式; 内部数据存储器高128B:只能采用寄存器间接寻址方式,不能采用 直接寻址方式; 内部数据存储器低128B:既能采用寄存器间接寻址方式,又能采用 直接寻址方式; 外部扩展的数据存储器:只能采用MOVX指令访问。
技术凝聚实力 专业创新出版
3.3.1 以累加器A为目的操作数的指令

① MOV A, Rn ; 寄存器寻址,(Rn) → A, n=0~7 ② MOV A, direct ; 直接寻址, (direct)→ A ③ MOV A,@Ri ; 间接寻址, ((Ri))→ A,i=0或1 ④ MOV A,#data ; 立即寻址, data → A 这组指令的功能是把源操作数的内容送到累加器A,源 操作数的内容不发生改变。
技术凝聚实力 专业创新出版
3.3.2 以Rn为目的操作数的指令

① MOV Rn, A ; 寄存器寻址,(A) →Rn ② MOV Rn, direct ; 直接寻址, (direct)→ Rn ③ MOV Rn,#data ; 立即寻址,data →Rn 这组指令的功能是把源操作数的内容送到当前工作寄存 器组R0~R1中的某一个,源操作数的内容不发生改变。
技术凝聚实力 专业创新出版
3.2.6 基址加变址寻址


第3章答案指令系统1-40

第3章答案指令系统1-40

第3章指令系统1,简述下列基本概念:指令,指令系统,机器语言,汇编语言,高级语言。

1、指令:CPU根据人的意图来执行某种操作的命令指令系统:一台计算机所能执行的全部指令集合机器语言:用二进制编码表示,计算机能直接识别和执行的语言汇编语言:用助记符、符号和数字来表示指令的程序语言高级语言:独立于机器的,在编程时不需要对机器结构及其指令系统有深入了解的通用性语言2,什么是计算机的指令和指令系统?2、见第1题。

3,简述89C51汇编指令格式。

3、操作码[目的操作数] [,源操作数]4,简述89C51寻址方式和所能涉及的寻址空间。

5,要访问特殊功能寄存器和片外数据寄存器,应采用哪些寻址方式?5、SFR:直接寻址,位寻址,寄存器寻址;片外RAM:寄存器间接寻址6,在89C51片内RAM中,已知(30H)=38H, (38H)=40H, (40H)=48H, (48H)=90H, 请分析下面各是什么指令,说明源操作数的寻址方式以及按顺序执行每条指令后的结果。

6、MOV A,40H ;直接寻址(40H)→AMOV R0,A ;寄存器寻址(A)→R0MOV P1,#0F0H ;立即数寻址0F0→P1MOV @R0,30H ;直接寻址(30H)→(R0)MOV DPTR,#3848H ;立即数寻址3848H→DPTRMOV 40H,38H ;直接寻址(38H)→40HMOV R0,30H ;直接寻址(30H)→R0MOV P0,R0 ;寄存器寻址(R0 )→P0MOV 18H,#30H ;立即数寻址30H→18HMOV A,@R0 ;寄存器间接寻址((R0)) →AMOV P2,P1 ;直接寻址(P1)→P2最后结果:(R0)=38H,(A)=40H,(P0)=38H,(P1)=(P2)=0F0H,(DPTR)=3848H,(18H)=30H,(30H)=38H,(38H)=40H,(40H)=40H,(48H)=38H 注意:→左边是内容,右边是单元7,对89C51片内RAM的高128字节的地址空间寻址要注意什么7、用直接寻址,位寻址,寄存器寻址8,指出下列指令的本质区别。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第3章89C51单片机汇编语言简介教学目标本章主要介绍89C51单片机的寻址方式、指令系统、基本程序结构及汇编语言程序的编写,并给出了两个简单的应用实例。

通过本章节的学习,读者应初步掌握89C51单片机汇编语言的基本指令,并能够完成一些简单程序的编写和调试。

任务导入:基于汇编语言的静态LED显示系统的实现:利用89C51单片机的I/O端口驱动一个共阳极数码管,在数码管上循环显示0-9数字,时间间隔0.5秒。

任务分析要实现用一个数码管循环显示数字0~9的功能,我们可把数码管的段选线连接到单片的I/O口上,再通过程序让单片机的I/O口分时输出0~9对应的段码就可以了。

单片机的程序又如何编写呢?通过本章的学习,就可以用单片机的汇编语言让数码管按照要求进行显示。

任务必备知识3.1 89C51单片机指令系统3.1.1 89C51单片机指令分类89C51单片机指令系统共有111条指令。

这些指令可按不同方法进行分类:1.按字节数分单字节指令(49条)、双字节指令(45条)、三字节指令(17条)。

2.按指令的执行时间分单机器周期指令(64条)、双机器周期指令(45条)、四机器周期指令(2条)。

3.按指令的功能分数据传送指令(28条)、算术运算指令(24条)、逻辑运算指令(25条)、控制转移指令(17条)、位操作指令(17条)。

指令一般由两部分组成,即操作码和操作数。

在介绍指令系统前,我们先了解一些特殊符号的意义,这对今后程序的编写是相当有用的。

Rn——当前选中的寄存器区的8个工作寄存器R0—R7(n=0-7)。

Ri——当前选中的寄存器区中可作为地址寄存器的两个寄存器R0和R1(i=0,1)direct—内部数据存储单元的8位地址。

包含0—127(255)内部存储单元地址和特殊功能寄存地址。

#data—指令中的8位常数。

#data16—指令中的16位常数。

addr16—用于LCALL和LJMP指令中的16目的地地址,目的地址的空间为64kB程序存储器地址。

#addr11—用于ACALL和AJMP指令中的11目的地地址,目的地址必须放在与下条指令第一个字节同一个2kB程序存储器空间之中。

rel—8位带符号的偏移字节,用于所有的条件转移和SJMP等指令中,偏移字节对于下条指令的第一个字节开始的-128——+127范围内。

@—间接寄存器寻址或基址寄存器的前缀。

/—为操作的前缀,声明对该位操作数取反。

DPTR—数据指针。

bit—内部RAM和特殊功能寄存器的直接寻址位。

A—累加器。

B—累加器B,用于乘法和除法指令中。

C—进位标志位。

(x)—某地址单元中的内容。

((x))—由X寻址单元中的内容。

3.1.2 汇编指令格式各种汇编语言的语句格式是基本相同的,表示如下:[标号:] 操作码助记符[第一操作数] [,第二操作数] [,第三操作数] [;注释]即一条汇编语句是由标号、操作码、操作数和注释四个都分所组成。

其中方括号括起来的是可选择部分,可有可无,视需要而定。

1.标号标号是表示指令位置的符号地址,它是以英文字母开始的字母或数字组成的字符串,并以“:”结尾。

通常在子程序入口或转移指令的目标地址处才赋予标号。

有了标号,程序中的其它语句才能访问该语句。

89C51汇编语言有关标号的规定如下:1)标号是由ASCII字符组成,但头一个字符必须是字母,其余字符可以是字母、数字或其它特定字符。

2)不能使用本汇编语言已经定义了的符号作为标号,如指令助记符,伪指令助记符以及寄存器的符号名称等。

3)标号后边必须跟以冒号。

4)同一标号在一个程序中只能定义一次,不能重复定义。

5)一条语句可以有标号,也可以没有标号,标号的有无决定着本程序中的其它语句是否需要访问这条语句。

下面例举一些例子,以加深了解。

错误的标号正确的标号2BT:(以数字开头)LOOP4:BEGIN(无冒号)STABL:TB+5T:(“+”号不能在标号中出现)TABLE:ADD:(用了指令助记符)Q¥:2.操作码操作码助记符是表示指令操作功能的英文缩写。

每条指令都有操作码,它是指令的核心部分。

操作码用于规定本语句执行的操作,操作码可为指令的助记符或伪指令的助记符,操作码是汇编指令中唯一不能空缺的部分。

3.操作数操作数用于给指令的操作提供数据或地址。

在一条指令中,可能没有操作数,也可能只包括一项,也可能包括二项、三项。

各操作数之间以逗号分隔,操作码与操作数之间以空格分隔。

操作数可以是立即数,如果立即数是二进制数,则最低位之后加“B”;如果立即数是十六进制数,则最低位之后加“H”;如果立即数是十进制数,则数字后面不加任何标记。

操作数可以是本程序中已经定义过的标号或标号表达式,例如MOON是一个已经定义的标号,则表达式MOON+1或MOON-1都可以作为地址来使用。

操作数也可以是寄存器名。

此外,操作数还可以是位符号或表示偏移量的操作数。

相对转移指令中的操作数还可使用一个特殊的符号“$”,它表示本相对转移指令所在的地址,例如:JNB TF0,$ 表示当TF0位不为0时,就转移到该指令本身,以达到程序在“原地踏步”等待的目的。

4.注释注释不属于语句的功能部分,它只是对每条语句的解释说明,它可使程序的文件编制显得更加清楚,是为了方便阅读程序的一种标注。

只要用“;”开头,即表明后面为注释内容,注释的长度不限,一行不够时,可以换行接着写,但换行时应注意在开头使用“;”号。

5.分界符(分隔符)分界符可以是空格、冒号、分号和逗号等。

这些分界符的使用情况如下:1)冒号(:)用于标号之后。

2)空格()用于操作码和操作数之间。

3)逗号(,)用于操作数之间。

4)分号(;)用于注释之前。

例如MOV A,#0AH表示取一个立即数0AH(十六进制,如转换成二进制为00001010B)传送到A累加器。

3.1.3 寻址方式寻址的“地址”即为操作数所在单元的地址,绝大部分指令执行时都需要用到操作数,那么到哪里去取得操作数呢?最易想到的就是告诉CPU操作数所在的地址单元,从那里可取得响应的操作数,这便是“寻址”之意。

89C51的寻址方式很多,使用起来也相当方便,功能也很强大,灵活性强。

下面我们分别讨论几种寻址方式的原理。

1.直接寻址方式指令中操作数直接以单元地址形式出现,例如:MOV A,35H这条指令的意义是把内部RAM中的35H单元中的数据内容传送到累加器A中。

值得注意的是直接寻址方式只能使用8位二进制地址,因此这种寻址方式仅限于内部RAM进行寻址。

低128位单元在指令中直接以单元地址的形式给出。

对于特殊功能寄存器可以使用其直接地址(MOV A,80H)进行访问,还可以以它们的符号形式(MOV A,P0)给出,但是特殊功能寄存器只能用直接寻址方式访问,而无其它方法。

2.寄存器寻址方式寄存器寻址对选定的8个工作寄存器R0-R7进行操作,即操作数在寄存器中,因此指定了寄存器就得到了操作数,寄存器寻址的指令中以寄存器的符号来表示寄存器,例如:MOV A,R3这条指令的意义是把所用的工作寄存器组中的R3的内容送到累加器A中。

需要注意的是工作状态寄存器的选择是通过程序状态字寄存器来控制的,在这条指令前,应通过PSW设定当前工作寄存器组。

3.寄存器间接寻址寄存器寻址方式在寄存器中存放的是操作数,而寄存器间接寻址方式在寄存器中存放的则为操作数的地址,也即操作数是通过寄存器所指向的地址单元得到的,这便是寄存器间接寻址名称的由来。

例如:MOV A,@R1这条指令的意义是R0寄存器指向地址单元中的内容送到累加器A中。

假如R1=#67H,那么是将67H单元中的数据送到累加器A中。

寄存器间接寻址方式可用于访问内部RAM或外部数据存储器。

访问内部RAM或外部数据存储器的低256字节时,只通过R0和R1作为间接寄存器。

然而内部RAM的高128字节地址与专用寄存器的地址是重叠的,所以这种寻址方式不能用于访问特殊功能寄存器。

外部数据存储器的存储空间为64KB,可采用DPTR作为间址寄存器进行访问,例如:MOVX A,@DPTR这条指令的意义是与上述类似,不再赘述。

4.立即寻址立即寻址就是把操作数直接在指令中给出,即操作数包含在指令中,指令操作码的后面紧跟着操作数,一般把指令中的操作数称为立即数。

为了与直接寻址方式相区别,在立即数前加上“#”符号,例如:MOV A,#0CH这条指令的意义是将0CH这个操作数送到累加器A中。

立即数存放在程序存储器中。

5.变址寻址变址寻址是以DPTR或PC作为基址寄存器,以累加器A作为变址寄存器,将两寄存器的内容相加形成16位地址作为操作数的实际地址。

例如:MOV A,@A+DPTRMOVX A,@A+PCJMP@A+DPTR在这三条指令中,A作为偏移量寄存器,DPTR或PC作为变址寄存器,A作为无符号数与DPTR或PC的内容相加,得到访问的实际地址。

其中前两条是程序存储器读指令,后一条是无条件转移指令。

6.位寻址在89C51单片机中,RAM中的20H—2FH字节单元对应的位地址为00H—7FH,特殊功能寄存器中的某些位也可进行位寻址,这些单元既可以采用字节方式访问它们,也可采用位寻址的方式访问它们。

7.相对寻址相对寻址方式是为了程序的相对转移而设计的,以PC的内容为基址,加上给出的偏移量作为转移地址,从而实现程序的转移。

转移的目的地址可参见如下表达式:目的地址=转移指令所在地址+转移指令字接数+偏移量值得注意的是,偏移量是有正负号之分的,偏移量的取值范围是当前PC值的-128—+127之间。

偏移量是以补码形式给出的。

3.1.4 数据传送类指令数据传送指令共有28条,数据传送指令一般的操作是把源操作数传送到目的操作数,指令执行完成后,源操作数不变,目的操作数等于源操作数。

如果要求在进行数据传送时,目的操作数不丢失,则不能用直接传送指令,而采用交换型的数据传送指令,数据传送指令不影响标志CY,AC和OV,但可能会对奇偶标志P有影响。

1.以累加器A为目的操作数类指令(4条)这4条指令的作用是把源操作数指向的内容送到累加器A。

有直接、立即数、寄存器和寄存器间接寻址方式:MOV A, data ;(data)→(A) 直接单元地址中的内容送到累加器A。

MOV A, #data ; #data→(A) 立即数送到累加器A。

MOV A, Rn ;(Rn)→(A) Rn中的内容送到累加器A。

MOV A, @Ri ;((Ri))→(A) Ri内容指向的地址单元中的内容送到累加器A。

2.以寄存器Rn为目的操作数的指令(3条)这3条指令的功能是把源操作数指定的内容送到所选定的工作寄存器Rn中。

有直接、立即和寄存器寻址方式:MOV Rn, data ;(data)→(Rn) 直接寻址单元中的内容送到寄存器Rn。

相关文档
最新文档