80c51汇编语言指令格式
3_80C51单片机指令系统

③特殊功能寄存器符号加位的表示方法。例如: MOV C,ACC.6 该指令是将累加器A位六的值赋给位累加器C。 ④位名称表示方法,特殊功能寄存器中的一些寻址 位是有名称的。例如: MOV C,F0 该指令等同于MOV C,PSW.5,因为PSW寄存器位 5为F0标志位。 ⑤利用伪指令定义位地址。有关伪指令的内容参见 4.1节。 位寻址方式是80C51单片机的特有功能,丰富的位操 作指令为逻辑运算、逻辑控制以及各种状态标志的设置提 供了方便。
相关寄存器
寻址空间 程序存储器 片内RAM低128B和SFR
R0~R7,A,B,DPTR, CY @R0,@R1,SP @R0,@R1,@DPTR @A+DPTR,@A+PC PC+rel CY,SFR 片内RAM 片外RAM 程序存储器 程序存储器 片内RAM的位寻址区 可以位寻址的特殊功能寄 存器
③注意直接地址和位地址之间的区别。例如: MOV A,30H MOV C,30H 第一条指令是将直接地址30H中的内容(8位二进制 数)送给累加器A;第二条指令是将位地址30H中的内容 (1位二进制数)送给进(借)位标志位CY。 ④直接寻址是访问特殊功能寄存器的惟一方法。
(3)寄存器寻址 此处的寄存器指R0~R7、累加器A、通用寄存器B、 数据指针寄存器DPTR和位累加位C(即进位标志位C)。 寄存器寻址是指在指令中将指定寄存器的内容作为 操作数。因此指定了寄存器就能得到了操作数。例如: MOV A,R0 此指令的功能是将R0中的内容送入累加器A中(如图 3-3所示),即 (A)←(R0) 如通用寄存器R0中的内容为80H,则执行该指令后, 累加器A中的内容为80H。
3 80C51单片机指令系统 单片机指令系统
3.1 概述
指令是计算机能够直接识别和执行的命令,一台计 算机所能执行的全部指令的集合称为指令系统。80C51系 列单片机完全继承了MCS-51的指令系统,共有111条指 令。
第3章 80C51的指令系统

一、16位传送 MOV DPTR,#data 例如: 执行指令 MOV DPTR,#1234H 后 (DPH)=12H,(DPL)=34H。
二、8位传送
1.以A为目的 MOV A, Rn MOV A, direct MOV A, @Ri MOV A, #data 例:若(R1)= 20H,(20H)= 55H, 执行指令 MOV A,@R1 后,(A)= 55H。
PC值
字节数
1000H+02H=1002H RAM 1002H+75H=1077H
当前PC值 偏移量 新PC值 注意 此例中CY PSW.7)为1
如: PSW 10000000 JC rel ; rel=75H
SFR
1077H ROM
3.2.7
位寻址
对位地址中的内容进行操作。指令中给出的是位地址。 寻址空间为:片内RAM的20H~2FH单元中的128可寻址 位;SFR的可寻址位。 位地址四种表示形式: 直接位地址,如0D0H; 位名称,如P; 点操作符,PSW.0或0D0.0;(常用) 用户定义名,JO BIT P
93H
如: MOVC A,@A+DPTR
88H ROM
3.2.6
相对寻址
以程序计数器PC的当前值为基准,加上指令中 给出的相对偏移量 rel 形成目标地址。 rel 是一个带符号的8位二进制数,取值范围是- 128~+127,以补码形式置于操作码之后存放。
00H 1000H 1001H 1002H 40H 75H JC rel
例:将内部RAM50H单元的压缩BCD数转换为 非压缩BCD数存入内部RAM60H,61H单元
MOV
MOV
R0,#61H
@R0,#0
80C51指令表

80C51指令表一、数据传送指令MOV A,Rn ; (Rn)→AMOV A,direct ; (direct)→AMOV A,@Ri ; ((Ri))→AMOV A,#data ; #data→AMOV Rn,A ; (A)→ RnMOV Rn,direct ; (direct)→ RnMOV Rn,#data ; #data→ RnMOV direct,A ; (A)→directMOV direct,Rn ; (Rn)→directMOV direct1,direct2 ; (direct1)→direct2MOV direct,@Ri ; ((Ri))→directMOV direct,#data ; #data→directMOV @Ri,A ; ((Ri))→AMOV @Ri,direct ; (direct)→(Ri)MOV @Ri,#data ; #data→ ((Ri))MOV DPTR,#data16 ; dataH→ DPH,data → LDPL MOVX A,@DPTR ; ((DPTR))→AMOVX @DPTR,A ; (A)→(DPTR)MOVX A,@Ri ; ((Ri))→AMOVX @Ri,A ;(A) →(Ri)MOVC A,@A+PC ; (PC)+1→PC,((A)+(PC))→ A MOVC A,@A+DPTR ; (A)+(DPTR)→APUSH direct ; (SP)+1 → SP,(direct) → (SP) POP direct ;((SP)) → (direct), (SP)-1 → SP XCH A,Rn ; (A) ←→(Rn)XCH A,direct ; (A) ←→(direct)XCH A,@Ri ; (A) ←→((Ri))XCHD A,@Ri ; (A)0~3 ←→((Ri))0~3SWAP A ; (A)0~3 ←→(A)4~7二、算术运算指令ADD A,Rn ; (A) + (Rn)→ AADD A,direct ; (A) + (direct)→ AADD A,@Ri ; (A) + ((Ri))→ AADD A,#data ; (A) + #data→ AADDC A,Rn ; (A) + (Rn) + cy→ AADDC A,direct ; (A) + (direct) + cy→ AADDC A,@Ri ; (A) + ((Ri)) + cy→ AADDC A,#data ; (A) + # data + cy→ ASUBB A,Rn ; (A) - ( Rn) - cy→ ASUBB A,direct ; (A) - (direct) - cy→ ASUBB A,@Ri ; (A) - ((Ri)) - cy→ ASUBB A,#data ; (A) - # data - cy→ AINC A ; (A) + 1 → AINC Rn ; (Rn) + 1 →RnINC direct ; (direct) + 1 →directINC @Ri ; ((Ri)) + 1 → (Ri)INC DPTR ; (DPTR) + 1 → DPTRDEC A ; (A) - 1 → ADEC Rn ; (Rn) - 1 →RnDEC direct ; (direct) - 1 →directDEC @Ri ; ((Ri)) - 1 → (Ri)MUL AB ; (A)·(B) → ABDIV AB ; (A) / (B) 商→ A , 余数→ B DA A ; 对A进行十进制调整三、逻辑操作指令ANL A,Rn ; (A)∧(Rn) → AANL A,direct ; (A)∧(direct) →AANL A,@Ri ; (A)∧((Ri)) → AANL A,#data ; (A)∧#data → AANL direct,A ; (direct)∧(A) →directANL direct,#data ; (direct)∧#data →directORL A,Rn ; (A)∨(Rn) → AORL A,direct ; (A)∨(direct) → AORL A,@Ri ; (A)∨((Ri)) → AORL A,#data ; (A)∨#data → AORL direct,A ; (direct)∨(A) →directORL direct,#data ; (direct)∨#data →directXRL A,Rn ; (A)⊕(Rn) → AXRL A,direct ; (A)⊕(direct) → AXRL A,@Ri ; (A)⊕((Ri)) → AXRL A,#data ; (A)⊕#data → AXRL direct,A ; (direct)⊕(A) →directXRL direct,#data ; (direct)⊕#data →directCLR A ; 0 → ACPL A ; (A) → ARL A ; (A)循环左移1位RLC A ; (A)带进位循环左移1位RR A ; (A)循环右移1位RRC A ; (A)带进位循环右移1位SWAP A ;(A)半字节交换四、位操作指令CLR C ; 0 → cyCLR bit ; 0 → bitSETB C ; 1 → cySETB bit ; 1 → bitCPL C ; (cy) → cyCPL bit ; (bit) → bitANL C,bit ; (cy) ∧(bit) → cyANL C,/bit ; (cy) ∧(bit) → cyORL C,bit ; (cy) ∨(bit) → cyORL C,/bit ; (cy) ∨(bit) → cyMOV C,bit ; (bit) → cyMOV bit,C ; (cy) → bit五、控制转移指令ACALL addr11 ; (PC)+2 → PC , (SP)+1 → SP;(PCL) → (SP),(SP)+1 → SP;(PCH) → (SP),addr11 → PC10~0 LCALL addr16 ; (PC)+3 → PC , (SP)+1 → SP;(PCL) → (SP),(SP)+1 → SP;(PCH) → (SP),addr16 → PCRET ; (SP) → PCH,(SP) -1 → SP;(SP) → PCL,(SP) -1 → SPRETI ; (SP) → PCH,(SP) -1 → SP;(SP) → PCL,(SP) -1 → SPAJMP add11 ; (PC)+2 → PC,;addr11 → CP10~0 LJMP add16 ; addr16 → PCSJMP rel ; (PC)+2 → PC,(PC)+ rel → PC JMP @A+DPTR ; ((A)+(DPTR))→ PCJZ rel ; (A)=0 : (PC)+2 +rel =PC; (A)≠0 : (PC)+2 =PCJNZ rel ; (A)≠0 : (PC)+2 +rel =PC; (A)=0 : (PC)+2 =PCJC rel ; (C)=1 : (PC)+2+rel =PC; (C)=0 : (PC)+2 =PCJNC rel ; (C)=0 : (PC)+2+rel =PC; (C)=1 : (PC)+2 =PCJB bit,rel ; (bit)=1 : 则(PC)+3+rel =PC; (bit)=0 : 则(PC)+3 =PCJNB bit,rel ; (bit)=0 : 则(PC)+3+rel =PC; (bit)=1 : 则(PC)+3 =PCJBC bit,rel ; (bit)=1 : 则(PC)+3+rel =PC, 0 → bit; (bit)=0 : 则(PC)+3 =PCCJNE A,direct,rel ; (A) = (direct), 则(PC)+3 → PC; (A) > (direct), 则(PC)+3+rel → PC,0 → CY; (A) < (direct), 则(PC)+3+rel → PC,1 → CY CJNE A,#data,rel ; (A) = #data, 则(PC)+3 → PC; (A) > #data, 则(PC)+3+rel → PC,0 → CY; (A) < #data, 则(PC)+3+rel → PC,1 → CY CJNE Rn,#data,rel ; (Rn) = #ata , 则(PC)+3 → PC; (Rn) > #ata, 则(PC)+3+rel → PC,0 → CY; (Rn) < #ata, 则(PC)+3+rel → PC,1 → CY CJNE @Ri,#data,rel ; ((Rn)) = #data, 则(PC)+3 → PC; ((Rn)) > #ata, 则(PC)+3+rel → PC,0 → CY; ((Rn)) < #ata, 则(PC)+3+rel → PC,1 → CY DJNZ Rn,rel ; (Rn)-1 → Rn,(Rn)=0,则(PC)+2 → PC;(Rn)≠0,则(PC)+2+rel → PCDJNZ direct,rel ; (direct)-1 → (direct),;(direct) ≠0,则(PC)+3+rel → PC;(direct)=0,则(PC)+3 → PCNOP ; 空操作。
微机原理 单片机 第3章 80C51的指令系统

(2)指令编码字节少。单字节指令有49 条,双字节指令有45条,三字节指令仅 有17条。 (3)位操作指令丰富,这使得80C51单 片机的控制功能方便灵活。
<
>
返回
三、指令编码格式
[标号]: 操作码 [目的操作数] [,源操作数] [;注释]
标号:表示指令的符号地址,可作为转移的目 标地址。 操作码:用来规定该指令要执行的操作性质, 如MOV,ADD,ORL,LJMP等,操作码通常可用1个 字节表示。 操作数:表示在执行过程中所完成的操作对象, 根据指令功能,可有0、1、2、3个操作数,用12个字节表示。 注释:方便用户阅读。
< > 返回
二、指令分类
80C51单片机系统共有111条指令,按指令 功能分为: ♦数据传送(28条) ♦算术运算(24条) ♦逻辑运算(25条) ♦控制转移(17条) ♦位操作指令(17条) 其指令系统的特点是: (1)执行时间短。单机器周期指令有64条,双 机器周期指令有45条,而四机器周期指令仅有 乘、除法2条。当主频为12MHz时,典型指令执 行时间为1us。
+5V C3 K R1 RST
89C51
相应程序:MOV P1,#00H;灯亮
ACALL delay ;延时 MOV P1,#01H;灯灭 ACALL delay
学习指导和要求
• 理解和掌握指令的 三种编码格式; • 熟练掌握七种寻址 方式; • 熟记各种类型的指 令格式及功能,并 能编写简单程序。
80C51的机器指令按编码的字节数可分为 如下三种指令编码格式:
1、单字节指令(49条)
7 0
opcode 7 opcode 3 2 reg 0 0 0 0 0 1 1 1 1
第3章 80C51系列单片机指令系统

一、数据传送类指令
⒈ 内RAM数据传送指令 (15条)
⒉ 16位数据传送指令
⒊ 外RAM传送指令.
(2条)
(4条)
⒋ 读ROM指令
⒌ 堆栈操作指令
(2条)
(2条)
⒍ 交换指令
(5条)
36
⒍ 交换指令(5条) 注意:必须以A为操作数!
⑴ 字节交换指令 ① XCH ② XCH ③ XCH XCHD A,Rn A,@Ri ; A←→Rn,n=0~7 ; A←→(Ri),i=0、1
MOV
A,R0
;将R0中的数据传送至A中
9
⒋ 寄存器间接寻址
间接寻址是根据操作数地址的地址寻找操作数。
R0、R1和DPTR可以作为间接寻址寄存器。
间接寻址用间址符“@”作为前缀。 【例】
MOV MOVX
A,@R0
;将以R0中内容为地址的存储 单元中的数据传送至A中
A,@DPTR;将外RAM DPTR所指存储单元
18
• MOV指令在片内RAM的允许操作图 • 不允许的操作有: • @Ri → @Ri Rn → Rn @Ri → Rn
19
【例】 (70H)=60 (60H)=20H P1=0B7H
• • • • • • • MOV R0,#70H MOV A, @R0 MOV R1,A MOV A,@R1 MOV @R0,P1 结果: (70H)= R1=
① MOV ② MOV ③ MOV Rn,A ;A→Rn,n=0~7
Rn,direct;(direct)→Rn,n=0~7 Rn,#data ;data→Rn,n=0~7
15
⑶ 以直接地址为目的字节的传送指令(5条)
① MOV ② MOV ③ MOV ④ MOV direct,A direct,Rn direct,@Ri ;A→(direct) ;Rn→(direct),n=0~7 ;(Ri)→(direct),i=0、1
51系列单片机指令系统

51系列单片机指令系统MCS-51系列单片机指令系统是用户编制单片机应用程序的主要工具。
5.1.1 指令格式80C51系列单片机指令有两种标识方式:机器语言方式和汇编语言方式。
机器语言方式由二进制代码组成(通常用十六进制表示),被称为机器指令。
1.汇编语言指令格式汇编语言指令的一般格式如下:[标号:] 操作码 [第一操作数][,第二操作数][,第三操作数] [;注释]说明:1)带方括号的部分为可选项2)标号是用符号表示的一个地址常量。
它表示该指令在程序存储器中的起始地址。
标号的命名规则是:必须以字母开头,长度不超过6个字符,并以“:”结束。
3)操作码表示指令的操作功能。
每条指令都有操作码。
4)操作数表示的是参与操作的数据来源和操作之后结果数据的存放位置,可以是常数、地址或寄存器符号。
指令的操作数可能有1个、2个或3个,有些指令可能没有操作数。
操作数与操作数之间用“,”分隔,操作码与操作数之间用空格分隔。
具有保存操作结果的操作数称为目的操作数,只提供数据的称为源操作数。
5)注释字段是编程人员对该指令或该段程序的功能说明,是为了方便阅读程序的一种标注。
注释以“;”开始,当汇编语言源程序被汇编成机器语言程序时,该项被舍弃。
2.机器语言指令格式机器语言指令是一种二进制代码,它包括两个部分:操作码和操作数。
51系列单片机的指令系统中有单字节、双字节和三字节共3种机器指令,其指令格式如下:1)单字节指令在单字节指令中,操作码和操作数共占一个字节,其中操作数通常为以隐含形式指定的常用寄存器。
其指令格式如下:操作码nn其中,方框前面的nn表示这条机器指令在程序中所在的地址位置,后边的方框中是指令的内容,下同。
例如INC DPTR指令,其功能为DPTR←(DPTR)+1。
指令机器码为:操作码1010001151系列单片机中,单字节的机器指令共有49条。
2)双字节指令双字节指令的第一个字节为操作码,第二个字节为操作数或操作数的地址。
第4章 80C51单片机汇编语言程序设计(新)

(1003H)=78H,
(100AH)=-2=0FEH
(1004H)=35H(5的ASCII码),
7
定义数据字命令 DW (Define Word)
在程序存储器中定义16位的数据字。
存放时,数据字的高8位在低地址,低8位在后
高地址。
DW
通常,DB用来定义<数Y1据,Y,2,D…W,Y用n>来定义地址。
机器编辑→交叉汇编→串行传送
*.ASM
地址 8000
8002
机器码 7820
7F07
标号 助记符指令
SORT: MOV R0,#20H
MOV 3
编辑、汇编
编辑:
编写程序的过程称为编辑。 机器编辑指借助于微型机进行单片机的程序设计,通常都是使用编
辑软件进行源程序的编辑。 编辑完成后,生成一个由汇编指令和伪指令构成的扩展名
一般用汇编语言编写的程序需要 预留存放数据的空间用伪指令定义好
然后编写程序代码 最后用原地踏步或返回起始位置循环作为结束。
【例】程序格式如下:
ORG … … SJMP $ END
14
汇编语言程序的基本结构形式
分支结构
使用条件转移指令对程序的执行结果进行判断
教学内容及要求
教学内容
汇编语言程序的基本结构形式、子程序结构形式 80C51单片机汇编语言伪指令 80C51单片机汇编语言程序设计举例
教学要求
掌握顺序结构程序、分支程序、循环程序和子程序等 结构程序的设计等
熟悉单片机汇编程序常用的伪指令 了解汇编语言程序的格式
汇编语言源程序的编辑和汇编
[<标号:>] DS <16位数表>
【例】ADDRTAB:DS 20 ;从标号ADDRTAB代表的地址开始,预留20个 ;连续的地址单元。
80C51的指令系统

3.1 80C51指令系统概述1、计算机常用的编程语言程序是完成某项任务的计算机指令的有序集合。
(1)机器语言:计算机中直接用二进制代码表示的编码(机器数一个数在计算机中的表示形式、原码、反码、补码)称为机器码。
(2)汇编语言:用简单明了的助记符来表示指令的操作码。
面向机器。
将这种符号代码翻译成计算机可识别的机器代码的过程叫汇编。
一种具有翻译功能的程序叫做汇编程序。
(3)高级语言:是更符号化的语言,需要经过复杂的编译程序或解释程序的翻译才能转化为机器代码,因此它比前两种语言占用更多的内存和更长的执行时间。
汇编语言与机器语言相比,好理解、使用方便;与高级语言相比,占用存储空间少、执行速度快、有直接针对输入/输出端口的操作指令。
目前单片机普遍采用汇编语言编程。
2、汇编语言指令格式80C51单片机的汇编指令由操作码和操作数两大部分组成,其指令格式为:【标号:】操作码【操作数1,】【操作数2,】【操作数3,】【;注释】(1)标号:是该指令的符号地址。
当一条指令含有标号时,便于其它指令的引用,以便控制程序的转移或寻址。
必须由大小写英文字母打头,1~8个字母、数字或下划线组成的字符串。
标号不能与寄存器、端口及指令助记符重名。
冒号左边不能有空格。
(2)操作码:即指令助记符,是表示指令功能的英文缩写。
操作码与操作数之间用若干个空格隔开。
(3)操作数:即参与操作的对象。
可以是常数、寄存器、地址和表达式等。
逗号的左边不能有空格。
(4)注释:对指令功能的解释,可有可无。
3.2 指令的寻址方式1、寻址的概念寻找参与操作的数据所在存储器单元的地址2、寻址方式1)立即寻址方式:操作数直接出现在指令中,这种形式的操作数叫做立即数。
“MOV A,#40H”(#表示40H就是一个被传递的东西本身,而不是传递者)2)直接寻址方式:在指令中直接给出参与操作的数据所在内部RAM单元的地址。
这种方式适用于内部RAM的低128字节(00H~7FH)和特殊功能寄存器。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
80C51汇编语言指令格式
================
本篇文档将详细介绍80C51汇编语言的指令格式,包括操作码、操作数、注释以及具体的汇编指令。
最后,将以将十六进制数10h存入累加器A为例,进行实际应用说明。
操作码
---
操作码是汇编指令的核心部分,它表示了指令进行的操作。
具体的操作码需要根据具体的指令来确定。
### 1.1 操作码的含义
操作码指示了指令要执行的操作。
例如,某些操作码可能表示将一个值加载到寄存器中,或者对两个值进行加法运算等。
### 1.2 操作码的格式
操作码通常是一个或者两个字节长,有时也会更长。
每个字节都有特定的含义,根据不同的指令,每个字节可能代表不同的操作。
操作数
---
操作数是汇编指令中指定要执行操作的数据。
它们可以是常量、寄存器、内存地址等。
### 2.1 操作数的定义
操作数可以是常量、寄存器或内存地址等。
寄存器是CPU内部的存储单元,用于存储数据或计算结果。
内存地址则是用于访问存储在内存中的数据。
### 2.2 操作数的格式
操作数的格式会因具体的指令而异。
例如,某些指令可能要求一个立即数作为操作数,而其他指令可能要求一个寄存器和一个内存地址作为操作数。
注释
---
注释是用于解释和说明汇编指令的文本。
它们不会影响程序的执行,但可以帮助理解和维护代码。
### 3.1 注释的作用
注释的主要作用是解释代码的功能、行为和意图,以帮助其他开发者理解代码。
好的注释还可以提供代码的维护性和可读性。
### 3.2 注释的格式
在80C51汇编语言中,注释通常以分号(`;`)开头。
在分号后面的文本都被视为注释。
例如:`; 这是一个注释`。
80C51汇编指令
---------
80C51是一款经典的8位单片机,其汇编指令集包括了多种基本的指令,如数据传输、算术运算、逻辑运算等。
### 4.1 指令的分类
80C51的指令集可以根据功能分为以下几类:数据传输指令、算
术运算指令、逻辑运算指令、控制指令等。
### 4.2 指令的格式
80C51的指令格式通常由操作码和操作数组成。
例如:`MOV A, #10h`是一条将十六进制数10h存入累加器A的指令。
其中,`MOV`是操作码,表示要进行移动操作;`A, #10h`是操作数,表示要将10h 这个值存入累加器A中。
示例:将十六进制数10h存入累加器A中
下面是一个简单的示例,展示了如何使用80C51汇编语言将十六进制数10h存入累加器A中:
```assembly
MOV A, #10h ; 将十六进制数10h存入累加器A中
```
这条指令中,`MOV`是操作码,表示要进行移动操作;`A, #10h`是操作数,表示要将10h这个值存入累加器A中。
这里的`;`表示这是一条注释,用于解释这条指令的作用。