当前位置:文档之家› 51单片机汇编指令集

51单片机汇编指令集

带进位循环左移;

带进位循环右移;

51 单片机汇编指令集

一、数据传送类指令( 7 种助记符)

MOV(英文为Move :对内部数据寄存器RAM 和特殊功能寄存器SFR 的数据进行 传送; MOV Q Move Code )读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部 RAM 勺数据传送; XCH (Exchange) 字节交换;

XCHD (Exchange low-order Digit) 低半字节交换;

PUSH (Push onto Stack) 入栈;

POP (Pop from Stack) 出栈; 二、算术运算类指令( 8 种助记符) ADD(Addition) 加法;

ADDC(Add with Carry) 带进位加法;

SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加 1; DEC(Decrement) 减 1;

MUL(Multiplication 、Multiply) 乘法;

DIV(Division 、Divide) 除法; 三、逻辑运算类指令( 10 种助记符) ANL(AND Logic) 逻辑与;

ORL(OR Logic) 逻辑或;

XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零;

CPL(Complement) 取反;

RL(Rotate left) 循环左移;

RLC(Rotate Left throught the Carry flag) RR(Rotate Right) 循环右移;

RRC (Rotate Right throught the Carry flag) SWAP (Swap) 低 4 位与高 4 位交换; 四、控制转移类指令( 17 种助记符)

ACALL ( Absolute subroutine Call )子程序绝对调用; LCALL ( Long subroutine Call )子程序长调用; RET ( Return from subroutine )子程序返回; RETI ( Return from Interruption )中断返回; SJMP ( Short Jump )短转移;

AJMP ( Absolute Jump )绝对转移; LJMP( Long Jump )长转移;

CJNE (Compare Jump if Not Equal) 比较不相等则转移;

DJNZ (Decreme nt Jump if Not Zero) 减1后不为0则转移; JZ (Jump if Zero) 结果为0则转移;

JNZ (Jump if Not Zero) 结果不为0则转移; JC (Jump if the Carry flag is set) 有进位则转移; JNC (Jump if Not Carry) 无进位则转移; JB (Jump if the Bit is set) 位为1则转移; JNB (Jump if the Bit is Not set) 位为0则转移; JBC(Jump if the Bit is set and Clear the bit) 位为1则转移,并清除该位;

NOP (No Operation) 空操作;

五、位操作指令( 1 种助记符)

CLR 位清零;

SETB(Set Bit) 位置1 。

8 种常用伪指令

1.ORG 16 位地址;此指令用在原程序或数据块的开始,指明此语句后面目标程序或数据块存放的起始地址。

2.[标号:]DB 字节数据项表;

将项表中的字节数据存放到从标号开始的连续字节单元中。例如:SEG:DB 88H,100,“7”,“C”

3.[标号:]DW 双字节数据项表;

定义16位地址表,16 地址按低位地址存低位字节,高位地址存高位字节。例如:TAB:DW 1234H,7BH

4.名字EQU表达式或名字二表达式;用与给一个表达式赋值或给字符串起名字。之

后名字可用做程序地址,数据

地址或立即数地址使用。名字必须是一字母开头的字母数字串。

例如:COUNT=1或SPACE EQU 10H

5.名字DATA直接字节地址;

给8位内部RAM单元起个名字,名字必须是一字母开头的字母数字串。同一单元可起多个名字。

例如:ERROR DATA 80H

6.名字XDATA直接字节地址;

给8位外部RAM起个名字,名字规定同DATA伪指令。

例如:IO_PORT XDATA 0CF04H

7.名字BIT位指令;

给一可位寻址的位单元起个名字,规定同DATA伪指令。例如:SWT BIT 30H 8.[标号:]END;

指出源程序到此结束,汇编对其后的程序语句不予理睬。源程序只在主程序最后使用一个END。

指令集(111条)

六•记忆方法

MCS —51使用汇编语言指令,它共有44个操作码助记符,33种功能,

其操作数有# data、direct、Rn、@Ri等。这里先介绍指令助记符及其相关符号的记忆方法。一、助记符号的记忆方法

1表格列举法

把44个指令助记符按功能分为五类,每类列表记忆。此处从略,请读者自己总结。

2 英文还原法

单片机的操作码助记符是该指令功能的英文缩写,将缩写还原成英语原文,再对照汉语有助于理解其助记符含义,从而加强记忆。例如:

增量INC —In cremect 减量DNC —Decreme nt

短转移SJMP —Short jump 长转移LJMP —Long jump 比较转移CJNE —Compare jump not equality 绝对转移AJMP —Absolute jump 空操作NOP —No operation

交换XCH —Exchange 加法ADD —Addition

乘法MUL —Multiplication 除法DIV —Division

左环移RL —Rotate left 进位左环移RLC —Rotate left carry

右环移RR —Rotate right 进位右环移RRC —Rotate right carry

3功能模块记忆法

单片机的44个指令助记符,按所属指令功能可分为五大类,每类又可以按功能相似原

则为2〜3组。这样,化整为零,各个击破,实现快速记忆。

1) 数据传送组。2)加减运算组

MOV内部数据传送ADD加法

MOVC程序存储器传送ADDC带进位加法

MOVX外部数据传送SUBB带进位减法

3)逻辑运算组。 4 )子程序调用组。

ANL逻辑与LCALL长调用

ORL逻辑或ALALL绝对调用

XRL逻辑异或RET子程序返回

二、指令的记忆方法

1指令操作数的有关符号

MCS —51的寻址方式共有六种:立即数寻址、直接寻址、寄存器寻址、寄存器间址、变址寻址、相对寻址。我们必须掌握其表示的方法。

1) 立即数与直接地址。ata表示八位立即数,# data16表示是十六位立即数,data或

direct表示直接地址。

2) Rn(n=0 —7)、A、B、CY、DPTR 寄存器寻址变量。

3) @R0、@R1、@DPTR、SP表示寄存器间址变量。

4) DPTR + A、PC + A表示变址寻址的变量。

5) PC + rel (相对量)表示相对寻址变量。

记住指令的助记符,掌握不同寻址方式的指令操作数的表示方法,为我们记忆汇编指

令打下了基础。MCS —51指令虽多,但按功能可分为五类,

其中数据传送类28条,算术运算类24条,逻辑操作类25条,控制转移类17条,布尔位操作

类17条。在每类指令里,根据其功能,抓住其源、

目的操作数的不同组合,再辅之以下方法,是完全能记住的。

我们约定,可能的目的操作数按(# data/direct/A/R n/@Ri )顺序表示。

对于MOV指令,其目的操作数按A、Rn、direct、@Ri的顺序书写,则可以记住MOV的

15

条指令。例如以累加器A为目的操作数,可写出如下4条指令。

MOV A , # data/direct/A/Rn/@Ri

以此类推,写出其它指令。

MOV Rn ,# data/direct/A

MOV direct , # data/direct/A/Rn/@Ri

MOV @Ri ,# data/direct/A

2 指令图示记忆法

图示记忆法是把操作功能相同或相似、但其操作数不同的指令,用图形和箭头将目

的、源操作数的关系表示出来的一种记忆方法。

例如:由助记符MOV、MOVX、MOVC组成的送数组指令,可以用图1、2帮助记忆。

由助记符CJNE形成的四条指令,也可以用图示法表示,如图3。

CJNE A, # data , rel CJNE A , direct, rel

CJNE @Rn ,# data , rel CJNE @Ri , # data , rel

另外,对于由(ANL、ORL、ARL )形成的18条逻辑操作指令,有关A的四条环移指令,也可以用图示法表示,请读者自行画出记忆。

3相似功能归类法

在MCS - 51指令中,我们发现部分指令其操作码不同,但功能相似,而操作数则完全一

样。相似功能归类法就是把具有这样特点的指令放在一起记忆,

只要记住其中的一条,其余的也就记住了。如加、减法的十二条指令,与、或、非的十八条指令,现列举如下。

ADD/ADDC/SUBB A , # data/direct/Rn/@Ri

ANL/ORL/XRL A , # data/direct/Rn/@Ri

ANL/ORL/XRL direct , # data/a

上述每一排指令,功能相似,其操作数都相同。其它的如加1(INC)、减1(DEC)指令也

可照此办理。

4 口诀记忆法

对于有些指令,我们可以把相关的功能用精练的语言编成一句话来记忆。如PUSH

direct和POP direct这两条指令。

初学者常常分不清堆栈SP的变化情况,为此编成这样一句话:(SP的内容)加1(direct的内容)再入栈,(SP的内容)弹出(到direct单元)SP才减1。

又如乘法指令中积的存放,除法指令中被除数和除数以及商的存放,都可以编成口诀记忆如下。

MUL AB高位积(存于)B,低位积(存于)A。

DIV AB A 除以B,商(存于)A余(下)B。

上面介绍了几种快速记忆单片机指令的方法,希望能起到抛砖引玉的作用,相信读者在学习单片机的过程中能找到适合自己的方法来记忆。

但是,有了好的方法还不够,还需要实践,即多读书上的例题和别人编写的程序,自己再结合实际编写一些程序。只有这样,

才能更好更快地掌握单片机指令系统。

单片机c51汇编语言51单片机汇编语言

单片机c51汇编语言51单片机汇编语言 单片机C51汇编语言 单片机(C51)是指一种集成电路上只包含一个集中式控制器的微处理器,具有完整的CPU指令集、RAM、ROM、I/O接口等功能。汇编语言是一种低级语言,是用于编写单片机指令的一种语言。汇编语言能够直接操作单片机的寄存器和输入/输出端口,因此在嵌入式系统的开发中非常重要。本文将介绍单片机C51的汇编语言编程。 一、了解单片机C51 单片机C51是目前应用最广泛的一种单片机系列,广泛用于各种电子设备和嵌入式系统的开发。C51指的是Intel公司推出的一种基于MCS-51架构的单片机。该系列单片机具有较高的性能和低功耗的特点,可用于各种控制和通信应用。 二、汇编语言的基本概念 汇编语言是一种低级语言,与机器语言紧密相关。它使用助记符来代替机器指令的二进制表示,使程序的编写更加易读。在单片机C51汇编语言中,每一条汇编指令都对应着特定的机器指令,可以直接在单片机上执行。 三、汇编语言的基本指令 在单片机C51汇编语言中,有一些基本的指令用于控制程序的执行和操作寄存器。以下是一些常用的指令:

1. MOV指令:用于将数据从一个寄存器或内存单元复制到另一个 寄存器或内存单元。 2. ADD指令:用于将两个操作数相加,并将结果存储到目的寄存 器中。 3. SUB指令:用于将第一个操作数减去第二个操作数,并将结果存 储到目的寄存器中。 4. JMP指令:用于无条件跳转到指定的地址。 5. JZ指令:用于在条件为零时跳转到指定的地址。 6. DJNZ指令:用于将指定寄存器的值减一,并根据结果进行跳转。 四、编写单片机C51汇编程序的步骤 编写单片机C51汇编程序需要按照以下步骤进行: 1. 确定程序的功能和目标。 2. 分析程序的控制流程和数据流程。 3. 设计算法和数据结构。 4. 编写汇编指令,实现程序的功能。 5. 调试程序,并进行测试。 六、实例演示

51单片机指令总结

51单片机指令总结 51单片机是一种经典的单片机型号,由英特尔公司推出。它是一种 基于哈佛结构的8位单片机,具有强大的功能与广泛的应用领域,包括嵌 入式系统、自动控制、仪器仪表、通信等等。51单片机的指令集是其核 心功能之一,本文将对51单片机的指令进行详细总结。 1.数据传送指令:用于数据在寄存器之间的传递,包括MOV、XCH、PUSH、POP等指令。MOV指令用于将数据从一个寄存器传送到另一个寄存器,XCH指令用于交换两个寄存器的值,PUSH和POP指令用于将数据从寄 存器压入堆栈或从堆栈弹出。 2.算术指令:用于进行算数运算,包括ADD、SUB、MUL、DIV等指令。ADD指令用于两个操作数相加,SUB指令用于两个操作数相减,MUL指令 用于两个操作数相乘,DIV指令用于两个操作数相除。 3.逻辑指令:用于进行逻辑运算,包括AND、OR、XOR、NOT等指令。AND指令用于进行按位与运算,OR指令用于进行按位或运算,XOR指令用 于进行按位异或运算,NOT指令用于进行按位非运算。 4.跳转指令:用于控制程序的跳转,包括JMP、JZ、JC、DJNZ等指令。JMP指令用于无条件跳转到指定地址,JZ指令用于如果结果为零则跳转,JC指令用于如果进位标志位为1则跳转,DJNZ指令用于如果结果不为零 则跳转。 5.输入输出指令:用于与外部设备进行数据的输入与输出,包括IN、OUT指令。IN指令用于从指定的端口读取一个字节数据,OUT指令用于向 指定的端口写入一个字节数据。

6.中断指令:用于处理中断事件,包括EI、DI、INT等指令。EI指 令用于使能中断,DI指令用于禁止中断,INT指令用于产生软件中断。 7.位操作指令:用于对特定位进行操作,包括SETB、CLR、CPL、RL、RR等指令。SETB指令用于将指定位设置为1,CLR指令用于将指定位清零,CPL指令用于对指定位进行取反操作,RL指令用于循环左移操作,RR指 令用于循环右移操作。 这些是51单片机常用的指令总结,其中只列举了部分指令,实际上 51单片机的指令数量很多。对于初学者来说,熟悉这些指令并理解其功 能是非常重要的,在实际应用中可以根据需求选择合适的指令来完成所需 的功能。 总而言之,51单片机的指令集涵盖了数据传送、算术运算、逻辑运算、跳转控制、输入输出、中断处理和位操作等方面,通过合理运用这些 指令可以实现各种功能需求。

51单片机汇编语言教程

51单片机汇编语言教程 汇编语言是一种低级程序设计语言,直接操作计算机硬件,能够充 分发挥硬件的性能,是学习嵌入式系统开发的基础。而51单片机是广 泛应用于嵌入式系统中的一种微控制器,具有功能强大、易于掌握等 特点。本篇文章将为大家介绍51单片机汇编语言的基本概念、编程指 令以及应用实例,帮助读者快速入门。 一、51单片机汇编语言概述 1.1 51单片机简介 51单片机是一种由英特尔公司设计的8位微控制器,其核心是一个CPU,具有RAM、ROM、I/O端口等外围设备。它采用的是汇编语言 编程,具有指令集简单、易于学习等特点,因此深受嵌入式系统开发 者的喜爱。 1.2 汇编语言的基本概念 汇编语言是一种低级语言,与高级语言相比,更接近计算机底层的 硬件操作。在汇编语言中,程序员通过编写指令来告诉计算机具体的 操作,如数据存储、运算等。 二、51单片机汇编语言基础知识 2.1 寄存器 寄存器是51单片机中的一种重要的存储设备,用于存储数据、地 址等信息。51单片机共有32个寄存器,其中一部分用于存储通用数据,

一部分用于存储特定功能的数据。在汇编语言编程中,我们可以使用这些寄存器来存储数据和进行运算。 2.2 程序存储器 程序存储器是51单片机中存储程序的地方,它可以分为ROM和RAM两种类型。其中,ROM存储的是不可修改的程序代码,而RAM 存储的是可以读写的数据。 2.3 I/O端口 I/O端口是51单片机与外部设备进行数据交互的接口,通过输入/输出指令,可以实现数据的输入与输出。在汇编语言中,我们需要了解如何使用I/O端口来与外部设备进行通信。 三、51单片机汇编语言编程指令 3.1 数据传输指令 数据传输指令用于将数据从一个地方传输到另一个地方。常用的数据传输指令有MOV、MOVC、MOVX等,通过这些指令可以实现数据的读取、存储和传输等操作。 3.2 算术运算指令 算术运算指令用于对数据进行加、减、乘、除等运算操作。51单片机中的算术运算指令包括ADD、SUB、MUL、DIV等,通过这些指令可以对数据进行各种运算操作。 3.3 逻辑运算指令

51单片机汇编指令集

带进位循环左移; 带进位循环右移; 51 单片机汇编指令集 一、数据传送类指令( 7 种助记符) MOV(英文为Move :对内部数据寄存器RAM 和特殊功能寄存器SFR 的数据进行 传送; MOV Q Move Code )读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部 RAM 勺数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; 二、算术运算类指令( 8 种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加 1; DEC(Decrement) 减 1; MUL(Multiplication 、Multiply) 乘法; DIV(Division 、Divide) 除法; 三、逻辑运算类指令( 10 种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) SWAP (Swap) 低 4 位与高 4 位交换; 四、控制转移类指令( 17 种助记符) ACALL ( Absolute subroutine Call )子程序绝对调用; LCALL ( Long subroutine Call )子程序长调用; RET ( Return from subroutine )子程序返回; RETI ( Return from Interruption )中断返回; SJMP ( Short Jump )短转移; AJMP ( Absolute Jump )绝对转移; LJMP( Long Jump )长转移; CJNE (Compare Jump if Not Equal) 比较不相等则转移; DJNZ (Decreme nt Jump if Not Zero) 减1后不为0则转移; JZ (Jump if Zero) 结果为0则转移; JNZ (Jump if Not Zero) 结果不为0则转移; JC (Jump if the Carry flag is set) 有进位则转移; JNC (Jump if Not Carry) 无进位则转移; JB (Jump if the Bit is set) 位为1则转移; JNB (Jump if the Bit is Not set) 位为0则转移; JBC(Jump if the Bit is set and Clear the bit) 位为1则转移,并清除该位;

51单片机汇编语言

51单片机汇编语言 51单片机汇编语言是一种基于51系列单片机的汇编语言,它是一种直接操作硬件的低级语言。在嵌入式系统开发中,经常需要使用汇编语言来编写底层驱动程序和实现特定功能。本文将介绍51单片机汇编语言的基本概念、语法结构以及常用指令集。 一、51单片机简介 51单片机是一种基于哈佛结构的8位单片机,由英特尔公司设计,并于1980年发布。它具有低功耗、高性能和易于编程的特点,广泛应用于家电、汽车电子、工控设备等领域。 二、汇编语言基础 1. 数据类型:51单片机汇编语言支持的数据类型包括位(bit)、字节(byte)、字(word)和双字(dword)。可以通过定义变量来使用这些数据类型。 2. 寄存器:51单片机包含一组通用寄存器和特殊功能寄存器。通用寄存器用于存储临时数据,特殊功能寄存器用于控制和配置硬件。常用的通用寄存器有ACC累加器、B寄存器和DPTR数据指针。 3. 指令集:51单片机汇编语言的指令集丰富多样,包括数据传送指令、算术运算指令、逻辑运算指令、跳转指令等。例如,MOV指令用于数据传送,ADD指令用于加法运算,JMP指令用于无条件跳转。

三、汇编语言示例 下面是一个简单的51单片机汇编语言程序示例,实现了一个LED 灯的闪烁效果。 ``` ORG 0x0000 ; 程序起始地址 MOV P1, #0x00 ; 将0x00赋值给P1口,关闭LED灯 LOOP: MOV P1, #0xFF ; 将0xFF赋值给P1口,打开LED灯 CALL DELAY ; 调用延时子程序 MOV P1, #0x00 ; 将0x00赋值给P1口,关闭LED灯 CALL DELAY ; 调用延时子程序 JMP LOOP ; 无条件跳转到LOOP标签 DELAY: MOV R0, #0xFF ; 将0xFF赋值给R0寄存器 DELAY_LOOP: DJNZ R0, DELAY_LOOP ; R0减1,如果不等于0则跳转到DELAY_LOOP标签 RET ; 返回调用子程序的指令 END ; 程序结束标志

51单片机总汇编语言

51单片机汇编语言 a)单个与多个LED灯,位操作与字节操作—输出 ORG 0000H START: CLR C MOV P0.0,C MOV P1.1,C MOV P2.2,C MOV P3.3,C CLR A

CPL A MOV P0,A MOV P1,A MOV P2,A MOV P3,A END 程序说明: 可以用7段数码管来代替各端口的8个LED灯,硬件的这种显示方式使得数字表达成为实用。数字显示由数码管的硬件结构与工作原理(7个LED灯的几何变形组合)和数字表达的数据格式确定。 如: 共阳极数码管显示数字3,则有P1口送数据#4FH;MOVP1, #0B0H 共阴极数码管显示数字8,则有P1口送数据#80H;MOVP1, #7F H 用数据表表示则有: TABshuziyang: //阳极管(共阴极管取反即可) DB(数字0~F) C0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,90H,88H,83H,C 6H,A1H,86H,8EH

TABshuziyin: //阴极管(共阳极管取反即可) DB(数字0~F) 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,3 9H,5EH,79H,71H b)单个与多个LED灯闪烁—延时子程序—注意定时器 前边已经看到,通过改变位或字节的赋值,可以使得LED灯亮或灭,以此形成闪烁效果。但是硬件的响应时间太短,使得效果不佳。虽然可以通过改变单片机的时钟设置来改变效果。但时钟的改变极其不方便,因此需要利用延时指令(注意定时器功能)获得理想的效果。延时效果是利用单片机空转来实现的。 ACALLDELAY;调延时子程序 ************************************************* ************************

51单片机汇编指令集(附记忆方法)

51单片机汇编指令集 一、数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送; MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部RAM的数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; 二、算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1; DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法;

三、逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移;RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) 带进位循环右移;SWAP (Swap) 低4位与高4位交换; 四、控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移; AJMP(Absolute Jump)绝对转移; LJMP(Long Jump)长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移;DJNZ (Decrement Jump if Not Zero)减1后不为0则转移;

51单片机汇编指令

51单片机汇编指令 51单片机汇编指令详解及应用 51单片机是一种常见的微控制器,广泛应用于工业控制、智能家居、物联网等领域。掌握51单片机的汇编指令及其应用对于从事嵌入式系统开发的工程师来说具有重要意义。本文将详细介绍51单片机的常用汇编指令及其应用实践。 一、基础知识 在了解51单片机的汇编指令之前,我们首先需要了解单片机的结构。51单片机主要包括CPU、存储器、I/O口、定时器/计数器、中断系统等部分。存储器包括RAM和ROM,其中RAM用于存储运行时数据,ROM用于存储程序代码。I/O口是单片机与外部设备进行交互的接口。定时器/计数器用于产生定时信号和控制脉冲。中断系统则用于实现程序的异常处理。 二、指令详解 1、MOV指令:MOV是Move的缩写,用于将数据从一个寄存器或内存单元移动到另一个寄存器或内存单元。例如,MOV R1, #data将把data 的值存入R1寄存器。 2、ADD指令:ADD是Add的缩写,用于将两个数相加,结果存回原操作数。例如,ADD A, R2将把R2寄存器的值与A寄存器的值相加,

结果存回A寄存器。 3、SUB指令:SUB是Subtract的缩写,用于将两个数相减,结果存回原操作数。例如,SUB A, R2将把R2寄存器的值从A寄存器的值中减去,结果存回A寄存器。 4、JMP指令:JMP是Jump的缩写,用于无条件跳转到指定地址执行程序。例如,JMP 0x1000将跳转到地址为0x1000的内存单元执行程序。 5、JZ指令:JZ是Jump if Zero的缩写,用于当操作数为零时跳转到指定地址执行程序。例如,JZ 0x1000将判断A寄存器的值是否为零,如果是零则跳转到地址为0x1000的内存单元执行程序。 6、DJNZ指令:DJNZ是Decrement and Jump if Not Zero的缩写,用于将操作数减1,判断是否为零,不为零则跳转到指定地址执行程序。例如,DJNZ R1, 0x1000将把R1寄存器的值减1,然后判断结果是否为零,如果不为零则跳转到地址为0x1000的内存单元执行程序。 三、应用实践 下面以一个简单的例子来说明如何使用上述指令实现一个闪烁的LED 灯。假设LED灯连接在P1.0口,且单片机的时钟频率为12MHz。 在上述代码中,我们使用了MOV指令将P1口清零,然后通过HERE标签实现LED灯的闪烁。CLRF和SETBF指令分别用于将P1.0口设置为

(完整版)51单片机汇编指令(全)

指令中常用符号说明 Rn当前寄存器区的8个工作寄存器R0~R7(n=0~7) Ri当前寄存器区可作为地址寄存器的2个工作寄存器R0和R1(i=0,1) Direct8位内部数据寄存器单元的地址及特殊功能寄存器的地址 #data表示8位常数(立即数) #data16表示16位常数 Add16表示16位地址 Addr11表示11位地址 Rel8位代符号的地址偏移量 Bit表示位地址 @间接寻址寄存器或基址寄存器的前缀 ( )表示括号中单元的内容 (( ))表示间接寻址的内容 指令系统 数据传送指令(8个助记符) 助记符中英文注释 MOV Move 移动 MOV A , Rn;Rn→A,寄存器Rn的内容送到累加器A MOV A , Direct;(direct)→A,直接地址的内容送A MOV A ,@ Ri;(Ri)→A,RI间址的内容送A MOV A , #data;data→A,立即数送A MOV Rn , A;A→Rn,累加器A的内容送寄存器Rn MOV Rn ,direct;(direct)→Rn,直接地址中的内容送Rn MOV Rn , #data;data→Rn,立即数送Rn MOV direct , A;A→(direct),累加器A中的内容送直接地址中 MOV direct , Rn;(Rn)→direct,寄存器的内容送到直接地址 MOV direct , direct;(direct)→direct,直接地址的内容送到直接地址 MOV direct , @Ri;((Ri))→direct,间址的内容送到直接地址 MOV direct , #data;8位立即数送到直接地址中 MOV @Ri , A;(A)→@Ri,累加器的内容送到间址中 MOV @Ri , direct;direct→@Ri,直接地址中的内容送到间址中 MOV @Ri , #data; data→@Ri ,8位立即数送到间址中 MOV DPTR , #data16;data16→DPTR,16位常数送入数据指针寄存器,高8位送入DPH,低8位送入DPL中(单片机中唯一一条16位数据传送指令) (MOV类指令共16条)

51单片机汇编指令详解

MCS-51系列单片机指令 以A开头的指令有18条,分别为: ACALL addr11 ADD A,Rn ADD A,direct ADD A,@Ri ADD A,#data ADDC A,Rn ADDC A,direct ADDC A,@Ri ADDC A,#data AJMP addr11 ANL A,Rn ANL A,direct ANL A,@Ri ANL A,#data ANL direct,A ANL direct,#data ANL C,bit ANL C,/bit 1、ACALL addr11 指令名称:绝对调用指令 指令代码:{A10,A9,A8,10001},A[7:0] 指令功能:构造目的地址,进行子程序调用。其方法是以指令提供的11位地址 (al0~a0),取代PC的低11位,PC的高5位不变。 操作内容: PC←(PC)+2 SP←(SP)+1 (SP)←(PC)7~0 SP←(SP)+1 (SP)←(PC)15~8 PC10~0←addrl0~0 字节数: 2 机器周期:2 使用说明:由于指令只给出子程序入口地址的低11位,因此调用范围是2KB。 2、ADD A,Rn 指令名称:寄存器加法指令 指令代码:28H~2FH 指令功能:累加器内容与寄存器内容相加 操作内容:A←(A)+(Rn), n=0~7 字节数: 1 机器周期;1 影响标志位:C,AC,OV 3、ADD A,direct 指令名称:直接寻址加法指令 指令代码:25H 指令功能:累加器内容与内部RAM单元或专用寄存器内容相加 操作内容:A←(A)+(direct) 字节数: 2

51单片机汇编指令总结

51单片机汇编指令总结 51单片机汇编指令总结 数据传输指令 一.片内RAM数据传输指令 1.以累加器A为目的操作数的指令:MOVA,RnMOVA,directMOVA,@RiMOVA,#data 2.以寄存器Rn为目的操作数的指令:MOVRn,AMOVRn,directMOVRn,data 3.以直接地址为目的操作数的指令:MOVdirect,AMOVdirect,RnMOVdirect1,derect2MOVdirect,@RiMOVdirect,#data 4.间接地址为目的操作数的指令:MOV@Ri,AMOV@Ri,directMOV@Ri,#data 5.十六位数据传送指令:MOVDPTR,#data16 二.累加器A与片外RAM数据传送指令:MOVXA,@RiMOVXA,@DPTRMOVX@Ri,AMOVX@DPTR,A三.查表寻址:MOVCA,@A+DPTR(先PC←(PC)+1,后A←((A)+(DPTR)))+MOVCA,@A+PC(先PC←(PC)+1,后A←((A)+(PC)))四.交换指令: 1.字节交换指令: XCHA,RnXCHA,directXCHA,@Ri 2.半字节交换指令:XCHDA,@Ri 3.累加器半字节交换指令:SWAPA 五.栈操作指令:1.PUSH(入栈指令)PUSHdirect2.POP(出栈指令)POPdirect 算术运算指令: 一.加法减法指令: 1.加法指令: ADDA,RnADDA,directADDA,@RiADDA,#data2.带进位加法指

令: ADDCA,RnA←(A)+(Rn)+CYADDCA,directA←(A)+(direct)+CYADDCA,@RiA←(A)+((Ri))+CYADDCA,#dataA←(A)+(data)+CY3.带借位减法指令: SUBBA,RnA←(A)-CY-(Rn)SUBBA,directA←(A)-CY-(direct)SUBBA,@RiA←(A)-CY-((Ri))SUBBA,#dataA←(A)-CY-#data二.乘法除法指令: 1.乘法指令: MULABBA←(A)×(B)高字节放在B中,低字节放在A中2.除法指令: DIVABA←(A)÷(B)的商,(B)←(A)÷(B)的余数三.加1减1指令: 1.加1指令: INCAA←(A)+1INCRnRn←(Rn)+1 INCdirectdirect←(direct)+1INC@Ri(Ri)←((Ri))+1INCDPTRDPTR←(DPTR)+12.减1指令:DECADECRnDECdirectDEC@Ri四.十进制调制指令: DAA调整累加器A的内容为BCD码 逻辑操作指令: 一.逻辑与、或、异或指令:1.逻辑与指令:ANLA,RnANLA,directANLA,@RiANLA,#data2.逻辑或这令:ORLA,RnORLA,directORLA,@RiORLA,#dataORLdirect,AORLdirect,#data3.逻辑异或指令:XRLA,RnXRLA,directXRLA,@RiXRLA,#dataXRLdirect,AXRLdirect,#data二.清零、取反指令:1.累加器A清零指令:CRLA2.累加器A取反指令:CPLA 三.循环位移指令:1.累加器A循环左移指令:RLA2.累加器A循环右移指令:RRA3.累加器A连同进位位循环左移指令:RLCA4.累加器A连同进位位循环右移指令:RRCA控制转移指令:

51单片机汇编语言编程

51单片机汇编语言编程 汇编语言是一种底层的编程语言,常用于嵌入式系统的开发。而51单片机是一种非常常见的嵌入式系统平台,因其功能强大而广泛应用于各类电子设备中。本文将介绍51单片机汇编语言编程的基础知识和技巧,帮助读者入门并掌握相关的编程技能。 一、汇编语言基础 汇编语言是一种基于机器指令的低级语言,它直接操作计算机的硬件资源。在汇编语言中,程序员通过编写一系列的指令,来控制计算机执行特定的任务。在学习51单片机汇编语言编程之前,我们需要了解一些基本的概念。 1. 寄存器 寄存器是CPU内部的一些用于存储数据和执行运算的临时存储器件。51单片机中包含了一组通用寄存器和特殊功能寄存器。通用寄存器用于存储临时数据,而特殊功能寄存器则用于控制和配置单片机的各个功能。 2. 程序计数器(PC) 程序计数器是一种特殊的寄存器,用于存储下一条将要执行的指令的地址。当一条指令执行完毕后,程序计数器会自动指向下一条指令的地址。 3. 指令集

指令集是一组可执行的机器指令的集合,用于控制CPU执行各种 功能和操作。51单片机的指令集包含了各种常见的指令,如数据传输、算术运算、逻辑运算等。 二、51单片机汇编语言编程基本步骤 下面是51单片机汇编语言编程的基本步骤,供初学者参考。 1. 硬件准备 在进行51单片机汇编语言编程之前,我们需要准备好相应的硬件 设备,如单片机开发板、编程器等。另外,还需要安装相应的开发工 具软件,如Keil C等。 2. 编写程序 使用汇编语言编写程序,程序的编写需要遵循一定的语法规则和格式。首先,我们需要定义一些必要的寄存器和变量,并进行相应的初 始化。然后,编写主要的功能代码,包括各种指令和运算操作。最后,编写程序的入口和出口代码。 3. 汇编与烧录 将编写好的汇编程序进行汇编,生成相应的机器码。然后,将机器 码通过编程器烧录到51单片机中。烧录完成后,可以将单片机连接到 电子设备中进行测试。 4. 调试与优化

MCS-51系列单片机的指令系统和汇编语言程序

3·1 汇编指令第3 章MCS 一51 系列单片机的指令系统 和汇编语言程序 3·1·1 请说明机器语言、汇编语言、高级语言三者的主要区分,进一步说明为什么这三种语言缺一不行。 3·1·2 请总结: (1)汇编语言程序的优缺点和适用场合。 (2)学习微机原理课程时,为什么肯定要学汇编语言程序? 3·1·3MCS 一51 系列单片机的寻址方式有哪儿种?请列表分析各种寻址方式的访问对象与寻址范围。 3·1·4 要访问片内RAM,可有哪几种寻址方式? 3·1·5 要访问片外RAM,有哪几种寻址方式? 3·1·6 要访问ROM,又有哪几种寻址方式? 3·1·7 试按寻址方式对MCS 一51 系列单片机的各指令重进展归类(一般依据源操作数寻址方式归类,程序转移类指令例外)。 3·1·8 试分别针对51 子系列与52 子系列,说明MOV A,direct 指令与MOV A,@Rj 指令的访问范围。 3·1·9 传送类指令中哪几个小类是访问RAM 的?哪几个小类是访问ROM 的?为什么访问ROM 的指令那么少?CPU 访问ROM 多不多?什么时候需要访问ROM? 3·1·10 试绘图示明MCS 一51 系列单片机数据传送类指令可满足的各种传送关系。3·1·11 请选用指令,分别到达以下操作: (1) 将累加器内容送工作存放器R6. (2)将累加器内容送片内RAM 的7BH 单元。(3) 将累加器内容送片外RAM 的7BH 单元。(4)将 累加器内容送片外RAM 的007BH 单元。(5)将 ROM007BH 单元内容送累加器。 3·1·12 区分以下指令的不同功能: (l)MOV A,#24H 与MOV A.24H (2)MOV A,R0 与MOV A,@R0 (3)MOV A,@R0 与MOVX A,@R0 3·1·13 设片内RAM 30H 单元的内容为40H; 片内RAM 40H 单元的内容为l0H; 片内RAM l0H 单元的内容为00H; (Pl)=0CAH。 请写出以下各指令的机器码与执行以下指令后的结果(指各有关存放器、RAM 单元与端口的内容)。 MOV R0,#30H MOV A,@R0 MOV RI,A MOV B,@Rl MOV @R0,Pl MOV P3,Pl MOV l0H,#20H MOV 30H,l0H

C51单片机汇编语言指令集

51汇编语言指令集 符号定义表 符号含义 Rn R0~R7寄存器n=0~7 Direct 直接地址,内部数据区的地址RAM(00H~7FH) SFR(80H~FFH) B,ACC,PSW,IP,P3, IE,P2,SCON,P1,TCON,P0 @Ri 间接地址Ri=R0或R1 8051/31RAM地址(00H~7FH) 8052/32RAM地址(00H~FFH) #data 8位常数 #data16 16位常数 Addr16 16位的目标地址 Addr11 11位的目标地址 Rel 相关地址 bit 内部数据RAM(20H~2FH),特殊功能寄存器的直接地址的位 指令介绍 指令字 节周 期 动作说明 算数运算指令 1.ADD A,Rn 1 1 将累加器与寄存器的内容相加,结果 存回累加器 2.ADD A,direct 2 1 将累加器与直接地址的内容相加,结 果存回累加器 3.ADD A,@Ri 1 1 将累加器与间接地址的内容相加,结 果存回累加器 4.ADD A,#data 2 1 将累加器与常数相加,结果存回累加 器 5.ADDC A,Rn 1 1 将累加器与寄存器的内容及进位C相 加,结果存回累加器 6.ADDC A,direct 2 1 将累加器与直接地址的内容及进位C 相加,结果存回累加器 7.ADDC A,@Ri 1 1 将累加器与间接地址的内容及进位C 相加,结果存回累加器 8.ADDC A,#data 2 1 将累加器与常数及进位C相加,结果 存回累加器 9.SUBB A,Rn 1 1 将累加器的值减去寄存器的值减借位 C,结果存回累加器 10.SUBB A,direct 2 1 将累加器的值减直接地址的值减借位 C,结果存回累加器 11.SUBB A,@Ri 1 1 将累加器的值减间接地址的值减借位 C,结果存回累加器 12.SUBB A,0data 2 1 将累加器的值减常数值减借位C,结 果存回累加器 13.INC A 1 1 将累加器的值加1 14.INC Rn 1 1 将寄存器的值加l 15.INC direct 2 1 将直接地址的内容加1 16.INC @Ri 1 1 将间接地址的内容加1 17.INC DPTR 1 1 数据指针寄存器值加1 说明:将16位的DPTR加1,当DPTR的低字节(DPL)从FFH 溢出至00H时,会使高字节(DPH)加1,不影响任何标志位 18.DEC A 1 1 将累加器的值减1 19.DEC Rn 1 1 将寄存器的值减1 20.DEC direct 2 1 将直接地址的内容减1 21.DEC @Ri 1 1 将间接地址的内容减1 22.MUL AB 1 4 将累加器的值与B寄存器的值相 乘,乘积的低位字节存回累加器, 高位字节存回B寄存器 说明:将累加器A和寄存器B内的无符号整数相乘,产生16位的积,低位字节存入A,高位字节存入B寄存器。如果积大于FFH,则溢出标志位(OV)被设定为1,而进位标志位为0 23.DIV AB 1 4 将累加器的值除以B寄存器的值,结果 的商存回累加器,余数存回B寄存器 说明:无符号的除法运算,将累加器A除以B寄存器的值,商存入A,余数存入B。执行本指令后,进位位(C)及溢出位(OV)被清除为0 24.DA A 1 1 将累加器A作十进制调整, 若(A) 3-0>9或(AC)=1,则(A) 3-0←(A)3-0+6 若(A) 7-4>9或(C)=1,则(A) 7-4←(A)7-4+6 逻辑运算指令 ANL A,Rn 1 1 将累加器的值与寄存器的值做AND的逻 辑判断,结果存回累加器 ANL A,direct 2 1 将累加器的值与直接地址的内容做AND 的逻辑判断,结果存回累加器 ANL A,@Ri 1 1 将累加器的值与间接地址的内容做AND 的逻辑判断,结果存回累加器 ANL A,#data 2 1 将累加器的值与常数做AND的逻辑判断, 结果存回累加器 ANL direct,A 2 1 将直接地址的内容与累加器的值做AND 的逻辑判断,结果存回该直接地址 ANL direct,#data 3 2 将直接地址的内容与常数值做AND 的逻辑判断,结果存回该直接地址ORL A,Rn 1 1 将累加器的值与寄存器的值做OR的逻 辑判断,结果存回累加器 32.ORL A,direct 2 1 将累加器的值与直接地址的内容做OR 的逻辑判断,结果存回累加器33.ORL A,@Ri 1 1 将累加器的值与间接地址的内容做OR 的逻辑判断,结果存回累加器

51单片机指令集

51单片机指令集 在嵌入式系统的开发中,51单片机是一种常用的微控制器,其指令 集对于程序设计和功能实现具有重要的意义。本文将介绍51单片机指 令集的组成结构、常用指令及其功能,以及应用示例。 一、指令集的组成结构 51单片机指令集由多条指令组成,这些指令按照不同的功能进行分 类和编码。常见的指令分类包括数据传送指令、算术逻辑指令、位操 作指令、分支指令和中断指令等。 1. 数据传送指令 数据传送指令主要用于数据在寄存器和内存之间的传输。其中包括 将数据从一个寄存器传送到另一个寄存器、将数据从内存读取到寄存 器中以及将数据从寄存器写入内存等操作。 例如,MOV指令用于将一个寄存器的值传送到另一个寄存器,如MOV A, B表示将寄存器B中的值传送到寄存器A中。 2. 算术逻辑指令 算术逻辑指令主要用于进行算术和逻辑运算。其中包括加法、减法、乘法、除法、逻辑与、逻辑或、逻辑非等操作。 例如,ADD A, B用于将寄存器A和寄存器B中的值相加,并将结 果保存在寄存器A中。 3. 位操作指令

位操作指令主要用于对寄存器或内存中的位进行操作。其中包括位与、位或、位翻转、位置1、位清零等操作。 例如,ORL A, #0x0F用于将寄存器A的低4位与0x0F进行按位或运算,结果保存在寄存器A中。 4. 分支指令 分支指令主要用于程序的跳转和循环控制。其中包括无条件跳转、条件跳转、循环指令等。 例如,JMP 2000H用于无条件跳转到地址2000H处执行指令。 5. 中断指令 中断指令主要用于处理外部中断信号,进行程序的中断与恢复。 例如,ENI指令用于允许外部中断的响应,而DISI指令用于禁止外部中断的响应。 二、常用指令及其功能 1. MOV指令 MOV指令用于将数据传送给目标操作数。可以将立即数、寄存器或内存中的值传送给目标寄存器或内存。 2. ADD指令 ADD指令用于将源操作数与目标操作数相加,并将结果保存在目标操作数中。

mcs51单片机指令集

一个单片机所需执行指令的集合即为单片机的指令系统。单片机使用的机器语言、汇编语言及高级语言,但不管使用是何种语言,最终还是要“翻译”成为机器码,单片机才能执行之。现在有很多半导体厂商都推出了自己的单片机,单片机种类繁多,品种数不胜数,值得注意的是不同的单片机它们的指令系统不一定相同,或不完全相同。但不管是使用机器语言、汇编语言还是高级语言都是使用指令编写程序的。 所谓机器语言即指令的二进制编码,而汇编语言则是指令的表示符号。在指令的表达式上也不会直接使用二进制机器码,最常用的是十六进制的形式。但单片机并不能直接执行汇编语言和高级语言,都必须通过汇编器“翻译”成为二进制机器码方能执行,但如果直接使用二进制来编写程序,那将十分不便,也很难记忆和识别,不易编写、难于辨读,极易出错,同时出错了也相当难查找。所以现在基本上都不会直接使用机器语言来编写单片机的程序。最好的办法就是使用易于阅读和辨认的指令符号来代替机器码,我们常称这些符号为助记符,用助记符的形式表示的单片机指令就是汇编语言,为便于记忆和阅读,助记符号通常都使用易于理解的英文单词和拼音字母来表示。 每种单片机都有自己独特的指令系统,那么指令系统是开发和生产厂商定义的,如要使用其单片机,用户就必须理解和遵循这些指令标准,要掌握某种(类)单片机,指令系统的学习是必须的。 MCS-51共有111条指令,可分为5类: [1].数据传送类指令(共29条) [2].算数运算类指令(共24条) [3].逻辑运算及移位类指令(共24条) [4].控制转移类指令(共17条) [5].布尔变量操作类指令(共17条) 一些特殊符号的意义 在介绍指令系统前,我们先了解一些特殊符号的意义,这对今后程序的编写都是相当有用的。 Rn——当前选中的寄存器区的8个工作寄存器R0—R7(n=0-7)。

相关主题
文本预览
相关文档 最新文档