单片机应用技术C语言版MCS51指令系统及汇编
单片机原理及应用课件第3章 mcs-51单片机指令系统和汇编语言程序示例

MOV @R1,P1
;((R1))←(P1)
MOV P2,P1
;(P2)←(P1)
MOV 10H,#20H
;(10H)←20H
执行上述指令后的结果为:(R0)=30H,(R1)=(A)=40H, (B)=10H,(40H)=(P1)=(P2)=CAH,(10H)=20H。
第3章 MCS-51单片机指令系统和汇编语言程序示例
3.2.7 位寻址
位寻址是在位操作指令中直接给出位操作数的地址,可以 对片内RAM中的128位和特殊功能寄存器SFR中的93位进行寻 址。
例如指令MOV C,24H.0;机器码为A2H 20H,相当于 MOV C,20H。
第3章 MCS-51单片机指令系统和汇编语言程序示例
3.3 数据传送类指令
第3章 MCS-51单片机指令系统和汇编语言程序示例
3.3.1 访问片内数据存储器的一般数据传送指令
该类指令的功能是实现数在片内RAM单元之间、寄存器之间、 寄存器与RAM单元之间的传送。所有指令具有统一的格式,其格 式如下:
MOV <目的操作数>,<源操作数>;目的操作数单元←源操 作数(或单元)
操作码助记符都是"MOV",目的操作数和源操作数不同寻址 方式的组合就派生出该类的全部指令。因此,记忆这类指令的关 键在于掌握两个操作数的各种寻址方式的组合关系。
指令:MOV A,#5AH 机器码:74H 5AH
第3章 MCS-51单片机指令系统和汇编语言程序示例 3.2.2 寄存器寻址
在指令选定的某寄存器中存放或读取操作数,以完成指令规 定的操作,称为寄存器寻址。
例如:MOV A,R7指令中源操作数和目的操作数都是寄存 器寻址。该指令的功能是把工作寄存器R7中的内容传送到累加器A 中,如R7中的内容为30H,则执行该指令后A的内容也为30H。
MCS51单片机指令系统

第一条指令为远查表指令,可以在64K的程序存储器空间寻 址。基地址寄存器为DPTR,其意思为,DPTR里面存放的是 程序存储器中数据表格的首地址,A为数据地址的偏移量。
这条指令执行以后,以 (A)+(DPTR)的数值为地址数 据就送进A里面来了,也就是从表格首地址开始以后的第(A) 个数据被送进A了。(举例子说明)
编写好的程序都放在程序存储器中,由于一个存储地址所 指示的存储单元只能存放一字节的数据。所以,在存放指令时, 必须将指令拆分成一个一个字节进行连续存放。
比如: 实现“累加器加10H”这条指令,其机器语言为 0111010000010000, 占用了两个字节,就必须拆成两个字节 进行连续存储。
但是,用二进制来表示比较麻烦,因此,也常用十六进制来 表示如:74H 10H来表示以上这条机器语言。可见,用十六进 制表示指令比较简单,但是,指令系统有上百条指令,不易记 住。所以,一般采用容易记住的一些缩写符号来表示机器语言,
2. 在指令中直接给出操作数的地址, 这种寻址方式就属
于直接寻址方式。在这种方式中, 指令的操作数部分直接 是操作数的地址。
比如:MOV A,30H;将30H里面的数送到A里面 MOV 21H,30H;将30H里面的数存放到21H里面 在MCS -51 单片机指令系统中, 直接寻址方式中可
以访问 3 种存储器空间: (1) 内部数据存储器的低 128 个字节单元(00H~
7. 位寻址 指按照位进行的寻址操作,(前面讲的都是按字节进
行的寻址操作)。该种寻址方式中, 操作数是内部RAM单元 中20H到2FH的128个位地址以及SFR中的11个可进行 位寻址的寄存器中的位地址寻址。
比如:MOV C,20H;就是将RAM中位寻址区中20H位地 址中的内容送给C。区别与MOV A,20H;这个是将内部 RAM中20H单元的内容送给A。
第3章MCS-51单片机指令系统及汇编语言程序设计2[93页]
![第3章MCS-51单片机指令系统及汇编语言程序设计2[93页]](https://img.taocdn.com/s3/m/aac9cbb603d8ce2f006623f1.png)
3、 高级语言:
如C、BASIC、FORTRAN、 PASCAL 及COBOL等 特点:直观、易学、易懂,而且通用性强,易于移植到不 同类型的机器中去。
计算机也不能直接识别和执行高级语言,需要将其转 换为机器语言才能识别和执行。对于高级语言,这一转换工 作通常称为编译或者解释。进行编译或者解释的专用程序称 为编译程序或者解释程序。
【标号: 】助记符(操作码)【操作数(参数)】 ;【注释】
(2)伪指令语句的格式: 名字 定义符 参数 ;注释 两种语句都由四个部分组成。其中每一部分称为域或
字段,各字段之间用一个空格或字段定界符分隔,常用的 字段定界符有冒号“:” 、逗号“,”和分号“;”。其 中方括号括起来的是可选择部分。
标号(也称为名字) 域:
例:把片外存储器2200H单元中的数送入片内30H单元中。
标号域 操作码域 操作数域
注释域
BEGIN:MOV DPTR,#2200H ;(DPTR)=2200H
MOV R0,#30H
;(R0)=30H
MOVX A,@DPTR ;(A)=((DPTR))
MOV @R0,A
;((R0))=(A)
3.4.3 汇编语言的伪指令
操作数域: 是参与运算或进行其它操作的数据或这些数据的地址。
• 操作数与操作码之间用空格分隔,若有两个操作数,这 两个操作数之间必须用逗号“,”分开。操作数域若是数 据的直接或间接地址,则必须满足寻址方式的规定。
• 对于操作数域出现的常数:
•若采用十六进制数表示,其末尾必须加“H”说明;若十六进 制数以A、B、C、D、E、F开头,其前面必须添一个“0” 。
单片机技术及应用
第三章 MCS-51指令系统 与汇编语言程序设计
MCS-51单片机汇编指令集

MCS-51单片机汇编指令集2009-06-01 13:56MCS-51单片机汇编指令集(1)数据传送类指令(7种助记符)1.MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;2.MOVC(Move Code)读取程序存储器数据表格的数据传送;3.MOVX (Move External RAM) 对外部RAM的数据传送;4.XCH (Exchange) 字节交换;5.XCHD (Exchange low-order Digit) 低半字节交换;6.PUSH (Push onto Stack) 入栈;7.POP (Pop from Stack) 出栈;(2)算术运算类指令(8种助记符)1.ADD(Addition) 加法;2.ADDC(Add with Carry) 带进位加法;3.SUBB(Subtract with Borrow) 带借位减法;4.DA(Decimal Adjust) 十进制调整;5.INC(Increment) 加1;6.DEC(Decrement) 减1;7.MUL(Multiplication、Multiply) 乘法;8.DIV(Division、Divide) 除法;(3)逻辑运算类指令(10种助记符)1.ANL(AND Logic) 逻辑与;2.ORL(OR Logic) 逻辑或;3.XRL(Exclusive-OR Logic) 逻辑异或;4.CLR(Clear) 清零;5.CPL(Complement) 取反;6.RL(Rotate left) 循环左移;7.RLC(Rotate Left throught the Carry flag) 带进位循环左移;8.RR(Rotate Right) 循环右移;9.RRC (Rotate Right throught the Carry flag) 带进位循环右移;10.SWAP (Swap) 低4位与高4位交换;(4)控制转移类指令(17种助记符)1.ACALL(Absolute subroutine Call)子程序绝对调用;2.LCALL(Long subroutine Call)子程序长调用;3.RET(Return from subroutine)子程序返回;4.RETI(Return from Interruption)中断返回;5.SJMP(Short Jump)短转移;6.AJMP(Absolute Jump)绝对转移;7.LJMP(Long Jump)长转移;8C.JNE (Compare Jump if Not Equal)比较不相等则转移;9D.JNZ (Decrement Jump if Not Zero)减1后不为0则转移;10.JZ (Jump if Zero)结果为0则转移;11.JNZ (Jump if Not Zero) 结果不为0则转移;12.JC (Jump if the Carry flag is set)有进位则转移;13.JNC (Jump if Not Carry)无进位则转移;14.JB (Jump if the Bit is set)位为1则转移;15.JNB (Jump if the Bit is Not set) 位为0则转移;16.JBC(Jump if the Bit is set and Clear the bit) 位为1则转移,并清除该位;17.NOP (No Operation) 空操作;(5)位操作指令(1种助记符)1.SETB(Set Bit) 位置1。
3第三章 MCS-51单片机指令系统与汇编语言《单片机原理与项目实践——基于C语言》课件

类型
助记符格式
CLR A
清零
CLR C CLR bit RL A RLC A
循环移位 RR A RRC A
执行的操作 A←0
C←0 bit←0 A左移一位 A带进位左移一位
A右移一位 A带进位右移一位
指令说明 累加器清零指 令 位清零指令
循环左移指令 带进位循环左 移指令 循环右移指令 带进位循环右 移指令
类型 片内RAM传送
助记符格式 MOV A,Rn MOV A,direct MOV A,@Ri MOV A,#data MOV Rn,A MOV Rn,direct MOV Rn,#data MOV direct,A MOV direct,Rn MOV direct,direct MOV direct,@Ri MOV direct,#data MOV @Ri,A MOV @Ri,direct MOV @Ri,#data MOV DPTR,#data16
指令说明 不带进位加法指令
带进位加法指令
带借位减法指令
加1指令
类型 减1 乘法 除法 调整
助记符格式 执行的操作 指令说明
DEC A
A←A-1
减1指令
DEC Rn Rn←Rn-1
DEC @Ri (Ri)←(Ri)-1
DEC direct DPTR←DPTR-
1
MUL AB DIV AB
BA←A×B高位 乘法指令 存B,低位存A A←A/B(商), 除法指令 B←余数
以@DPTR为目 的操作数的传送
类型 ROM传送 堆栈指令
数据交换
助记符格式 MOVC A,@A+PC MOVC A,@A+DPTR
PUSH direct
单片机指令系统、汇编程序设计、C51程序设计

1.机器指令
用二进制代码表示的指令称为机器语言 指令,也称机器码。 例如:“累加器A加1”指令用二进制数表示 时,是“00000100”,在程序存储器中占用一 个字节单元。
2.汇编语言指令
用容易记忆的缩写符号表示机器语言指令就 是汇编语言指令。例如,“ A 加 B” 用英语写出来是 “ Add B to A” ,缩写成“ ADD A , B” 。这个“ ADD A , B” 就是汇编语言指令。 MCS-51 单片机的开发商 约定:“ADD A,B”与25F0H对应。我们将“ADD”缩 写符号称为“助记符”。 编写机器语言程序实质上就是用汇编语言编 写程序。
例 3 设内部 RAM 中的 30H 单元的内容为 50H ,试分 析执行下面程序后各有关单元的内容。 MOV MOV MOV MOV MOV MOV 60H,#30H R0,#60H A,@R0 R1,A 40H,@R1 60H,30H
2.16位数据传送指令
MOV DPTR, #data16 ;(DPTR)←data16
MSC-51单片机指令系统中仅此一条传送 16位数据的指令,功能是将16位数据送入寄 存器DPTR中,其中数据的高8位送入DPH中, 低8位送入DPL中。
[标号:]操作码[目的操作数][,源操作数];[注释] LOOP: MOV A, 3AH ; (A)←(3AH)
1.标号
标号是语句地址的标志符号,代表该语句指令代 码第一个字节的地址。 (1)标号由1~8个ASCII字符组成,且第一个字 符必须是字母,其余字符可以是字母、数字或其 他特定字符。 (2)不能使用该汇编语言已经定义了的符号作为 标号。如指令助记符、寄存器符号名称等。 (3)标号后必须跟冒号。
MCS51-C语言编程
COMPACT
LARGE
指针
在汇编语言程序中,要取存贮单元m的内容可用直接寻 址方式,也可用寄存器间接寻址方式 ,如果用R1寄存 器指示m的地址,用@R1取m单元的内容。 在C语言中用变量名表示取变量的值(相当于直接寻址), 也可用另一个变量(如P)存放m的地址,P就相当于R1寄 存器 。用*P取得m单元的内容(相当于汇编的间接寻址 方式)这里P即为指针型变量。
函数
库函数 库函数是编译系统为用户设计的一系列标准函 数 用户自定义函数 用户根据任务编中直接编写51单片机的中 断服务程序,C51编译对函数定义进行了扩展,增加了 一个关键字interrupt,interrupt是函数定义时的一 个选项,加上它函数将函数定义成中断服务函数 函数类型 函数名(形式参数表) [interrupt n][using n]
中断举例
#include <reg51.h> sbit P1_0=P1^0; void timer0 (void) interrupt 1 using 1 { /*T0 中断服务程序入口*/ P1_0 =! P1_0; TH0=-(1000/256); /*计数初值重装*/ TL0=-(1000%256); } void main(void) { TMOD=0x01; /*T0工作在定时器方式1*/ P1_0=0; TH0=-(1000/256); /*预置计数初值*/ TL0=-(1000%256); EA=1; /*CPU开中断*/ ET0=1; /*T0开中断*/ TR0=1; /*启动T0*/ do{} while(1); }
指针定义
MCS-51有不同的存贮空间,不同的地址范围,即使对 于同一外部数据存贮器,又有用@Ri分页寻址(Ri为八 位)和用@DPTR寻址(DPTR为十六位)两种寻址方式
单片机-第三章MCS-51单片机的指令系统
rel=F2H
操作码 偏移量
ALU
(PC)=2112H
.
2025H
. . .
. . .
修正后转移 目标地址 D (PC) = 2104H
(PC) = 2 1 1 2 H Rel ) = FFF 2 H D = 2104H
7、位寻址
Bit Addressing
以访问触发器的方式,对内部RAM、SFR 的位地址空间进行访问,称为位寻址。位地址
⑸ 立即数送寄存器
MOV Rn,#data (n=0~7)
;立即数#data送累加器 Rn 双字节指令,机器码的第一字节为 78H~7FH,第二字节为立即数
机器码
78H~7FH
立即数
⑹ 累加器内容送寄存器Rn
MOV Rn ,A (n=0~7) 机器码 F8H~ FFH ;累加器A的内容送Rn 单字节指令,机器码相应为F8H~FFH ⑺ 内RAM或SFR内容送寄存器Rn
寻址空间: 程序存储器
指令的三种形式: 一般为双字节或三字节指令 操作码
操作码 rel 直接地址 rel
操作码
立即数 rel
例: JNZ rel
; 累加器A不等零则转移 设:rel=23H
ROM
PC PC 2000H 2001H
70H 23H . . . . . . .
PC
2002H 下一条指令
rel=23H
布尔处理机 共221位
布尔运算器ALU 布尔累加器CY(PSW.7) 布尔RAM区 共128位 布尔I/O口 P0~P3口每位都可 做布尔I/O口 布尔指令子集 17条布尔指令
指令中使用的符号 n=0~7 Rn —当前选中寄存器区的8个工作寄存器(R0~R7)
MCS-51单片机C语言第2章
• 操作码:是由助记符表示的字符串,它规定了指令要完成 的具体操作。 • 操作数:是指参加操作的数据或数据的地址。 • 注释:是为该条指令所做的说明,以便于阅读,中英文不 限,用“;”与指令分开。
第2章 MCS-51系列单片机的指令统及汇编语言程序设计
2.1.1 指令格式
• 在指令的描述中经常用到一些特殊符号,介绍如下:
第2章 MCS-51系列单片机的指令统及汇编语言程序设计
2.1.2 MCS-51单片机寻址方式
– 位寻址方式的寻址范围包括以下两种情况:
• (1)内部RAM中的位寻址区。单元地址为20H~ 2FH,共16个单元,128个位,位地址为00H~ 7FH。 • (2)特殊功能寄存器中的可寻址位。可供位寻址 的特殊功能寄存器有11个,共有88个位,其中5位 没有定义,所以有可寻址位83位。
第2章 MCS-51系列单片机的指令统及汇编语言程序设计
2.1.2 MCS-51单片机寻址方式
– 2. 直接寻址
• 例:MOV A,30H ;将30H单元的内容给累加器 A,即(A)←(30H) • 操作数(源操作数)是直接给出内部RAM中某个单 元的地址或名称(特殊功能寄存器),这种寻址方 式称为直接寻址 。 • 直接寻址方式的寻址范围包括:
2.2.1 数据传送和交换类指令
• 例2.1 设计一个最简单的程序,让图2.2所 示电路中VD0~VD4发光,VD5~VD7熄灭。 • 解:ORG 0000H ;定位伪指令,参见 2.3.1节 • MOV P1,#1FH ;P1←00011111B • END ;结束伪指令,参见2.3.1节
第2章 MCS-51系列单片机的指令统及汇编语言程序设计
第2章 MCS-51系列单片机的指令统及汇编语言程序设计
MCS-51单片机指令系统及编程举例
MCS-51单片机指令系统及编程举例微机原理及应用对于任何一台计算机,必须有软件(程序)的支持,才能工作。
但是市场上所售的单片机是裸机,在使用之前要现对它编程,将程序固化在芯片内,才能使用。
指令系统是一种CPU所能直接执行的所有命令的集合,CPU的主要功能是由它的指令系统来体现的。
任何计算机语言编写的任何程序,都必须转换为指令系统中相应指令代码的有序集合,CPU才能执行单片机的指令系统是单片机能够识别并执行的所有指令的集合。
3.1指令系统简介每一种CPU都有其独立的指令系统。
MCS-51系列单片机指令系统共有111条指令,其中有49条单字节指令,45条双字节指令和17条三字节指令。
MCS-51指令系统的功能十分强大,它把体现单片机的各种功能的寄存器组织在统一的地址空间中,MCS-51指令系统在其存储空间、时间的利用率及工作效率方面都是较高的。
1.指令格式MCS-51指令系统中的每一条指令都有两级指令格式:CPU可直接识别并执行的机器语言指令(机器语言)。
汇编语言指令(简称汇编指令)。
符号说明:见书上.P.34[标号:]操作码[目的操作数][,源操作数][;注释]例:LOOP:MOVA,R1;AR1MOVA,R1INCNOPA3.2寻址方式所谓寻址方式就是寻找或获得操作数的方式。
指令的一个重要组成部分是操作数。
由寻址方式指定参与运算的操作数或操作数所在单元的地址。
立即寻址:操作数直接出现在指令中,可以是8位,也可是16位。
该方式寻址中的操作数称为立即数,用“#”表示。
例:MOVA,#30H;A30H执行结果:A=30H例:MOVDPTR,#1000H;DPTR1000H执行结果:DPTR=1000H,注意:只有MOVDPTR,#date16指令的立即数为16位,DPTR分为DPH和DPL,在上述例子中,DPH=10H,DPL=00H直接寻址:操作数的地址直接出现在指令中。
这类寻址方式的操作数只能是存放在内部RAM和SFR中。