【EN】单片机汇编指令讲解
- 格式:pdf
- 大小:190.41 KB
- 文档页数:49
单片机指令集的汇编语言编程方法介绍汇编语言是一种低级语言,它直接与计算机硬件进行交互,被广泛应用于单片机编程中。
本文将介绍单片机指令集的汇编语言编程方法。
一、简介单片机指令集是特定型号单片机支持的操作指令的集合。
每个指令都对应着特定的功能,通过组合和调用这些指令,可以实现复杂的计算和控制任务。
二、基本指令1. 数据传送指令数据传送指令用于将数据从一个位置传送到另一个位置。
常见的指令有MOV(将源操作数传送到目的操作数)、LDR(将存储器位置的数据传送到寄存器)和STR(将寄存器中的数据传送到存储器位置)等。
2. 算术指令算术指令用于进行数学运算,包括加法、减法、乘法和除法等。
常见的指令有ADD(将两个操作数相加并将结果存储到目的操作数中)、SUB(将目的操作数减去源操作数并将结果存储到目的操作数中)等。
3. 逻辑指令逻辑指令用于进行逻辑运算,包括与、或、非和异或等。
常见的指令有AND(将两个操作数进行按位与运算并将结果存储到目的操作数中)、ORR(将两个操作数进行按位或运算并将结果存储到目的操作数中)等。
4. 控制指令控制指令用于控制程序的执行流程,包括无条件跳转、条件跳转和中断等。
常见的指令有B(无条件跳转到指定的地址执行)、BEQ (当条件满足时跳转到指定的地址执行)等。
三、编程方法1. 熟悉指令集编程前需要详细了解所使用的单片机的指令集,包括指令的功能、操作数的类型和寻址方式等。
只有深入了解指令集,才能灵活运用指令编写程序。
2. 设计算法在开始编程之前,需要分析问题,设计出解决问题的算法。
算法应考虑输入、处理和输出等方面,合理利用指令集中的指令实现算法的逻辑。
3. 编写汇编程序根据算法,以汇编语言的格式编写程序。
程序的编写过程需要遵循指令的语法规则和寻址方式,并注意程序的可读性和效率。
4. 调试和优化程序编写完成后,需要进行程序的调试和优化。
通过单步执行程序,观察和检查程序执行过程中的中间结果,确保程序能够正确地执行。
单片机指令大全(二)引言概述:本文是关于单片机指令大全的第二部分。
在上一部分中,我们介绍了一些常用的单片机指令和其功能。
本文将继续介绍更多的单片机指令,包括数据传输、逻辑运算、算术运算、位操作以及状态寄存器等方面的指令。
这些指令将帮助您更好地理解和使用单片机。
1. 数据传输指令1.1. MOV指令:将一个数据从源操作数传送到目的操作数。
1.2. LDI指令:将一个立即数传送到一个寄存器。
1.3. LDS和STS指令:将数据从SRAM传送到寄存器或将寄存器的数据传送到SRAM。
1.4. IN和OUT指令:将数据从端口传送到寄存器或从寄存器传送到端口。
2. 逻辑运算指令2.1. AND、OR和XOR指令:进行逻辑与、逻辑或和逻辑异或运算。
2.2. NOT指令:对一个寄存器的数据进行逻辑非运算。
2.3. CLR指令:将一个寄存器的数据清零。
3. 算术运算指令3.1. ADD和SUB指令:对两个操作数进行加法或减法运算。
3.2. INC和DEC指令:对一个寄存器的数据进行加1或减1操作。
3.3. MUL和DIV指令:进行乘法和除法运算。
4. 位操作指令4.1. ANDI、ORI和XORI指令:对一个寄存器的数据进行与、或和异或运算。
4.2. SBI和CBI指令:设置或清除一个I/O端口的某个位。
4.3. SBIC和SBIS指令:跳转指令,根据指定的I/O端口位是否被设置或清除执行跳转操作。
5. 状态寄存器相关指令5.1. SEI和CLI指令:设置或清除全局中断。
5.2. SREG指令:用于保存和恢复状态寄存器的值。
5.3. IJMP和EIJMP指令:用于从程序中直接跳转到任意存储器位置。
总结:本文介绍了单片机指令大全的第二部分内容,包括数据传输、逻辑运算、算术运算、位操作以及状态寄存器等方面的指令。
这些指令的功能与用法将有助于您更好地理解和应用单片机。
通过熟练掌握这些指令,您将能够更加灵活地进行单片机程序的设计与开发。
引言概述:单片机指令是嵌入式系统设计中至关重要的一部分,它们定义了单片机的功能和操作。
本文是单片机指令大全系列的第二部分,旨在提供更多全面的单片机指令信息,帮助读者更好地理解和应用单片机指令。
正文内容:一、移位指令1.逻辑左移指令:将操作数的每一位向左移动一位,并且最低位填充0。
2.逻辑右移指令:将操作数的每一位向右移动一位,并且最高位填充0。
3.算术右移指令:将操作数的每一位向右移动一位,并且最高位保持不变。
4.循环左移指令:将操作数的每一位向左循环移动一位,即最高位移动到最低位。
5.循环右移指令:将操作数的每一位向右循环移动一位,即最低位移动到最高位。
二、逻辑运算指令1.逻辑与指令:对操作数进行逻辑与运算,将两个二进制数对应位上的值进行逻辑与操作。
2.逻辑或指令:对操作数进行逻辑或运算,将两个二进制数对应位上的值进行逻辑或操作。
3.逻辑非指令:对操作数进行逻辑非运算,将二进制数的每一位取反。
4.逻辑异或指令:对操作数进行逻辑异或运算,将两个二进制数对应位上的值进行逻辑异或操作。
5.逻辑移位指令:将操作数进行逻辑左移或右移。
三、算术运算指令1.加法指令:对操作数进行加法运算,并将运算结果保存到指定的寄存器或存储器中。
2.减法指令:对操作数进行减法运算,并将运算结果保存到指定的寄存器或存储器中。
3.乘法指令:对操作数进行乘法运算,并将运算结果保存到指定的寄存器或存储器中。
4.除法指令:对操作数进行除法运算,并将运算结果保存到指定的寄存器或存储器中。
5.移位指令:对操作数进行移位运算,包括算术左移、算术右移、循环左移和循环右移。
四、输入输出指令1.读取输入指令:从指定的输入设备读取数据,并将数据保存到指定的寄存器或存储器中。
2.输出显示指令:将指定的数据从寄存器或存储器中读取,并显示到指定的输出设备上。
3.端口输入指令:从指定的端口读取数据,并将数据保存到指定的寄存器或存储器中。
4.端口输出指令:将指定的数据从寄存器或存储器中读取,并输出到指定的端口上。
51单片机汇编指令及伪指令小结51单片机汇编指令及伪指令小结51单片机是一种广泛应用的基于汇编语言的微控制器。
它的汇编指令集非常丰富,包括了基本的数据处理、逻辑运算、分支跳转、数据存储和输入输出等指令。
汇编指令的灵活运用可以实现各种复杂的功能,因此掌握51单片机的汇编指令是开发嵌入式系统的重要基础。
1. 基本数据处理指令51单片机汇编指令集包括了一系列基本的数据处理指令,如加法(add)、减法(sub)、乘法(mul)、除法(div)等。
这些指令用于实现对数据的基本运算操作。
2. 逻辑运算指令逻辑运算指令用于实现各种逻辑运算,如与(and)、或(or)、非(not)、异或(xor)等。
这些指令通常用于处理数据的开关控制、状态判断等功能。
3. 分支跳转指令分支跳转指令用于实现程序的流程控制。
常用的分支跳转指令包括无条件跳转(jmp)、条件跳转(jz、jnz、jc、jnc等)、循环跳转(loop)等。
这些指令可以根据条件和需求设置程序的执行流程,实现各种循环、分支等功能。
4. 数据存储指令数据存储指令用于实现数据的存储和加载操作。
常用的存储指令包括将数据存储到寄存器或内存中(mov)、将数据从寄存器或内存中加载(ld)等。
这些指令通过对数据的存储和加载,实现对数据的读写操作。
5. 输入输出指令输入输出指令用于实现与外设的数据通信。
常用的输入输出指令包括从端口输入(instr)、输出到端口(outstr)等。
这些指令通过与外部设备的数据交互,实现嵌入式系统与外设的连接。
除了以上的基本指令外,51单片机还提供了一些伪指令,用于程序的组织和调试。
这些伪指令包括宏指令、条件编译指令、调试指令等。
1. 宏指令宏指令是一种通过宏展开的方式来扩展汇编代码的指令。
它通过提前定义一些宏,并在代码中使用这些宏来生成更复杂的汇编代码。
宏指令的好处是可以简化代码的书写,使得程序的逻辑更清晰。
2. 条件编译指令条件编译指令用于根据编译时的条件来选择性地编译代码。
单片机汇编指令单片机(Microcontroller)是一种集成了微处理器和其他外设的集成电路芯片,用于控制各种电子设备。
在单片机的开发过程中,编程是必不可少的一部分,而汇编语言是一种常用于单片机编程的低级语言。
汇编语言是一种和机器语言十分接近的编程语言,使用简单的助记符(Mnemonic)来代表机器指令,方便程序员进行编程。
在单片机开发中,汇编语言的指令集是非常重要的知识,掌握好单片机的汇编指令对于编写高效、性能优良的程序至关重要。
本文将介绍一些常见的单片机汇编指令,供大家参考和学习。
一、数据传输指令1. MOV 指令:将数据从一个存储器位置或寄存器传输到另一个存储器位置或寄存器。
例如:MOV A, B ;将B的值传送给A寄存器MOV R1, #20 ;将数值20传送给R1寄存器2. LDA 和 STA 指令:分别用于将数据从存储器加载到累加器和将累加器中的数据存储到存储器中。
例如:LDA 0x20 ;将地址为0x20的存储器单元的数据加载到累加器STA 0x30 ;将累加器中的数据存储到地址为0x30的存储器单元3. XCH 指令:用于交换两个存储器位置或寄存器的数据。
例如:XCH A, B ;交换A和B寄存器的值二、算术指令1. ADD 和 SUB 指令:分别用于将数据相加和相减。
例如:ADD A, B ;将A和B的值相加,并将结果存储到A寄存器SUB A, B ;将B的值从A中减去,并将结果存储到A寄存器2. INC 和 DEC 指令:分别用于将数据递增和递减。
例如:INC A ;将A的值递增1DEC A ;将A的值递减1三、逻辑指令1. AND、OR 和 XOR 指令:分别用于进行逻辑与、逻辑或和逻辑异或操作。
例如:AND A, B ;将A和B的值进行逻辑与操作,并将结果存储到A寄存器OR A, B ;将A和B的值进行逻辑或操作,并将结果存储到A寄存器XOR A, B ;将A和B的值进行逻辑异或操作,并将结果存储到A寄存器2. NOT 指令:用于对一个存储器位置或寄存器中的数据进行逻辑非操作。
一、数据传送类指令(8种助记符)MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;P55PUSH (Push onto Stack) 入栈;PUSH directPOP (Pop from Stack) 出栈;POP directXCH (Exchange) 字节交换;XCH A,源/@RiXCHD (Exchange low-order Digit) 低半字节交换;同上SWAP (Swap) 低4位与高4位交换;SWAP A MOVC(Move Code)读取程序存储器数据表格的数据传送;MOVC A,@A+DPTR/PC MOVX (Move External RAM) 对外部RAM的数据传送;MOVX @DPTR,A MOVX A,@DPTR/@Ri MOVX @Ri,A二、算术运算类指令(8种助记符)ADD(Addition) 加法;ADDC(Add with Carry) 带进位加法;INC(Increment) 加1;INC A/Rn/direct/@Ri/源/DPTRDA(Decimal Adjust) 十进制调整;SUBB(Subtract with Borrow) 带借位减法;DEC(Decrement) 减1;DEC A/Rn/direct/@Ri/源MUL(Multiplication、Multiply) 乘法;MUL AB 高B,低A。
Cy=0 大于256,OV=1 DIV(Division、Divide) 除法;DIV AB 商A,余B。
Cy=0 OV=B(同上)三、逻辑运算类指令(9种助记符)CLR(Clear) 清零;CLR ACPL(Complement) 取反;CPL ARL(Rotate left) 循环左移;(同上)RLC(Rotate Left throught the Carry flag) 带进位循环左移;(同上)RR(Rotate Right) 循环右移;(同上)RRC (Rotate Right throught the Carry flag) 带进位循环右移;(同上)ANL(AND Logic) 逻辑与;ANL A,#data/Rn/direct/@Ri ANL direct,A/#dataORL(OR Logic) 逻辑或;ORL A,#data/Rn/direct/@Ri ANL direct,A/#dataXRL(Exclusive-OR Logic) 逻辑异或;(同上)四、位操作指令(6种助记符)MOV 位数据传送指令;MOV C,bit MOV bit,CCLR 位清零;C bitSETB(Set Bit)位置1;C bitCPL位取反;(同上)ANL位逻辑运算指令;ANL C,bit//bitORL位逻辑或运算指令;(同上)五、控制转移类指令(18种助记符)AJMP(Absolute Jump)绝对转移;AJMP addr11/ LABELLJMP(Long Jump)长转移;(同上)SJMP(Short Jump)短转移;SJMP rel/ LABELJMP间接转移指令; JMP @A+DPTRJZ (Jump if Zero)结果为0则转移;JZ rel/ LABELJNZ (Jump if Not Zero) 结果不为0则转移;(同上)CJNE (Compare Jump if Not Equal)比较不相等则转移;CJNE A,direct,rel/ LABEL CJNE A/Rn/@Ri,#data,rel/ LABELJC (Jump if the Carry flag is set)有进位则转移;JC rel/ LABELJNC (Jump if Not Carry)无进位则转移;(同上)JB (Jump if the Bit is set)位为1则转移;JB bit, rel/ LABELJNB (Jump if the Bit is Not set) 位为0则转移;(同上)JBC(Jump if the Bit is set and Clear the bit) 为1则转移,并清除该位;DJNZ (Decrement Jump if Not Zero)减1后不为0则转移;DJNZ Rn,rel/ LABEL DJNZ direct,rel/ LABELLCALL(Long subroutine Call)子程序长16调用;LCALL addr16/ SUBROUTINEACALL(Absolute subroutine Call)子程序绝对11调用;(同上)RET(Return from subroutine)子程序返回;RETI(Return from Interruption)中断返回;NOP (No Operation) 空操作;8种常用伪指令1.ORG 16位地址;此指令用在原程序或数据块的开始,指明此语句后面目标程序或数据块存放的起始地址。
汇编教程汇编指令详解
汇编语言可以说是机器语言的一种直观形式,是与硬件直接相关的低
级程序设计语言。
它是一种以简洁的汇编指令来表达操作码机器指令的程
序设计语言,汇编语言的指令代码一般比机器语言的指令代码要短,是编
写高效、可移植的机器级程序的理想语言。
汇编语言的基本构成:
(1)指令集:汇编语言的指令集是机器的最基本和最重要的组成部分,也是机器的指令集,描述了机器所做的操作。
(2)操作数:汇编语言的指令集中涉及到的操作数有多种,比如寄
存器操作数、立即数、内存操作数等。
(3)运算和转移指令:汇编语言中的运算和转移指令包括算术运算
指令、比较指令、逻辑运算指令、移位指令等,它们是机器执行的基本操作。
(4)转移指令:汇编语言中的转移指令可以改变机器指令的执行顺序,并实现分支程序设计。
(5)I/O指令:汇编语言中的I/O指令可以实现与外部设备的通信,获取外部设备提供的数据。
(6)汇编指令:汇编指令用于移植各种汇编程序到不同的处理器上,从而实现程序的机器无关性。
一、MOV指令:
MOV指令用于把操作数的值赋给另一个操作数。
汇编伪指令注释:1、DS ---预留存储区命令格式:〔标号:〕 DS 表达式值其功能是从指定地址开始,定义一个存储区,以备源程序使用。
存储区预留的存储单元数由表达式的值决定。
TMP: DS 1从标号TEP地址处开始保留1个存储单元(字节)。
2、BIT---定义位命令格式:字符名称 BIT 位地址其功能用于给字符名称定义位地址。
SPK BIT P3.7经定义后,允许在指令中用SPK代替P3.7。
3、USING指令USING指令通知汇编器使用8051的哪一个工作寄存器组。
格式: USING 表达式(值必须为0-3,默认值为0。
)USING 0使用第0组工作寄存器。
4、SEGMENT指令SEGMENT 指令用来声明一个再定位段和一个可选的再定位类型。
格式:再定位段名 SEGMENT 段类型〔再定位类型〕其中,“再定位段名”用于指明所声明的段。
“段类型”用于指定所声明的段将处的存储器地址空间。
可用的段类型有 CODE、XDATA、DATA、IDATA和BIT。
STACK_SEG SEGMENT IDATADATA_SEG SEGMENT DATA5、RSEG---再定位段选择指令再定位段选择指令为RSEG,用于选择一个已在前面定义过的再定位段作为当前段。
格式: RSEG 段名段名必须是在前面已经声明过的再定位段。
DATA_SEG SEGMENT DATA ;声明一个再定位DATA段RSEG DATA_SEG ;选择前面声明的再定位DATA段作为当前段6、绝对段选择指令CSEG---绝对代码段DSEG---内部绝对数据段XSEG---外部绝对数据段ISEG ---内部间接寻址数据段BSEG---绝对位寻址数据段格式:CSEG [AT 绝对地址表达式]DSEG [AT 绝对地址表达式]XSEG [AT 绝对地址表达式]ISEG [AT 绝对地址表达式]BSEG [AT 绝对地址表达式]括号内是可选项,用来指定当前绝对段的基地址。
单片机汇编指令单片机汇编指令:为解决某些特定的问题代码中必须嵌入汇编语言以代替C语言完成的单片机的编程,汇编语言对于程序调试是不可或缺的。
它包括:数据传送类指令,算术运算类指令,逻辑运算与循环类指令,控制转移类指令,位操作(布尔操作)类指令。
现在单片机的编程大多是C语言完成但有时代码中必须嵌入汇编语言解决某些特定的问题,对于程序调试汇编语言更是不可或缺一.数据传送类指令:(1)一般传送指令:①8位传送:1 MOV A,Rn ;A←(Rn):寄存器内容送入累加器2 MOV A,direct ;A←(direct):直接地址单元中的数据送入累加器3 MOV A,@Ri ;A←((Ri)):间接RAM 中的数据送入累加器4 MOV A,#data ;A←(data):立即数送入累加器5 MOV Rn,A ;Rn←(A):累加器内容送入寄存器6 MOV Rn,direct ;Rn←(direct):直接地址单元中的数据送入寄存器7 MOV Rn,#data ;Rn←(data):立即数送入寄存器8 MOV direct,A ;direct←(A):累加器内容送入直接地址单元9 MOV direct,Rn ;direct←(Rn):寄存器内容送入直接地址单元10 MOV direct,direct;direct←(direct):直接地址单元中的数据送入另一个直接地址单元11 MOV direct,@Ri ;direct←(@Ri):间接RAM 中的数据送入直接地址单元12 MOV direct,#data ;direct←(data):立即数送入直接地址单元13 MOV @Ri,A;Ri←(A):累加器内容送入间接RAM 单元14 MOV @Ri,direct ;Ri←(direct)直接地址单元数据送入间接RAM 单元15 MOV @RI,#data ;Ri←(data):立即数送入间接RAM 单元②16位传送:16 MOV DRTR,#data16 ;(DRTR) ←(data16):16 位立即数送入地址寄存器(2)特殊传送指令:⑤①读取常数表:17 MOVC A,@A+DPTR ;A←((A)+(DPTR)):以DPTR为基地址变址寻址单元中的数据送入累加器18 MOVC A,@A+PC;A←((A)+(PC)):以PC 为基地址变址寻址单元中的数据送入累加器②读写片外RAM及接口单元数据:读片外RAM:19 MOVX A,@Ri ;A←((Ri)):外部RAM(8 位地址)送入累加器20 MOVX A,@DPTR ;A←((DPTR)):外部RAM(16 位地址)送入累加器写片外RAM:21 MOVX @Ri,A ; (Ri)←(A):累计器送外部RAM(8 位地址)22 MOVX @DPTR,A ;(DPTR)←(A):累计器送外部RAM(16 位地址)③堆栈操作指令:23 PUSH direct;SP←(SP),(SP)←(direct)直接地址单元中的数据压入堆栈24 POP direct ;(direct)←((SP)), SP←(SP)-1:弹栈送直接地址单元④数据交换指令:字节交换:25 XCH A,Rn ;(A)←→(Rn):寄存器与累加器交换26 XCH A,direct ;(A)←→(direct):直接地址单元与累加器交换27 XCH A,@Ri; (A)←→(Ri):间接RAM 与累加器交换半字节交换:28 XCHD A,@Ri ;((Ri).3~(Ri).0) ←→(ACC.3~ACC.0):间接RAM 的低半字节与累加器的弟半字节交换29 SWAP A ;(ACC.7~ACC.4)←→(ACC.3~ACC.0):累加器的高低4位互换二.算术运算类指令:(1)不带进位加法:1 ADD A,Rn ;A←(A)+(Rn):寄存器内容加到累加器2 ADD A,direct;A←(A)+(direct):直接地址单元的内容加到累加器3 ADD A,@Ri;A←(A)+((Ri)):间接ROM 的内容加到累加器4 ADD A,#data;A←(A)+ data:立即数加到累加器(2)带进位加法:5 ADDC A,Rn ;A←(A)+(Rn)+(CY):寄存器内容带进位加到累加器6 ADDC A,direct;A←(A)+(direct)+(CY):直接地址单元的内容带进位加到累加器7 ADDC A,@Ri ;A←(A)+((Ri))+(CY):间接ROM 的内容带进位加到累加器8 ADDC A,#data;A←(A)+ data+(CY):立即数带进位加到累加器(3)加1:9 INC A;A←(A)+1:累加器加110 INC Rn;A←(Rn)+1:寄存器加111 INC direct;A←(direct)+1:直接地址单元加112 INC @Ri;(Ri)←((Ri))+1:间接RAM 单元加113 INC DPTR;DPTR←(DPTR)+1:地址寄存器DPTR 加 1(4)十进制调整:DA A;调整A的内容为正确的BCD码(5)带借位减法:14 SUBB A,Rn ;A←(A)-(Rn)-(CY):累加器带借位减寄存器内容15 SUBB A,direct;A←(A)-(direct)-(CY):累加器带借位减直接地址单元的内容16 SUBB A,@Ri ;A←(A)-(Ri)-(CY):累加器带借位减间接RAM 中的内容17 SUBB A,#data ;A←(A)-data-(CY):累加器带借位减立即数(6)减1:18 DEC A ;A←(A)-1:累加器减119 DEC Rn ;A←(Rn)-1:寄存器减120 DEC direct ;A←(direct)-1:直接地址单元减121 DEC @Ri;A←(Ri)-1:间接RAM 单元减 1(7)乘法:22 MUL AB;累加器A与寄存器B相乘(乘积的低8位存在A中,高8位存在B中)(8)乘法:23 DIV AB;累加器A除以寄存器B (商的整数部分存放在A中,余数存在B中)三.逻辑运算与循环类指令:(1)逻辑与:1 ANL A,Rn; A←(A)∧(Rn) :累加器与寄存器相“与”2 ANL A,direct;A←(A)∧(direct):累加器与直接地址单元相“与”3 ANL A,@Ri; A←(A)∧(Ri):累加器与间接RAM 单元相“与”4 ANL A,#data;A←(A)∧data:累加器与立即数相“与”5 ANL direct,A;direct←(direct)∧(A):直接地址单元与累加器相“与”6 ANL direct,#data;direct←(direct)∧data:直接地址单元与立即数相“与”(2)逻辑或:7 ORL A,Rn ;A←(A)∨(Rn):累加器与寄存器相“或”8 ORL A,direct ;A←(A)∨(direct):累加器与直接地址单元相“或”9 ORL A,@Ri;A←(A)∨(Ri):累加器与间接RAM 单元单元相“或”10 ORL A,#data;A←(A)∨data:累加器与立即数相“或”11 ORL direct,A;direct←(direct)∨(A):直接地址单元与累加器相“或”12 ORL direct,#data;direct←(direct)∨data:直接地址单元与立即数相“或”(3)逻辑或与:13 XRL A,Rn; A←(A)⊕(Rn) :累加器与寄存器相“异或”14 XRL A,direct;A←(A)⊕ (direct):累加器与直接地址单元相“异或”15 XRL A,@Ri; A←(A)⊕ (Ri):累加器与间接RAM 单元单元相“异或”16 XRL A,#data;A←(A)⊕data:累加器与立即数相“异或”17 XRL direct,A;direct←(direct)⊕(A):直接地址单元与累加器相“异或”18 XRL direct,#data;direct←(direct)⊕data:直接地址单元与立即数相“异或”(4)累加器清0或取反:19 CLR A;A←0:累加器清“0”(5)累加器循环移位:21 RL A ;1~7A ←(0~6A ),0A ←(7A ):累加器循环左移22 RLC A ;CY ←(7A ),1~7A ←(0~6A ),0A ←(CY ):累加器带进位位循环左移 23 RR A ;1~7A →(0~6A ),0A →(7A ):累加器循环右移24 RRC A ;CY →(7A ),1~7A →(0~6A ),0A →(CY ):累加器带进位位循环右移四.控制转移类指令:(1)无条件转移:1 AJMP addr11 ;PC ←(PC)+2,P 0~10C ←addr11:绝对(短)转移2 LJMP addr16;PC ←addr16:长转移3 SJMP rel ;PC ←(PC)+2,PC ←(PC)+rel :相对转移4 JMP @A+DPTR ;PC ←(PC)+1,PC ←(A)+(DPTR):相对于DPTR 的间接转移(散转移)(2)条件转移:①累加器判0转移:5 JZ rel ;若(A)=0,则PC ←(PC)+rel :累加器为零转移6 JNZ rel ;若(A)≠0,则PC ←(PC)+rel :累加器不为零转移②比较不相等转移:7 CJNE rel 累加器非零转移8 CJNE A,direct,rel ;累加器与直接地址单元比较,不相等则转移9 CJNE A,#data,rel 累加器与立即数比较,不相等则转移10 CJNE Rn,#data,rel 寄存器与立即数比较,不相等则转移11 CJNE @Ri,#data,rel 间接RAM 单元与立即数比较,不相等则转移 ③减1不为0转移:12 DJNZ Rn,rel ;寄存器减1,非零转移13 DJNZ direct, rel ;直接地址单元减1,非零转移(3)调用与返回:①调用:14 ACALL addr11;绝对(短)调用子程序15 LCALL addr16;长调用子程序 ②返回16 RET ;子程序返回17 RETI ;中断服务子程序返回(4)空做操:18 NOP ;空操作五.位操作(布尔操作)类指令:(1)位传送:11 MOV C,bit ;bit←(CY):直接地址位送入进位位12 MOV bit,C ;CY←(bit):进位位送入直接地址位(2)位状态设置:①位清0:1 CLR C ;CY←0:清进位位2 CLR bit;bit←0:清直接地址位②位置位:3 SETB C;CY←1:置进位位4 SETB bit;bit←1:置直接地址位(3)位逻辑运算:①位逻辑与:7 ANL C,bit;进位位和直接地址位相“与”8 ANL C,/bit;进位位和直接地址位的反码相“与”②位逻辑或:9 ORL C,bit;进位位和直接地址位相“或”10 ORL C,/bit;进位位和直接地址位的反码相“或”③位取反:5 CPL C;CY←(CY):进位位求反6 CPL bit;bit←(bit):置直接地址位求反(4)位判跳(条件转移):①判CY转移:13 JC rel;若(CY)=1,PC←(PC)+2+rel,否则顺次执行:进位位为1 则转移14 JNC rel;若(CY)=0,PC←(PC)+2+rel,否则顺次执行:进位位为0 则转移②判bit转移:15 JB bit,rel;(bit)=1,PC←(PC)+3+rel,否则顺次执行:直接地址位为1 则转移16 JBC bit,rel;(bit)=1,PC←(PC)+3+rel,并使bit←0,否则顺次执行:直接地址位为0 则转移17 JNB bit,rel;(bit)=0,PC←(PC)+3+rel,否则顺次执行:直接地址位为1 则转移,该位清零。
单片机汇编语言指令集汇编语言是一种低级程序设计语言,广泛应用于单片机的编程和控制。
单片机汇编语言指令集是程序员在开发单片机应用时必须了解和掌握的一项基础知识。
本文将介绍常用的单片机汇编语言指令集及其功能。
1. 指令集概述单片机汇编语言指令集是单片机内部指令的集合,用于完成各种操作和控制功能。
指令集由操作码和操作数组成,操作码表示指令的类型,操作数表示指令要操作的数据或地址。
2. 数据传送指令数据传送指令用于将数据从一个位置传送到另一个位置,包括寄存器之间的传送、寄存器和内存之间的传送等。
常用的数据传送指令有MOV、LDR、STR等。
3. 算术运算指令算术运算指令用于进行各种算术运算,包括加法、减法、乘法、除法等。
常用的算术运算指令有ADD、SUB、MUL、DIV等。
4. 逻辑运算指令逻辑运算指令用于进行各种逻辑运算,包括与、或、非、异或等。
常用的逻辑运算指令有AND、OR、NOT、XOR等。
5. 条件转移指令条件转移指令用于根据条件进行跳转或循环控制,常用的条件转移指令有BEQ、BNE、BGT、BLE等。
通过条件转移指令,程序可以根据不同的条件选择执行不同的代码路径。
6. 程序控制指令程序控制指令用于实现程序的跳转、函数的调用和返回等功能。
常用的程序控制指令有JMP、CALL、RET等。
通过程序控制指令,程序可以按照预定的流程执行,实现复杂的控制逻辑。
7. 输入输出指令输入输出指令用于与外部设备进行数据交互,包括输入数据和输出数据。
常用的输入输出指令有IN、OUT等。
通过输入输出指令,单片机可以与外围设备进行数据的传输和交互。
8. 中断指令中断指令用于处理外部中断或内部中断事件,包括中断的触发、中断的响应和中断的处理等。
常用的中断指令有INT、IRET等。
通过中断指令,单片机可以及时响应和处理各种中断事件。
9. 扩展指令扩展指令是一些额外的指令,用于扩展单片机的功能和性能。
扩展指令的具体内容和功能因不同的单片机而异,常见的扩展指令有乘法指令、移位指令、位操作指令等。
汇编指令常用单片机汇编指令:1 .MOV A,Rn 寄存器内容送入累加器2 .MOV A,direct 直接地址单元中的数据送入累加器3 .MOV A,@Ri (i=0,1间接RAM 中的数据送入累加器4 .MOV A,#data 立即数送入累加器5 .MOV Rn,A 累加器内容送入寄存器6 .MOV Rn,direct 直接地址单元中的数据送入寄存器7 .MOV Rn,#data 立即数送入寄存器8 .MOV direct,A 累加器内容送入直接地址单元9 .MOV direct,Rn 寄存器内容送入直接地址单元10.MOV direct,direct 直接地址单元中的数据送入另一个直接地址单元11.11 .MOV direct,@Ri (i=0,1间接RAM 中的数据送入直接地址单元12.12 MOV direct,#data 立即数送入直接地址单元13.13 .MOV @Ri,A (i=0,1累加器内容送间接RAM 单元14.14 .MOV @Ri,direct (i=0,1直接地址单元数据送入间接RAM 单元15.15 .MOV @Ri,#data (i=0,1立即数送入间接RAM 单元16 .MOV DPTR,#data1616.16 位立即数送入地址寄存器17.17 .MOVC A,@A+DPTR 以DPTR为基地址变址寻址单元中的数据送入累加器18.18 .MOVC A,@A+PC 以PC 为基地址变址寻址单元中的数据送入累加器19.19 .MOVX A,@Ri (i=0,1外部RAM(8 位地址送入累加器20.20 .MOVX A,@DPTR 外部RAM(16 位地址送入累加器21.21 .MOVX @Ri,A (i=0,1累计器送外部RAM(8 位地址22.22 .MOVX @DPTR,A 累计器送外部RAM(16 位地址23.23 .PUSH direct 直接地址单元中的数据压入堆栈24.24 .POP direct 弹栈送直接地址单元25.25 .XCH A,Rn 寄存器与累加器交换26.26 .XCH A,direct 直接地址单元与累加器交换27.27 .XCH A,@Ri (i=0,1间接RAM 与累加器交换28.28 .XCHD A,@Ri (i=0,1间接RAM 的低半字节与累加器交换算术操作类指令:1. ADD A,Rn 寄存器内容加到累加器2 .ADD A,direct 直接地址单元的内容加到累加器3 A.DD A,@Ri (i=0,1间接ROM 的内容加到累加器4 .ADD A,#data 立即数加到累加器5 .ADDC A,Rn 寄存器内容带进位加到累加器6 .ADDC A,direct 直接地址单元的内容带进位加到累加器7 .ADDC A,@Ri(i=0,1 间接ROM 的内容带进位加到累加器8 .ADDC A,#data 立即数带进位加到累加器9 .SUBB A,Rn 累加器带借位减寄存器内容10.SUBB A,direct 累加器带借位减直接地址单元的内容11.11 .SUBB A,@Ri (i=0,1累加器带借位减间接RAM 中的内容12.12 .SUBB A,#data 累加器带借位减立即数13.13 .INC A 累加器加114.14 .INC Rn 寄存器加115.15 .INC direct 直接地址单元加116.16 .INC @Ri (i=0,1间接RAM 单元加117.17 .DEC A 累加器减118.18 .DEC Rn 寄存器减119.19 .DEC direct 直接地址单元减120.20 .DEC @Rj 间接RAM 单元减121.21 .INC DPTR 地址寄存器DPTR 加122.22 .MUL AB A 乘以B,结果放在A23.23 .DIV AB A 除以B,结果放在A24.24. DA A 累加器十进制调整布尔变量操作类指令:1. CLR C 清进位位2 .CLR bit 清直接地址位3 .SETB C 置进位位4 .SETB bit 置直接地址位5 .CPL C 进位位求反6 .CPL bit 置直接地址位求反7 .ANL C,bit 进位位和直接地址位相“与”8 .ANL C,/bit 进位位和直接地址位的反码相“与”9 .ORL C,bit 进位位和直接地址位相“或”10.ORL C,/bit 进位位和直接地址位的反码相“或”11.11 .MOV C,bit 直接地址位送入进位位12.12 .MOV bit,C 进位位送入直接地址位13.13 .JC rel 进位位为1 则转移14.14 .JNC rel 进位位为0 则转移15.15 .JB bit,rel 直接地址位为1 则转移16.16 .JNB bit,rel 直接地址位为0 则转移17.17 .JBC bit,rel 直接地址位为1 则转移,该位清零逻辑操作数指令:1. ANL A,Rn 累加器与寄存器相“与”2 .ANL A,direct 累加器与直接地址单元相“与”3 .ANL A,@Ri 累加器与间接RAM 单元相“与”4 .ANL A,#data 累加器与立即数相“与”5 .ANL direct,A 直接地址单元与累加器相“与”6 .ANL direct,#data 直接地址单元与立即数相“与”7 .ORL A,Rn 累加器与寄存器相“或”8 .ORL A,direct 累加器与直接地址单元相“或”9 .ORL A,@Ri 累加器与间接RAM 单元单元相“或”10.ORL A,#data 累加器与立即数相“或”11.11. ORL direct,A 直接地址单元与累加器相“或”12.12 .ORL direct,#data 直接地址单元与立即数相“或”13.13 .XRL A,Rn 累加器与寄存器相“异或”14.14 .XRL A,direct 累加器与直接地址单元相“异或”15.15 .XRL A,@Ri 累加器与间接RAM 单元单元相“异或”16.16 .XRL A,#data 累加器与立即数相“异或”17.17 .XRL direct,A 直接地址单元与累加器相“异或”18.18 .XRL direct,#data 直接地址单元与立即数相“异或”19.19 .CLR A 累加器清“0”20.20 .CPL A 累加器求反21.21 .RL A 累加器循环左移22.22 .RLC A 累加器带进位位循环左移23.23 .RR A 累加器循环右移24.24 .RRC A 累加器带进位位循环右移25.25 .SW AP A 累加器半字节交换控制转移类指令1. ACALL addr11 绝对(短调用子程序2 .LCALL addr16 长调用子程序3 .RET 子程序返回4 .RETI 中数返回5 .AJMP addr11 绝对(短转移6 .LJMP addr16 长转移7 .SJMP rel 相对转移8 .JMP @A+DPTR 相对于DPTR 的间接转移9.JZ rel 累加器为零转移10.10. JNZ rel 累加器非零转移11.11. CJNE A,direct,rel 累加器与直接地址单元比较,不相等则转移12.12 .CJNE A,#data,rel 累加器与立即数比较,不相等则转移13.13 .CJNE Rn,#data,rel 寄存器与立即数比较,不相等则转移14.14 .CJNE @Ri,#data,rel 间接RAM 单元与立即数比较,不相等则转移15.15 .DJNZ Rn,rel 寄存器减1,非零转移16.16 .DJNZ direct,erl 直接地址单元减1,非零转移17.17 .NOP 空操作。
51单片机汇编程序1. 简介51单片机是一种常用的8位单片机芯片,具有广泛的应用领域。
51单片机的编程语言主要有汇编语言、C语言和底层汇编语言。
本文主要介绍51单片机的汇编程序。
2. 汇编程序基础2.1 寄存器51单片机的CPU有4个8位寄存器(A、B、DPTR、PSW)和一个16位寄存器(PC)。
在汇编程序中,我们可以使用这些寄存器来进行各种操作。
•A寄存器(累加器):用于存储数据和进行算术运算。
•B寄存器:辅助寄存器,可用于存储数据和进行算术运算。
•DPTR寄存器:数据指针寄存器,用于存储数据存取的地址。
•PSW寄存器:程序状态字寄存器,用于存储程序运行状态信息。
•PC寄存器:程序计数器,用于存储当前执行指令的地址。
2.2 指令集51单片机的指令集包含了多种汇编指令,可以用来进行数据操作、算术运算、逻辑运算、控制流程等。
常用的汇编指令有:•MOV:数据传送指令。
•ADD、SUB:加法和减法运算指令。
•ANL、ORL、XRL:逻辑运算指令。
•MOVX:外部RAM的读写指令。
•CJNE、DJNZ:条件分支指令。
•LCALL、RET:函数调用和返回指令。
2.3 编写一个简单的汇编程序下面是一个简单的汇编程序示例,用于将A寄存器中的数据加1,并将结果存储到B寄存器中。
ORG 0x0000 ; 程序的起始地址MOV A, #0x01 ; 将A寄存器赋值为1ADD A, #0x01 ; 将A寄存器加1MOV B, A ; 将A寄存器的值传送到B寄存器END ; 程序结束在上面的示例中,ORG指令用于指定程序的起始地址,MOV 指令用于将A寄存器赋值为1,ADD指令用于将A寄存器加1,MOV指令用于将A寄存器的值传送到B寄存器,END指令用于标记程序结束。
3. 汇编语言的应用51单片机的汇编语言广泛应用于各种嵌入式系统中,包括智能家居、工业自动化、仪器仪表等领域。
汇编程序具有以下特点:•程序执行效率高:由于汇编语言直接操作硬件,可以精确控制程序的执行流程,提高程序的执行效率。
汇编指令集详细解释The assembly instruction set is a fundamental component of computer architecture, consisting of a collection of low-level instructions that directly control the operations of a computer's hardware. Each instruction performs a specific task, such as moving data between memory and registers, performing arithmetic or logical operations, or controlling the flow of execution.汇编指令集是计算机体系结构的基本组成部分,它由一组低级指令组成,直接控制计算机硬件的操作。
每条指令执行特定的任务,例如在内存和寄存器之间移动数据、执行算术或逻辑运算,或控制执行流程。
The assembly language, which utilizes this instruction set, provides a more direct and efficient way for programmers to interact with the machine than high-level languages. It allows fine-grained control over hardware resources, making it particularly useful in low-level system programming, embedded systems, andperformance-critical applications.汇编语言利用这一指令集,为程序员提供了一种比高级语言更直接、更高效的与机器交互的方式。
单片机汇编语言汇编语言是一种与计算机硬件相关的低级语言,用于编写底层程序,包括单片机上的程序。
单片机汇编语言可以直接操作寄存器和内存,具有高效性和灵活性,因此在许多嵌入式系统中广泛应用。
本文将探讨单片机汇编语言的基本概念、语法和应用。
一、基本概念单片机是一种集成了处理器、内存和输入输出设备的微型计算机系统。
汇编语言是单片机上的机器语言的一种可读性较强的表达方式。
在单片机汇编语言中,使用助记符来表示不同的指令和操作码,以便程序员更好地理解和编写代码。
二、语法结构1. 指令格式单片机汇编语言的指令通常由指令助记符、操作数和注释构成。
指令助记符用于表示具体的指令操作,操作数则用于指定操作的对象或参数。
例如,MOV A, #10 ; 将立即数10移动到寄存器A2. 寄存器和内存单片机提供了一些用于存储数据和操作的寄存器,如累加器(A)、通用寄存器(R0-R7)等。
除了寄存器外,还可以使用内存来存储和操作数据。
3. 标志位单片机中的标志位用于记录某些条件或操作结果的状态。
常见的标志位有进位标志(C)、零标志(Z)、溢出标志(V)等。
三、汇编语言编程实例下面以AT89C52单片机为例,来演示一个简单的汇编语言程序。
```; 以P0口为输出口,控制LED灯的亮灭MOV P1, #0FFH ; 将P1口设为输出口LOOP: MOV A, #55H ; 用AAH与01010101B进行异或得到55HMOV P0, A ; 将A值输出到P0口ACALL DELAY ; 延时CPL A ; 对A寄存器按位求反SJMP LOOP ; 跳转到LOOP标签处DELAY: MOV R7, #25 ; 设置循环次数DJNZ R7, DELAY ;循环减一并判断是否为零RET ; 返回调用点```这个例子中的程序实现了一个LED灯的闪烁效果。
通过对P0口输出不同的值,LED灯会快速地亮灭。
四、单片机汇编语言的应用单片机汇编语言在嵌入式系统中应用广泛。
单片机常用指令单片机是一种集成在一个芯片上的微型计算机,广泛应用于各种电子设备中。
要让单片机按照我们的意愿工作,就需要给它下达各种指令。
下面就来介绍一些单片机常用的指令。
一、数据传送指令这一类指令用于在单片机内部的寄存器、存储器之间进行数据的传输。
比如“MOV”指令,它可以将一个数据从源操作数传送到目的操作数。
例如“MOV A, 50H”,就是把十六进制数 50H 传送到累加器 A 中。
“MOVX”指令则用于在单片机与外部数据存储器之间进行数据传送。
比如“MOVX A, @DPTR”,可以从外部数据存储器中读取数据到累加器 A 。
二、算术运算指令用于执行加、减、乘、除等算术运算。
“ADD”指令用于加法运算,“SUBB”指令用于带借位的减法运算。
例如“ADD A, R0”,将累加器 A 的值和寄存器 R0 的值相加,结果存放在累加器 A 中。
“MUL”指令用于乘法运算,它将累加器 A 和寄存器 B 中的两个 8 位无符号数相乘,结果的低 8 位存放在累加器 A 中,高 8 位存放在寄存器 B 中。
三、逻辑运算指令进行与、或、异或等逻辑操作。
“ANL”指令执行逻辑与操作,“ORL”指令执行逻辑或操作,“XRL”指令执行逻辑异或操作。
例如“ANL A, 0FH”,将累加器 A 的值和十六进制数 0FH 进行逻辑与运算,结果存放在累加器 A 中。
四、控制转移指令这类指令用于改变程序的执行流程。
“JMP”指令用于无条件跳转,直接跳转到指定的地址去执行程序。
例如“JMP 1000H”,程序将跳转到地址为 1000H 的地方继续执行。
“CJNE”指令用于比较两个操作数,如果不相等则跳转。
比如“CJNE A, 50H, LOOP”,如果累加器 A 的值不等于 50H ,就跳转到标号 LOOP 处执行。
“LCALL”和“ACALL”指令用于调用子程序。
“LCALL”可以调用64KB 范围内的子程序,而“ACALL”只能调用 2KB 范围内的子程序。
常用单片机汇编指令:MOV:单片机内部的寄存器或者存储器之间相互传递数据(内部RAM);MOVX:单片机内部的A累加器与片外的数据存储器(片外RAM)传送数据. MOVC: 单片机内部的A累加器向ROM(程序存储器)读取数据,因为程序存储器是固定的不可以写的,所以,A只能读数据,却不能向它写数据;换句话说MOVX和MOVC是针对两种不同的存储器而言,一个是片外数据存储器,另一个却是程序存储器1 .MOV A,Rn 寄存器内容送入累加器2 .MOV A,direct 直接地址单元中的数据送入累加器3 .MOV A,@Ri (i=0,1)间接RAM 中的数据送入累加器4 .MOV A,#data 立即数送入累加器5 .MOV Rn,A 累加器内容送入寄存器6 .MOV Rn,direct 直接地址单元中的数据送入寄存器7 .MOV Rn,#data 立即数送入寄存器8 .MOV direct,A 累加器内容送入直接地址单元9 .MOV direct,Rn 寄存器内容送入直接地址单元10. MOV direct,direct 直接地址单元中的数据送入另一个直接地址单元11 .MOV direct,@Ri (i=0,1)间接RAM 中的数据送入直接地址单元12 .MOV direct,#data 立即数送入直接地址单元13 .MOV @Ri,A (i=0,1)累加器内容送间接RAM 单元14 .MOV @Ri,direct (i=0,1)直接地址单元数据送入间接RAM 单元15 .MOV @Ri,#data (i=0,1)立即数送入间接RAM 单元16 .MOV DPTR,#data16 16 位立即数送入地址寄存器17 .MOVC A,@A+DPTR 以DPTR为基地址变址寻址单元中的数据送入累加器18 .MOVC A,@A+PC 以PC 为基地址变址寻址单元中的数据送入累加器19 .MOVX A,@Ri (i=0,1)外部RAM(8 位地址)送入累加器20 .MOVX A,@DPTR 外部RAM(16 位地址)送入累加器21 .MOVX @Ri,A (i=0,1)累计器送外部RAM(8 位地址)22 .MOVX @DPTR,A 累计器送外部RAM(16 位地址)23 .PUSH direct 直接地址单元中的数据压入栈24 .POP direct 弹栈送直接地址单元25 .XCH A,Rn 寄存器与累加器交换26 .XCH A,direct 直接地址单元与累加器交换27 .XCH A,@Ri (i=0,1)间接RAM 与累加器交换28 .XCHD A,@Ri (i=0,1)间接RAM 的低半字节与累加器交换算术操作类指令:1. ADD A,Rn 寄存器内容加到累加器2 .ADD A,direct 直接地址单元的内容加到累加器3 .ADD A,@Ri (i=0,1)间接ROM 的内容加到累加器4 .ADD A,#data 立即数加到累加器5 .ADDC A,Rn 寄存器内容带进位加到累加器6 .ADDC A,direct 直接地址单元的内容带进位加到累加器7 .ADDC A,@Ri(i=0,1) 间接ROM 的内容带进位加到累加器8 .ADDC A,#data 立即数带进位加到累加器9 .SUBB A,Rn 累加器带借位减寄存器内容10. SUBB A,direct 累加器带借位减直接地址单元的内容11 .SUBB A,@Ri (i=0,1)累加器带借位减间接RAM 中的内容12 .SUBB A,#data 累加器带借位减立即数13 .INC A 累加器加114 .INC Rn 寄存器加115 .INC direct 直接地址单元加116 .INC @Ri (i=0,1)间接RAM 单元加117 .DEC A 累加器减118 .DEC Rn 寄存器减119 .DEC direct 直接地址单元减120 .DEC @Rj 间接RAM 单元减 121 .INC DPTR 地址寄存器DPTR 加 122 .MUL AB A 乘以B,结果放在A23 .DIV AB A 除以B,结果放在A24. DA A 累加器十进制调整布尔变量操作类指令:1. CLR C 清进位位2 .CLR bit 清直接地址位3 .SETB C 置进位位4 .SETB bit 置直接地址位5 .CPL C 进位位求反6 .CPL bit 置直接地址位求反7 .ANL C,bit 进位位和直接地址位相“与”8 .ANL C,bit 进位位和直接地址位的反码相“与”9 .ORL C,bit 进位位和直接地址位相“或”10. ORL C,bit 进位位和直接地址位的反码相“或”11 .MOV C,bit 直接地址位送入进位位12 .MOV bit,C 进位位送入直接地址位13 .JC rel 进位位为1 则转移14 .JNC rel 进位位为0 则转移15 .JB bit,rel 直接地址位为1 则转移16 .JNB bit,rel 直接地址位为0 则转移17 .JBC bit,rel 直接地址位为1 则转移,该位清零逻辑操作数指令:1. ANL A,Rn 累加器与寄存器相“与”2 .ANL A,direct 累加器与直接地址单元相“与”3 .ANL A,@Ri 累加器与间接RAM 单元相“与”4 .ANL A,#data 累加器与立即数相“与”5 .ANL direct,A 直接地址单元与累加器相“与”6 .ANL direct,#data 直接地址单元与立即数相“与”7 .ORL A,Rn 累加器与寄存器相“或”8 .ORL A,direct 累加器与直接地址单元相“或”9 .ORL A,@Ri 累加器与间接RAM 单元单元相“或”10. ORL A,#data 累加器与立即数相“或”11. ORL direct,A 直接地址单元与累加器相“或”12 .ORL direct,#data 直接地址单元与立即数相“或”13 .XRL A,Rn 累加器与寄存器相“异或”14 .XRL A,direct 累加器与直接地址单元相“异或”15 .XRL A,@Ri 累加器与间接RAM 单元单元相“异或”16 .XRL A,#data 累加器与立即数相“异或”17 .XRL direct,A 直接地址单元与累加器相“异或”18 .XRL direct,#data 直接地址单元与立即数相“异或”19 .CLR A 累加器清“0”20 .CPL A 累加器求反21 .RL A 累加器循环左移22 .RLC A 累加器带进位位循环左移23 .RR A 累加器循环右移24 .RRC A 累加器带进位位循环右移25 .SWAP A 累加器半字节交换控制转移类指令1. ACALL addr11 绝对(短)调用子程序2 .LCALL addr16 长调用子程序3 .RET 子程序返回4 .RETI 中断返回5 .AJMP addr11 绝对(短)转移6 .LJMP addr16 长转移7 .SJMP rel 相对转移8 .JMP @A+DPTR 相对于DPTR 的间接转移9. JZ rel 累加器为零转移10. JNZ rel 累加器非零转移11. CJNE A,direct,rel 累加器与直接地址单元比较,不相等则转移12 .CJNE A,#data,rel 累加器与立即数比较,不相等则转移13 .CJNE Rn,#data,rel 寄存器与立即数比较,不相等则转移14 .CJNE @Ri,#data,rel 间接RAM 单元与立即数比较,不相等则转移15 .DJNZ Rn,rel 寄存器减1,非零转移16 .DJNZ direct,erl 直接地址单元减1,非零转移17 .NOP 空操作。
Microcontroller Instruction SetFor interrupt response time information, refer to the hardware description chapter.Note:1.Operations on SFR byte address 208 or bit addresses 209-215 (that is, the PSW orbits in the PSW) also affect flag settings.Instructions that Affect Flag Settings (1)InstructionFlag InstructionFlag COV AC C OVACADD X X X CLR C O ADDC XX X CPL C X SUBB X X XANL C,bit X MUL O X ANL C,/bit X DIV O XORL C,bit X DA X ORL C,/bit X RRC X MOV C,bit X RLC X CJNE XSETB C 1The Instruction Set and Addressing ModesR n Register R7-R0 of the currently selected Register Bank.direct8-bit internal data location’s address. This could be an Internal Data RAM location (0-127) or a SFR [i.e., I/O port, control register, status register, etc. (128-255)].@R i 8-bit internal data RAM location (0-255) addressed indirectly through register R1or R0.#data 8-bit constant included in instruction.#data 1616-bit constant included in instruction.addr 1616-bit destination address. Used by LCALL and LJMP . A branch can be anywhere within the 64K byte Program Memory address space.addr 1111-bit destination address. Used by ACALL and AJMP . The branch will be within the same 2K byte page of program memory as the first byte of the following instruction.relSigned (two’s complement) 8-bit offset byte. Used by SJMP and allconditional jumps. Range is -128 to +127 bytes relative to first byte of the following instruction.bitDirect Addressed bit in Internal Data RAM or Special Function Register.Instruction Set SummaryNote:Key: [2B] = 2 Byte, [3B] = 3 Byte, [2C] = 2 Cycle, [4C] = 4 Cycle, Blank = 1 byte/1 cycle12345670NOPJBC bit,rel [3B, 2C]JB bit, rel [3B, 2C]JNB bit, rel [3B, 2C]JC rel [2B, 2C]JNC rel [2B, 2C]JZ rel [2B, 2C]JNZ rel [2B, 2C]1AJMP (P0)[2B, 2C]ACALL (P0)[2B, 2C]AJMP (P1)[2B, 2C]ACALL (P1)[2B, 2C]AJMP (P2)[2B, 2C]ACALL (P2)[2B, 2C]AJMP (P3)[2B, 2C]ACALL (P3)[2B, 2C]2LJMP addr16[3B, 2C]LCALL addr16[3B, 2C]RET [2C]RETI [2C]ORL dir, A [2B]ANL dir, A [2B]XRL dir, a [2B]ORL C, bit [2B, 2C]3RR A RRC A RL A RLC A ORL dir, #data [3B, 2C]ANL dir, #data [3B, 2C]XRL dir, #data [3B, 2C]JMP @A + DPTR[2C]4INC A DEC A ADD A, #data [2B]ADDC A, #data [2B]ORL A, #data [2B]ANL A, #data [2B]XRL A, #data [2B]MOV A, #data [2B]5INC dir [2B]DEC dir [2B]ADD A, dir [2B]ADDC A, dir [2B]ORL A, dir [2B]ANL A, dir [2B]XRL A, dir [2B]MOV dir, #data [3B, 2C]6INC @R0DEC @R0ADD A, @R0ADDC A, @R0ORL A, @R0ANL A, @R0XRL A, @R0MOV @R0, @data[2B]7INC @R1DEC @R1ADD A, @R1ADDC A, @R1ORL A, @R1ANL A, @R1XRL A, @R1MOV @R1, #data[2B]8INC R0DEC R0ADD A, R0ADDC A, R0ORL A, R0ANL A, R0XRL A, R0MOV R0, #data [2B]9INC R1DEC R1ADD A, R1ADDC A, R1ORL A, R1ANL A, R1XRL A, R1MOV R1, #data [2B]AINC R2DEC R2ADD A, R2ADDC A, R2ORL A, R2ANL A, R2XRL A, R2MOV R2, #data [2B]BINC R3DEC R3ADD A, R3ADDC A, R3ORL A, R3ANL A, R3XRL A, R3MOV R3, #data [2B]CINC R4DEC R4ADD A, R4ADDC A, R4ORL A, R4ANL A, R4XRL A, R4MOV R4, #data [2B]DINC R5DEC R5ADD A, R5ADDC A, R5ORL A, R5ANL A, R5XRL A, R5MOV R5, #data [2B]EINC R6DEC R6ADD A, R6ADDC A, R6ORL A, R6ANL A, R6XRL A, R6MOV R6, #data [2B]FINC R7DEC R7ADD A, R7ADDC A, R7ORL A, R7ANL A, R7XRL A, R7MOV R7, #data [2B]Instruction SetInstruction Set Summary (Continued)Note:Key: [2B] = 2 Byte, [3B] = 3 Byte, [2C] = 2 Cycle, [4C] = 4 Cycle, Blank = 1 byte/1 cycle89A B C D E F 0SJMP REL [2B, 2C]MOV DPTR,#data 16[3B, 2C]ORL C, /bit [2B, 2C]ANL C, /bit [2B, 2C]PUSH dir [2B, 2C]POP dir [2B, 2C]MOVX A,@DPTR [2C]MOVX @DPTR, A[2C]1AJMP (P4)[2B, 2C]ACALL (P4)[2B, 2C]AJMP (P5)[2B, 2C]ACALL (P5)[2B, 2C]AJMP (P6)[2B, 2C]ACALL (P6)[2B, 2C]AJMP (P7)[2B, 2C]ACALL (P7)[2B, 2C]2ANL C, bit [2B, 2C]MOV bit, C [2B, 2C]MOV C, bit [2B]CPL bit [2B]CLR bit [2B]SETB bit [2B]MOVX A, @R0[2C]MOVX wR0, A [2C]3MOVC A,@A + PC [2C]MOVC A,@A + DPTR[2C]INC DPTR [2C]CPL C CLR C SETB C MOVX A, @RI [2C]MOVX @RI, A [2C]4DIV AB [2B, 4C]SUBB A, #data [2B]MUL AB [4C]CJNE A,#data, rel [3B, 2C]SWAP A DA A CLR A CPL A 5MOV dir, dir [3B, 2C]SUBB A, dir [2B]CJNE A, dir, rel [3B, 2C]XCH A, dir [2B]DJNZ dir, rel [3B, 2C]MOV A, dir [2B]MOV dir, A [2B]6MOV dir, @R0[2B, 2C]SUBB A, @R0MOV @R0, dir [2B, 2C]CJNE@R0, #data, rel[3B, 2C]XCH A, @R0XCHD A, @R0MOV A, @R0MOV @R0, A 7MOV dir, @R1[2B, 2C]SUBB A, @R1MOV @R1, dir [2B, 2C]CJNE@R1, #data, rel[3B, 2C]XCH A, @R1XCHD A, @R1MOV A, @R1MOV @R1, A 8MOV dir, R0[2B, 2C]SUBB A, R0MOV R0, dir [2B, 2C]CJNE R0, #data, rel [3B, 2C]XCH A, R0DJNZ R0, rel [2B, 2C]MOV A, R0MOV R0, A 9MOV dir, R1[2B, 2C]SUBB A, R1MOV R1, dir [2B, 2C]CJNE R1, #data, rel [3B, 2C]XCH A, R1DJNZ R1, rel [2B, 2C]MOV A, R1MOV R1, A AMOV dir, R2[2B, 2C]SUBB A, R2MOV R2, dir [2B, 2C]CJNE R2, #data, rel [3B, 2C]XCH A, R2DJNZ R2, rel [2B, 2C]MOV A, R2MOV R2, A BMOV dir, R3[2B, 2C]SUBB A, R3MOV R3, dir [2B, 2C]CJNE R3, #data, rel [3B, 2C]XCH A, R3DJNZ R3, rel [2B, 2C]MOV A, R3MOV R3, A CMOV dir, R4[2B, 2C]SUBB A, R4MOV R4, dir [2B, 2C]CJNE R4, #data, rel [3B, 2C]XCH A, R4DJNZ R4, rel [2B, 2C]MOV A, R4MOV R4, A DMOV dir, R5[2B, 2C]SUBB A, R5MOV R5, dir [2B, 2C]CJNE R5, #data, rel [3B, 2C]XCH A, R5DJNZ R5, rel [2B, 2C]MOV A, R5MOV R5, A EMOV dir, R6[2B, 2C]SUBB A, R6MOV R6, dir [2B, 2C]CJNE R6, #data, rel [3B, 2C]XCH A, R6DJNZ R6, rel [2B, 2C]MOV A, R6MOV R6. A FMOV dir, R7[2B, 2C]SUBB A, R7MOV R7, dir [2B, 2C]CJNE R7, #data, rel [3B, 2C]XCH A, R7DJNZ R7, rel [2B, 2C]MOV A, R7MOV R7, ATable 1. AT89 Instruction Set Summary (1)Note: 1.All mnemonics copyrighted © Intel Corp., 1980.MnemonicDescriptionByteOscillator PeriodARITHMETIC OPERATIONS ADD A,R n Add register to Accumulator 112ADD A,direct Add direct byte to Accumulator 212ADD A,@R i Add indirect RAM to Accumulator112ADD A,#data Add immediate data to Accumulator212ADDC A,R n Add register toAccumulator with Carry 112ADDC A,direct Add direct byte toAccumulator with Carry 212ADDC A,@R i Add indirect RAM to Accumulator with Carry 112ADDC A,#data Add immediate data to Acc with Carry 212SUBB A,R n Subtract Register from Acc with borrow112SUBB A,direct Subtract direct byte from Acc with borrow 212SUBB A,@R i Subtract indirect RAM from ACC with borrow 112SUBB A,#data Subtract immediate data from Acc with borrow 212INC A Increment Accumulator 112INC R n Increment register 112INC direct Increment direct byte 212INC @R i Increment direct RAM 112DEC A Decrement Accumulator 112DEC R n Decrement Register 112DEC direct Decrement direct byte 212DEC @R i Decrement indirect RAM 112INC DPTR Increment Data Pointer 124MUL AB Multiply A & B 148DIV AB Divide A by B 148DAADecimal Adjust Accumulator112MnemonicDescriptionByteOscillator PeriodLOGICAL OPERATIONSANL A,R n AND Register to Accumulator 112ANL A,direct AND direct byte to Accumulator 212ANL A,@R i AND indirect RAM to Accumulator112ANL A,#data AND immediate data to Accumulator 212ANL direct,A AND Accumulator to direct byte212ANL direct,#data AND immediate data to direct byte 324ORL A,R n OR register to Accumulator 112ORL A,direct OR direct byte to Accumulator 212ORL A,@R i OR indirect RAM to Accumulator112ORL A,#data OR immediate data to Accumulator212ORL direct,A OR Accumulator to direct byte212ORL direct,#data OR immediate data to direct byte324XRLA,R nExclusive-OR register to Accumulator112XRL A,direct Exclusive-OR direct byte to Accumulator 212XRLA,@R iExclusive-OR indirect RAM to Accumulator 112XRL A,#data Exclusive-OR immediate data to Accumulator 212XRLdirect,AExclusive-ORAccumulator to direct byte212XRL direct,#data Exclusive-OR immediate data to direct byte 324CLR A Clear Accumulator 112CPL A Complement Accumulator112RL A Rotate Accumulator Left 112RLCARotate Accumulator Left through the Carry112LOGICAL OPERATIONS (continued)Instruction SetRR A Rotate Accumulator Right112RRC A Rotate Accumulator Right through the Carry 112SWAPASwap nibbles within the Accumulator112DATA TRANSFER MOV A,R n Move register to Accumulator 112MOV A,direct Move direct byte to Accumulator212MOV A,@R i Move indirect RAM to Accumulator112MOV A,#data Move immediate data to Accumulator212MOV R n ,A Move Accumulator to register112MOV R n ,direct Move direct byte to register224MOV R n ,#data Move immediate data to register212MOV direct,A Move Accumulator to direct byte212MOV direct,R n Move register to direct byte224MOV direct,direct Move direct byte to direct 324MOV direct,@R i Move indirect RAM to direct byte224MOV direct,#data Move immediate data to direct byte324MOV @R i ,A Move Accumulator to indirect RAM 112MOV @R i ,direct Move direct byte to indirect RAM224MOV @R i ,#dataMove immediate data to indirect RAM212MOVDPTR,#data16Load Data Pointer with a16-bit constant324MOVC A,@A+DPTR Move Code byte relative to DPTR to Acc124MOVC A,@A+PC Move Code byte relative to PC to Acc124MOVXA,@R iMove External RAM (8-bit addr) to Acc124DATA TRANSFER (continued)Mnemonic Description Byte Oscillator PeriodMOVX A,@DPTR Move Exernal RAM (16-bit addr) to Acc 124MOVX @R i ,A Move Acc to External RAM (8-bit addr) 124MOVX @DPTR,A Move Acc to External RAM (16-bit addr)124PUSHdirectPush direct byte onto stack224POPdirect Pop direct byte from stack224XCHA,R n Exchange register with Accumulator112XCHA,direct Exchange direct byte with Accumulator 212XCHA,@R i Exchange indirect RAM with Accumulator 112XCHDA,@R i Exchange low-order Digit indirect RAM with Acc112BOOLEAN VARIABLE MANIPULATION CLR C Clear Carry 112CLR bit Clear direct bit 212SETB C Set Carry 112SETB bit Set direct bit 212CPL C Complement Carry 112CPL bit Complement direct bit 212ANL C,bit AND direct bit to CARRY 224ANL C,/bit AND complement of direct bit to Carry 224ORL C,bit OR direct bit to Carry 224ORL C,/bit OR complement of direct bit to Carry224MOV C,bit Move direct bit to Carry 212MOV bit,C Move Carry to direct bit 224JC rel Jump if Carry is set 224JNC rel Jump if Carry not set 224JB bit,rel Jump if direct Bit is set 324JNB bit,rel Jump if direct Bit is Not set324JBCbit,relJump if direct Bit is set & clear bit324PROGRAM BRANCHINGMnemonic DescriptionByte Oscillator PeriodACALL addr11Absolute Subroutine Call 224LCALL addr16Long Subroutine Call 324RET Return from Subroutine 124RETI Return from interrupt 124AJMP addr11Absolute Jump 224LJMP addr16Long Jump324SJMP rel Short Jump (relative addr)224JMP @A+DPTR Jump indirect relative to the DPTR124JZ rel Jump if Accumulator is Zero224JNZ rel Jump if Accumulator is Not Zero224CJNEA,direct,relCompare direct byte to Acc and Jump if Not Equal324CJNE A,#data,rel Compare immediate to Acc and Jump if Not Equal324CJNER n ,#data,relCompare immediate to register and Jump if Not Equal324CJNE@R i ,#data,relCompare immediate to indirect and Jump if Not Equal324DJNZ R n ,rel Decrement register and Jump if Not Zero 224DJNZ direct,rel Decrement direct byte and Jump if Not Zero 324NOPNo Operation112Mnemonic DescriptionByte Oscillator PeriodInstruction Set Table 2. Instruction Opcodes in Hexadecimal OrderHex Code Numberof BytesMnemonic Operands001NOP012AJMP code addr023LJMP code addr031RR A041INC A052INC data addr061INC@R0071INC@R1081INC R0091INC R10A1INC R20B1INC R30C1INC R40D1INC R50E1INC R60F1INC R7103JBC bit addr,code addr 112ACALL code addr123LCALL code addr131RRC A141DEC A152DEC data addr161DEC@R0171DEC@R1181DEC R0191DEC R11A1DEC R21B1DEC R31C1DEC R41D1DEC R51E1DEC R61F1DEC R7203JB bit addr,code addr 212AJMP code addr221RET231RL A242ADD A,#data252ADD A,data addr HexCodeNumberof BytesMnemonic Operands261ADD A,@R0271ADD A,@R1281ADD A,R0291ADD A,R12A1ADD A,R22B1ADD A,R32C1ADD A,R42D1ADD A,R52E1ADD A,R62F1ADD A,R7303JNB bit addr,code addr 312ACALL code addr321RETI331RLC A342ADDC A,#data352ADDC A,data addr361ADDC A,@R0371ADDC A,@R1381ADDC A,R0391ADDC A,R13A1ADDC A,R23B1ADDC A,R33C1ADDC A,R43D1ADDC A,R53E1ADDC A,R63F1ADDC A,R7402JC code addr412AJMP code addr422ORL data addr,A433ORL data addr,#data 442ORL A,#data452ORL A,data addr461ORL A,@R0471ORL A,@R1481ORL A,R0491ORL A,R14A1ORL A,R24B 1ORL A,R34C 1ORL A,R44D 1ORL A,R54E 1ORL A,R64F 1ORL A,R7502JNC code addr 512ACALL code addr 522ANL data addr,A 533ANL data addr,#data 542ANL A,#data 552ANL A,data addr 561ANL A,@R0571ANL A,@R1581ANL A,R0591ANL A,R15A 1ANL A,R25B 1ANL A,R35C 1ANL A,R45D 1ANL A,R55E 1ANL A,R65F 1ANL A,R7602JZ code addr 612AJMP code addr 622XRL data addr,A 633XRL data addr,#data 642XRL A,#data 652XRL A,data addr 661XRL A,@R0671XRL A,@R1681XRL A,R0691XRL A,R16A 1XRL A,R26B 1XRL A,R36C 1XRL A,R46D 1XRL A,R56E 1XRL A,R66F 1XRL A,R7702JNZcode addrHex Code Number of BytesMnemonic Operands 712ACALL code addr 722ORL C,bit addr 731JMP @A+DPTR 742MOV A,#data 753MOV data addr,#data 762MOV @R0,#data 772MOV @R1,#data 782MOV R0,#data 792MOV R1,#data 7A 2MOV R2,#data 7B 2MOV R3,#data 7C 2MOV R4,#data 7D 2MOV R5,#data 7E 2MOV R6,#data 7F 2MOV R7,#data 802SJMP code addr 812AJMP code addr 822ANL C,bit addr 831MOVC A,@A+PC 841DIV AB853MOV data addr,data addr 862MOV data addr,@R0872MOV data addr,@R1882MOV data addr,R0892MOV data addr,R18A 2MOV data addr,R28B 2MOV data addr,R38C 2MOV data addr,R48D 2MOV data addr,R58E 2MOV data addr,R68F 2MOV data addr,R7903MOV DPTR,#data 912ACALL code addr 922MOV bit addr,C 931MOVC A,@A+DPTR 942SUBB A,#data 952SUBB A,data addr 961SUBBA,@R0Hex Code Number of BytesMnemonic OperandsInstruction Set971SUBB A,@R1981SUBB A,R0991SUBB A,R19A 1SUBB A,R29B 1SUBB A,R39C 1SUBB A,R49D 1SUBB A,R59E 1SUBB A,R69F 1SUBB A,R7A02ORL C,/bit addr A12AJMP code addr A22MOV C,bit addr A31INC DPTR A41MUL ABA5reserved A62MOV @R0,data addr A72MOV @R1,data addr A82MOV R0,data addr A92MOV R1,data addr AA 2MOV R2,data addr AB 2MOV R3,data addr AC 2MOV R4,data addr AD 2MOV R5,data addr AE 2MOV R6,data addr AF 2MOV R7,data addr B02ANL C,/bit addr B12ACALL code addr B22CPL bit addr B31CPL CB43CJNE A,#data,code addr B53CJNE A,data addr,code addr B63CJNE @R0,#data,code addr B73CJNE @R1,#data,code addr B83CJNE R0,#data,code addr B93CJNE R1,#data,code addr BA 3CJNE R2,#data,code addr BB 3CJNE R3,#data,code addr BC3CJNER4,#data,code addr Hex Code Number of BytesMnemonic Operands BD 3CJNE R5,#data,code addr BE 3CJNE R6,#data,code addr BF 3CJNE R7,#data,code addr C02PUSH data addr C12AJMP code addr C22CLR bit addr C31CLR C C41SWAP AC52XCH A,data addr C61XCH A,@R0C71XCH A,@R1C81XCH A,R0C91XCH A,R1CA 1XCH A,R2CB 1XCH A,R3CC 1XCH A,R4CD 1XCH A,R5CE 1XCH A,R6CF 1XCH A,R7D02POP data addr D12ACALL code addr D22SETB bit addr D31SETB C D41DA AD53DJNZ data addr,code addr D61XCHD A,@R0D71XCHD A,@R1D82DJNZ R0,code addr D92DJNZ R1,code addr DA 2DJNZ R2,code addr DB 2DJNZ R3,code addr DC 2DJNZ R4,code addr DD 2DJNZ R5,code addr DE 2DJNZ R6,code addr DF 2DJNZ R7,code addr E01MOVX A,@DPTR E12AJMP code addr E21MOVXA,@R0Hex Code Number of BytesMnemonic OperandsE31MOVX A,@R1E41CLR AE52MOV A,data addr E61MOV A,@R0E71MOV A,@R1E81MOV A,R0E91MOV A,R1EA 1MOV A,R2EB 1MOV A,R3EC 1MOV A,R4ED 1MOV A,R5EE 1MOV A,R6EF 1MOV A,R7F01MOVX @DPTR,A F12ACALL code addr F21MOVX @R0,A F31MOVX @R1,A F41CPL AF52MOV data addr,A F61MOV @R0,A F71MOV @R1,A F81MOV R0,A F91MOV R1,A FA 1MOV R2,A FB 1MOV R3,A FC 1MOV R4,A FD 1MOV R5,A FE 1MOV R6,A FF1MOVR7,AHex Code Number of BytesMnemonic OperandsInstruction SetInstruction DefinitionsACALL addr11Function:Absolute CallDescription:ACALL unconditionally calls a subroutine located at the indicated address. The instruction increments the PC twice to obtain the address of the following instruction, then pushes the 16-bit result onto the stack (low-orderbyte first) and increments the Stack Pointer twice. The destination address is obtained by successivelyconcatenating the five high-order bits of the incremented PC, opcode bits 7 through 5, and the second byte of theinstruction. The subroutine called must therefore start within the same 2 K block of the program memory as thefirst byte of the instruction following ACALL. No flags are affected.Example:Initially SP equals 07H. The label SUBRTN is at program memory location 0345 H. After executing the following instruction,ACALL SUBRTNat location 0123H, SP contains 09H, internal RAM locations 08H and 09H will contain 25H and 01H, respectively,and the PC contains 0345H.Bytes:2Cycles:2Encoding:a10a9a810001a7a6a5a4a3a2a1a0Operation:ACALL(PC) ← (PC) + 2(SP) ← (SP) + 1((SP)) ← (PC7-0)(SP) ← (SP) + 1((SP)) ← (PC15-8)(PC10-0) ← page addressADD A,<src-byte>Function:AddDescription:ADD adds the byte variable indicated to the Accumulator, leaving the result in the Accumulator. The carry and auxiliary-carry flags are set, respectively, if there is a carry-out from bit 7 or bit 3, and cleared otherwise. Whenadding unsigned integers, the carry flag indicates an overflow occurred.OV is set if there is a carry-out of bit 6 but not out of bit 7, or a carry-out of bit 7 but not bit 6; otherwise, OV iscleared. When adding signed integers, OV indicates a negative number produced as the sum of two positiveoperands, or a positive sum from two negative operands.Four source operand addressing modes are allowed: register, direct, register-indirect, or immediate.Example:The Accumulator holds 0C3H (1100001lB), and register 0 holds 0AAH (10101010B). The following instruction, ADD A,R0leaves 6DH (01101101B) in the Accumulator with the AC flag cleared and both the carry flag and OV set to 1. ADD A,R nBytes:1Cycles:1Encoding:00101r r rOperation:ADD(A) ← (A) + (R n)ADD A,directBytes:2Cycles:1Encoding:00100101direct addressOperation:ADD(A)← (A) + (direct)ADD A,@R iBytes:1Cycles:1Encoding:0010011iOperation:ADD(A) ← (A) + ((R i))ADD A,#dataBytes:2Cycles:1Encoding:00100100immediate dataOperation:ADD(A)← (A) + #dataInstruction SetADDC A, <src-byte>Function:Add with CarryDescription:ADDC simultaneously adds the byte variable indicated, the carry flag and the Accumulator contents, leaving the result in the Accumulator. The carry and auxiliary-carry flags are set respectively, if there is a carry-out from bit 7or bit 3, and cleared otherwise. When adding unsigned integers, the carry flag indicates an overflow occurred.OV is set if there is a carry-out of bit 6 but not out of bit 7, or a carry-out of bit 7 but not out of bit 6; otherwise OVis cleared. When adding signed integers, OV indicates a negative number produced as the sum of two positiveoperands or a positive sum from two negative operands.Four source operand addressing modes are allowed: register, direct, register-indirect, or immediate.Example:The Accumulator holds 0C3H (11000011B) and register 0 holds 0AAH (10101010B) with the carry flag set. The following instruction,ADDC A,R0leaves 6EH (01101110B) in the Accumulator with AC cleared and both the Carry flag and OV set to 1.ADDC A,R nBytes:1Cycles:1Encoding:00111r r rOperation:ADDC(A) ← (A) + (C) + (R n)ADDC A,directBytes:2Cycles:1Encoding:00110101direct addressOperation:ADDC(A)← (A) + (C) + (direct)ADDC A,@R iBytes:1Cycles:1Encoding:0011011iOperation:ADDC(A) ← (A) + (C) + ((R i))ADDC A,#dataBytes:2Cycles:1Encoding:00110100immediate dataOperation:ADDC(A)← (A) + (C) + #dataAJMP addr11Function:Absolute JumpDescription:AJMP transfers program execution to the indicated address, which is formed at run-time by concatenating the high-order five bits of the PC (after incrementing the PC twice), opcode bits 7 through 5, and the second byte ofthe instruction. The destination must therfore be within the same 2 K block of program memory as the first byte ofthe instruction following AJMP.Example:The label JMP ADR is at program memory location 0123H. The following instruction,AJMP JMP ADRis at location 0345H and loads the PC with 0123H.Bytes:2Cycles:2Encoding:a10a9a800001a7a6a5a4a3a2a1a0Operation:AJMP(PC) ← (PC) + 2(PC10-0) ← page addressANL<dest-byte>,<src-byte>Function:Logical-AND for byte variablesDescription:ANL performs the bitwise logical-AND operation between the variables indicated and stores the results in the destination variable. No flags are affected.The two operands allow six addressing mode combinations. When the destination is the Accumulator, the sourcecan use register, direct, register-indirect, or immediate addressing; when the destination is a direct address, thesource can be the Accumulator or immediate data.Note: When this instruction is used to modify an output port, the value used as the original port data will be readfrom the output data latch, not the input pins.Example:If the Accumulator holds 0C3H (1100001lB), and register 0 holds 55H (01010101B), then the following instruction,ANL A,R0leaves 41H (01000001B) in the Accumulator.When the destination is a directly addressed byte, this instruction clears combinations of bits in any RAMlocation or hardware register. The mask byte determining the pattern of bits to be cleared would either be aconstant contained in the instruction or a value computed in the Accumulator at run-time. The followinginstruction,ANL P1,#01110011Bclears bits 7, 3, and 2 of output port 1.ANL A,R nBytes:1Cycles:1Encoding:01011r r rOperation:ANL(A) ← (A) ∧ (R n)Instruction SetANL A,directBytes:2Cycles:1Encoding:01010101direct addressOperation:ANL(A)← (A) ∧ (direct)ANL A,@R iBytes:1Cycles:1Encoding:0101011iOperation:ANL(A) ← (A) ∧ ((R i))ANL A,#dataBytes:2Cycles:1Encoding:01010100immediate dataOperation:ANL(A)← (A) ∧ #dataANL direct,ABytes:2Cycles:1Encoding:01010010direct addressOperation:ANL(direct)← (direct) ∧ (A)ANL direct,#dataBytes:3Cycles:2Encoding:01010011direct address immediate data Operation:ANL(direct) ← (direct) ∧ #dataANL C,<src-bit>Function:Logical-AND for bit variablesDescription:If the Boolean value of the source bit is a logical 0, then ANL C clears the carry flag; otherwise, this instruction leaves the carry flag in its current state. A slash ( / ) preceding the operand in the assembly language indicatesthat the logical complement of the addressed bit is used as the source value, but the source bit itself is notaffected. No other flags are affected.Only direct addressing is allowed for the source operand.Example:Set the carry flag if, and only if, P1.0 = 1, ACC.7 = 1, and OV = 0:MOV C,P1.0;LOAD CARRY WITH INPUT PIN ST A TEANL C,ACC.7;AND CARRY WITH ACCUM. BIT 7ANL C,/OV;AND WITH INVERSE OF OVERFLOW FLAGANL C,bitBytes:2Cycles:2Encoding:10000010bit addressOperation:ANL(C)← (C) ∧ (bit)ANL C,/bitBytes:2Cycles:2Encoding:10110000bit addressOperation:ANL(C)← (C) ∧ (bit)Instruction SetCJNE <dest-byte>,<src-byte>, relFunction:Compare and Jump if Not Equal.Description:CJNE compares the magnitudes of the first two operands and branches if their values are not equal. The branch destination is computed by adding the signed relative-displacement in the last instruction byte to the PC, afterincrementing the PC to the start of the next instruction. The carry flag is set if the unsigned integer value of<dest-byte> is less than the unsigned integer value of <src-byte>; otherwise, the carry is cleared. Neitheroperand is affected.The first two operands allow four addressing mode combinations: the Accumulator may be compared with anydirectly addressed byte or immediate data, and any indirect RAM location or working register can be comparedwith an immediate constant.Example:The Accumulator contains 34H. Register 7 contains 56H. The first instruction in the sequence,CJNE R7, # 60H, NOT_EQ;. . . . . . . . ;R7 = 60H.NOT_EQ: JC REQ_LOW;IF R7 < 60H.;. . . . . . . . ;R7 > 60H.sets the carry flag and branches to the instruction at label NOT_EQ. By testing the carry flag, this instructiondetermines whether R7 is greater or less than 60H.If the data being presented to Port 1 is also 34H, then the following instruction,WAIT:CJNE A, P1,WAITclears the carry flag and continues with the next instruction in sequence, since the Accumulator does equal thedata read from P1. (If some other value was being input on P1, the program loops at this point until the P1 datachanges to 34H.)CJNE A,direct,relBytes:3Cycles:2Encoding:10110101direct address rel.addressOperation:(PC)← (PC) + 3IF (A) < > (direct)THEN(PC) ← (PC) + relative offsetIF (A) < (direct)THEN(C) ← 1ELSE(C) ← 0CJNE A,#data,relBytes:3Cycles:2Encoding:10110100immediate data rel.address Operation:(PC)← (PC) + 3IF (A) < > dataTHEN(PC) ← (PC) + relative offsetIF (A) < dataTHEN(C) ← 1ELSE(C) ← 0CJNE R n,#data,relBytes:3Cycles:2Encoding:10111r r r immediate data rel. address Operation:(PC) ← (PC) + 3IF (R n) < > dataTHEN(PC) ← (PC) + relative offsetIF (R n) < dataTHEN(C) ← 1ELSE(C) ← 0CJNE @R i,data,relBytes:3Cycles:2Encoding:1011011i immediate data rel.address Operation:(PC)← (PC) + 3IF ((R i)) < > dataTHEN(PC) ← (PC) + relative offsetIF ((R i)) < dataTHEN(C) ← 1ELSE(C) ← 0Instruction SetCLR AFunction:Clear AccumulatorDescription:CLR A clears the Accumulator (all bits set to 0). No flags are affectedExample:The Accumulator contains 5CH (01011100B). The following instruction,CLR Aleaves the Accumulator set to 00H (00000000B).Bytes:1Cycles:1Encoding:11100100Operation:CLR(A) ← 0CLR bitFunction:Clear bitDescription:CLR bit clears the indicated bit (reset to 0). No other flags are affected. CLR can operate on the carry flag or any directly addressable bit.Example:Port 1 has previously been written with 5DH (01011101B). The following instruction,CLR P1.2 leaves the port set to 59H (01011001B).CLR CBytes:1Cycles:1Encoding:11000011Operation:CLR(C) ← 0CLR bitBytes:2Cycles:1Encoding:11000010bit addressOperation:CLR(bit)← 0CPL AFunction:Complement AccumulatorDescription:CPLA logically complements each bit of the Accumulator (one’s complement). Bits which previously contained a1 are changed to a 0 and vice-versa. No flags are affected.Example:The Accumulator contains 5CH (01011100B). The following instruction,CPL Aleaves the Accumulator set to 0A3H (10100011B).Bytes:1Cycles:1Encoding:11110100Operation:CPL(A) ← (A)CPL bitFunction:Complement bitDescription:CPL bit complements the bit variable specified. A bit that had been a 1 is changed to 0 and vice-versa. No other flags are affected. CLR can operate on the carry or any directly addressable bit.Note: When this instruction is used to modify an output pin, the value used as the original data is read from theoutput data latch, not the input pin.Example:Port 1 has previously been written with 5BH (01011101B). The following instruction sequence,CPL P1.1CPL P1.2 leaves the port set to 5BH (01011011B).CPL CBytes:1Cycles:1Encoding:10110011Operation:CPL(C) ← (C)CPL bitBytes:2Cycles:1Encoding:10110010bit addressOperation:CPL(bit)← (bit)。