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)和特殊功能寄存器。
80C51系列单片机指令表
80C51系列单片机指令表80C51系列单片机指令以A开头的指令有18条,分别为:ACALL addr11ADD A,RnADD A,directADD A,@RiADD A,#dataADDC A,RnADDC A,directADDC A,@RiADDC A,#dataAJMP addr11ANL A,RnANL A,directANL A,@RiANL A,#dataANL direct,AANL direct,#dataANL C,bitANL C,/bit1. ACALL addr11指令名称:绝对调用指令指令代码:A10 A9 A8 1 0 0 0 1 A7 A6 A5 A4 A3 A2 A1 A0指令功能:构造目的地址,进行子程序调用。
其方法是以指令提供的11位地址(al0~a0),取代PC的低11位,PC的高5位不变。
操作内容:PC←(PC)+2SP←(SP)+1(SP)←(PC)7~0SP←(SP)+1(SP)←(PC)15~8PC10~0←addrl0~0字节数:2机器周期:2使用说明:由于指令只给出子程序入口地址的低11位,因此调用范围是2KB。
2. ADD A,Rn指令名称:寄存器加法指令指令代码:28H~2FH指令功能:累加器内容与寄存器内容相加操作内容:A←(A)+(Rn),n=0~7字节数:1机器周期:1影响标志位:C,AC,OV3. ADD A,direct指令名称:直接寻址加法指令指令代码:25H指令功能:累加器内容与内部RAM单元或专用寄存器内容相加操作内容:A←(A)+(direct)字节数:2机器周期:1影响标志位:C,AC,OV4. ADD A,@Ri指令名称:间接寻址加法指令指令代码:26H~27H指令功能:累加器内容与内部RAM低128单元内容相加操作内容:A←(A)+((Ri)),i=0,1字节数:1机器周期:1影响标志位:C,AC,OV5. ADD A,#data指令名称:立即数加法指令指令代码:24H指令功能:累加器内容与立即数相加操作内容:A←(A)+data字节数:2机器周期:1影响标志位:C,AC,OV6. ADDC A,Rn指令名称:寄存器带进位加法指令指令代码:38H~3FH指令功能:累加器内容、寄存器内容和进位位相加操作内容:A←(A)+(Rn)+(C),n=0~7字节数:1机器周期:1影响标志位:C,AC,OV7. ADDC A,direct指令名称:直接寻址带进位加法指令指令代码:35H指令功能:累加器内容、内部RAM低128单元或专用寄存器内容与进位位加操作内容:A←(A)+(direct)+(C)字节数:2机器周期:1影响标志位:C,AC,OV8. ADDC A,@Ri指令名称:间接寻址带进位加法指令指令代码:36H~37H指令功能:累加器内容、内部RAM低128单元内容及进位位相加操作内容:A←(A)+((Ri))+(C),i=0,1字节数:1机器周期:1影响标志位:C,AC,OV9. ADDC A,#data指令名称:立即数带进位加法指令指令代码:34H指令功能:累加器内容、立即数及进位位相加操作内容:A←(A)+data+(C)字节数:2机器周期:1影响标志位:C,AC,OV10. AJMP addr11指令名称:绝对转移指令指令代码:A10 A9 A8 1 0 0 0 1 A7 A6 A5 A4 A3 A2 A1 A0指令功能:构造目的地址,实现程序转移.其方法是以指令提供的11位地址,取代PC的低11位,而PC的高5位保持不变.操作内容:PC←(PC)+2PCl0~0←addrll字节数:2机器周期:2使用说明:由于addrll的最小值是000H,最大值是7FFH,因此地址转移范围是2KB.11. ANL A,Rn指令名称:寄存器逻辑与指令指令代码:58H~5FH指令功能:累加器内容逻辑与寄存器内容操作内容:A←(A)∧(Rn),n=0~7字节数:1机器周期:112. ANL A,direct指令名称:直接寻址逻辑与指令指令代码:55H指令功能:累加器内容逻辑与内部RAM低128单元或专用寄存器内容操作内容:A←(A)∧(diret)字节数:2机器周期:113. ANL A,@Ri指令名称:间接寻址逻辑与指令指令代码:56H~57H指令功能:累加器内容逻辑与内部RAM低128单元内容操作内容:A←(A)∧((Ri))i=0,1字节数:1机器周期:114. ANL A,#data指令名称:立即数逻辑与指令指令代码:54H指令功能:累加器内容逻辑与立即数操作内容:A←(A)∧data字节数:2机器周期:115. ANL direct,A指令名称:累加器逻辑与指令指令代码:52H指令功能:内部RAM低128单元或专用寄存器内容逻辑与累加器内容操作内容:direct←(A)∧(direct)字节数:2机器周期:116. ANL direct,#data指令名称:逻辑与指令指令代码:53H指令功能:内部RAM低128单元或专用寄存器内容逻辑与立即数操作内容:direct←(direct)∧data字节数:3机器周期:217. ANL C,bit指令名称:位逻辑与指令指令代码:82H指令功能:进位标志逻辑与直接寻址位操作内容:C←(C)∧(bit)字节数:2机器周期:218. ANL C,/bit指令名称:位逻辑与指令指令代码:B0H指令功能:进位标志逻辑与直接寻址位的反操作内容:C←(C)∧(bit)字节数:2机器周期:280C51系列单片机指令以C开头的指令有10条,分别为: CJNE A,dircet,relCJNE A,#data,relCJNE Rn,#data,relCJNE @Ri,#data,relCLR ACLR CCLR bitCPL ACPL CCPL bit1. CJNE A,dircet,rel指令名称:数值比较转移指令指令代码:B5H指令功能:累加器内容与内部RAM低128字节或专用寄存器内容比较,不等则转移。
单片机第三章(80C51的指令系统)(12)
2、寄存器间接寻址 、
指令中指出某一个寄存器的内容为操作数的地址, 以符号“ 指令中指出某一个寄存器的内容 为操作数的地址,以符号 “ @ ” 表 为操作数的地址 寄存器中出现的数并不是参加操作的数据本身, 示。寄存器中出现的数并不是参加操作的数据本身,而是操作数在存储 器中的存放 , ;(A)←(( )) ) ((R0)) (( 若(R0)=30H,(30H)=40H,则执行该指令后(A)=40H。如下 ) , ) ,则执行该指令后( ) 。 图所示。 图所示。 ROM PC 11100110 R0 RAM(内) ( (00H) ) RAM(内) ( A
第三章 指令系统
3-1 指令的常用表达方式和寻址方式
一、 指令的表达方式 机器语言指令: 进制代码表示 常以16进制表示 进制代码表示。 进制表示。 机器语言指令:用2进制代码表示。常以 进制表示。 汇编语言指令: 由助记符表示, 汇编语言指令 : 由助记符表示 , 分别与机器语言指令 相对应。 相对应。
#date16: 表示 位立即数,即16位常数,取值 表示16位立即数 位立即数, 位常数, 位常数 范围为#0000H~#0FFFFH 范围为 ~ rel: 用补码形式表示的地址偏移量,取值范围为 用补码形式表示的地址偏移量, -128~+127。 ~ 。 bit: 表示内部 表示内部RAM和SFR中的具有位寻址功能 和 中的具有位寻址功能 的位地址。SFR中的位地址可以直接出现在指令中, 的位地址。 中的位地址可以直接出现在指令中, 中的位地址可以直接出现在指令中 为了阅读方便,往往也可用SFR的名字和所在的数 为了阅读方便,往往也可用SFR的名字和所在的数 位表示。 表示PSW中奇偶校验位,可写成 中奇偶校验位, 位表示。如:表示 中奇偶校验位 可写成D0H, , 也可写成PSW.0的形式出现在指令中。 的形式出现在指令中。 也可写成 的形式出现在指令中 @: 表示间接寻址寄存器或基址寄存器的前缀符 号。 $: 表示当前指令的地址。 表示当前指令的地址。
(参考资料)80C51指令集
代码 E8--EF
E5 E6--E7
74 F8--FF A8--AF 78--7F
F5 88—8F
85 86;87
75 F6;F7 A6;A7 76;77
90 A2 92 93 83 E2;E3 E0 F2;F3 F0 C0 D0 C8—CF C5 C6;C7 D6;D7
2.逻辑运算指令 助记符
ANL A,Rn ANL A,data ANL A,@Ri ANL A,#data ANL data,A ANL data,#data ANL C,bit ANL C,/bit ORL A,Rn ORL A,data ORL A,@Ri ORL A,#data ORL data,A ORL data,#data ORL C,bit ORL C,/bit XRL A,Rn XRL A,data XRL A,@Ri XRL A,#data XRL data,A XRL data,#data SETB C SETB bit CLR A CLR C CLR bit CPL A CPL C CPL bit RL A RLC A
助记符 AJMP addr 11 LJMP addr 16 SJMP rel
A 右移一位 A 带进位右移一位 A 半字节交换
说明 寄存器加到 A 直接字节加到 A 间接 RAM 加到 A 立即数加到 A 寄存器带进位加到 A 直接字节带进位加到 A 间接 RAM 带进位加到 A 立即数带进位加到 A 从 A 中减去寄存器和进位 从 A 中减去直接字节和进位 从 A 中减去间接 RAM 和进位 从 A 中减去立即数和进位 A加1 寄存器加 1 直接字节加 1 间接 RAM 加 1 数据指针加 1 A减1 寄存器减 1 直接字节减 1 间接 RAM 减 1 A乘B A被B除 A 十进制调整
80C51单片机指令系统汇编
MOVX A, @Ri
MOVX A, @DPTR
目的操作数为@Ri
MOVX @Ri, A
MOVX @DPTR, A
例6:指令执行前(DPTR)=2000H,(A) =30H,(2000H)=55H,(R0)=20H, (20H)=88H
MOVX A,@DPTR
; (A)=55H
MOVX @R0,A
(7) direct: 表示直接寻址的地址, 即8位内部数据存储器 RAM的单元地址(0~127); 特殊功能寄存器SFR的地址。对于SFR可直接 用其名称来代替其直接地址。
(8) bit: 内部数据存储器RAM中位寻址区中的位地址 特殊功能寄存器SFR中的可直接寻址位地址 或名称。
(9) @: 间接寻址寄存器或基地址寄存器的前缀, 如@Ri, @DPTR, 表示寄存器间接寻址。
目的地址转移指令地址转移指令字节数rel寻址方式利用的变量使用的空间寄存器寻址r0r7abcydptr直接寻址直接地址内部ramsfr寄存器间接寻址r0r1内部ramr0r1dptr外部ram立即寻址立即数程序存储器变址寻址dptrapca程序存储器相对寻址pcrel程序存储器位寻址位地址内部ram位寻址区可位寻址的sfr说明下列指令中源操作数的寻址方式movar7movar1movcaadptrmovap0mova88hmova88hmovcp003380c51单片机指令系统80c51指令分类按功能分数据传送指令29条算术运算指令24条逻辑运算指令及移位类指令24条控制转移类指令17条位操作类指令17条一数据传送指令29条datamovadirectmovrnmovri目的操作数为rnmovrndatamovrndirectmovrnmovdptrdata指令执行前a33hr030h30h55h指令执行后的结果
经典:80C51单片机汇编语言程序设计
上例中,如果采用CJNE指令,应如何修改程序? 18
XAD EQU
1000H;
BUF EQU
2000H;
ORG 1000H
START:MOV DPTR, #XAD ;数据X的地址送数据指针DPTR
MOVX A,
@DPTR; A←取数据X
CJNE A, #0, ANZ ; X≠0转ANZ
SJMP SAV;
难度较大。要求使用者必须精通单片机的硬件系 统和指令系统。缺乏通用性,程序不易移植。
2
4.1.2 单片机使用的高级语言
对于8051单片机,现有4种语言支持,即汇编、 PL/M、C和BASIC。
C语言最终得到广泛应用。 可以大大提高单片机应用系统研制的开发效率。移 植性好。 高级语言的不足:生成的目标代码较长,导致应用程 序运行速度较慢。
分支程序
BR1: …
BRn: …
21
(2)通过转移指令表实现程序多分支
MOV A, n
RL A
;分支序号值乘以2
MOV DPTR, #BRTAB;转移指令表首址
JMP @A+DPTR
BRTAB: AJMP BR0
;转分支程序0
AJMP BR1
;转分支程序1
BR0: … BR1: …
AJMP BR127
顺序结构程序是最简单的程序结构。程序既无分支、 循环,也不调用子程序,程序执行时一条接一条地 按顺序执行指令。
6
2、程序设计的一般步骤
(1)分析任务 (2)确定算法 (3)画流程图 (4)编写程序 (5)上机调试
查错、改错, 用指令的形式
对程序进行 将程序流程图
优化。
实现出来。
当接到程序设计的任务后, 首先对任务进行详尽的分析, 搞清楚已知的数据和想要得 到的结果,程序应该完成何 种的功能。明确在程序设计 时应该 “做什么” 。
单片机51指令系统--汇编
⑸ rel:带符号的8位偏移地址。 SJMP rel 用于转移指令,其范围是相对于下一条指令第1字 节地址的-128~+127个字节。
⑹ bit:位地址。 SETB ACC.7 代表片内RAM中的可寻址位00H~7FH及SFR中的可寻址位
;将立即数#30H送入A中,A=30H
⑵ 以工作寄存器Rn为目的字节的传送 指令(3条)
① MOV Rn,A ;A→Rn,n=0~7
② MOV Rn,direct;(direct)→Rn,n=0~7
③ MOV Rn,#data ;data→Rn,n=0~7
⑶ 以直接地址为目的字节的传送指令(5条)
标号:操作码
操作数;注释
[标号:]操作码 [目的操作数][,源操作数][;注释]
START:MOV A,#30H ;将立即数30H传送至A中 MOV DPTR,#5678H ;将立即数5678H传送至DPTR
方括符[ ]表示可选项 标号代表指令所在地址,1-8个字母/数字,“:”结尾
⑴ 标号:指令的符号地址。
2.1.4 寻址方式
寻址就是寻找操作数的地址。 七种寻址方式,一条指令可能含多种寻址方式
立即寻址 直接寻址 寄存器寻址 寄存器间接寻址
变址寻址 ( 基址寄存器 + 变址寄存器间接寻址 )
相对寻址 位寻址
⒈ 立即寻址 立即寻址是直接给出操作数,操作数 前有立即数符“ # ”。 MOV A,#30H ;将立即数30H传送至A中 MOV DPTR,#5678H ;将立即数5678H传送 至DPTR ADD A,#05H ;(A)←(A)+立即数 05H 注意:符号“#”表明其后跟的是立即数, 立即数——就是数字量本身。
8051汇编语言概述一 ) 指令分类 42个助记符,33种功能,共...
3-2-6 位寻址
位寻址的的操作数是RAM单元和特殊功能寄存器中可 用于位操作的位的地址。 例如: setb 40h ;将28h的最低位(第0位)臵1 mov c, 3fh ;将27h的最高位(第7位)送到CY mov 3fh , c ;将CY 送到27h的最高位(第7位) anl c, 3fh ;CY & (27h的第7位) -> CY
3-3-4 累加器交换指令
1) 字节交换指令XCH(3 条)
助记符格式
XCH A, Rn
机器码
11001rrrB
相应操作
A Rn
指令说明 机器周期
n=0~7 1 1
XCH A, direct 11000101B A (direct) direct
XCH A, ቤተ መጻሕፍቲ ባይዱRi
1100011iB data
相应操作
Rn ← A
指令说明
n=0~7, rrr=000~111
机器周期
1 1 1
10101rrr Rn←(direct) n=0~7, direct rrr=000~111 Rn←#data n=0~7, rrr=000~111
MOV Rn, #data 01111rrr data
注意:以上传送指令的结果均不影响程序状态字寄存器 PSW 的 P 和 Z 标志。
3-3-1 片内数据存储器传送指令MOV
片内数据存储器传送指令MOV 共17 条,指令基本格式: MOV <目的操作数>, <源操作数> 1)以累加器 A 为目的地址的传送指令(4 条)
助记符格式 MOV A, Rn MOV A, direct MOV A, @Ri MOV A, #data 机器码 11101rrrB 相应操作 A←Rn 指令说明 n=0~7, rrr=000~111 i=0,1 机器周期 1 1 1
80c51汇编语言指令格式
80c51汇编语言指令格式
80C51汇编语言的指令格式通常如下:
1. 简单指令格式:单字节指令。
指令码占据一个字节,没有操作数。
```
opcode
```
2. 直接寻址指令格式:指令码后面跟一个操作数,操作数直接给出地址。
```
opcode operand
```
3. 立即数指令格式:指令码后面跟一个立即数操作数,立即数操作数直接给出数值。
```
opcode immediate
```
4. 寄存器寻址指令格式:指令码后面跟一个操作数,操作数是一个寄存器标识符。
```
opcode register
```
5. 直接偏移寻址指令格式:指令码后面跟一个操作数,操作数
给出地址的偏移量。
```
opcode offset
```
6. 间接寻址指令格式:指令码后面跟一个寄存器标识符,该寄存器存储了操作数的地址。
```
opcode @register
```
7. 隐含寻址指令格式:指令中没有操作数,操作数隐含在指令本身或寄存器中。
```
opcode
```
注意:具体的指令格式可能有所不同,以上只是一般情况下的指令格式。
实际使用时应参考具体的汇编语言文档或教材。
- 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中。
这里的`;`表示这是一条注释,用于解释这条指令的作用。