指令是CPU按照人们的意图来完成某种操作的命令。一台计算机的CPU所能执行全部指令的集合称为这个CPU的指令系统。指令系统功能的强弱决定了计算机性能的高低。 80C51单片机具有111条指令,其指令系统的特点为: (1)执行时间短。1个机器周期指令有64条,2个机器周期指令有45条,而4个机器周期指令仅有2条(即乘法和除法指令); (2)指令编码字节少。单字节的指令有49条,双字节的指令有45条,三字节的指令仅有17条; (3)位操作指令丰富。这是80C51单片机面向控制特点的重要保证。
点击此处访问小编的个人小站 大部分学单片机就是从C语言开始的,但是汇编语言还是需要了解的。只有了解了汇编语言之后你才能进阶,才能成为真正的大神。这一节看完后你就会明白C语言是如何转换成汇编的。
3.1 指令格式及常用符号计算机能直接识别和执行的指令是二进制编码指令,称为机器指令。机器指令不便于记忆和阅读。 为了编写程序的方便,人们采用了有一定含义的符号(助记符)来表示机器指令,从而形成了所谓的符号指令。由于符号指令是机器指令的符号表示, 所以它与机器指令有一一对应的关系。符号指令转换成机器指令后,单片机才能识别和执行。
3.1.1 机器指令的编码格式机器指令通常由操作码和操作数(或操作数地址)两部分构成。操作码用来规定指令执行的操作功能,如加、减、比较、移位等 ;操作数是指参与操作 的数据(在指令编码中通常给出该数据的不同寻找方法)。 80C51 的机器指令按指令字节数分为三种格式:单字节指令、双字节指令和三字节指令。 一、单字节指令 单字节指令有两种编码格式:
1.8 位编码仅为操作码 这种指令的 8 位编码仅为操作码,指令的操作数隐含在其中。例如: INC A 该指令的编码为 0000 0100B,其十六进制表示为 04H,累加器 A 隐含在操作码中。指令的功能是累加器 A 的内容加 1。 注意:在指令中用“A”表示累加器,而用“ACC”表示累加器对应的地址(E0H)。
2.8 位编码含有操作码和寄存器编码 这种指令的高 5 位为操作码,低 3 位为存放操作数的寄存器编码。如指令MOV A,R0 的编码为 1110 1000B,其十六进制表示为 E8H(低 3 位 000 为寄存器 R0 的编码)。该指令的功能是将当前工作寄存器 R0 中的数据传送到累加器 A 中。
二、双字节指令 这类指令的第一个字节表示操作码,第二个字节表示参与操作的数据或数据存放的地址。如数据传送指令 MOV A,#50H 的两字节编码为 0111 0100B,0101 0000B。其十六进制表示为 74H,50H。该指令的功能是将立即数“50H” 传送到累加器 A 中。
三、三字节指令 这类指令的**第一个字节表示该指令的操作码,后两个字节表示参与操作的 数据或数据存放的地址。**例如数据传送指令 MOV 20H,#50H 的三个字节编码为0111 0101B,0010 0000B,0101 0000B。其十六进制表示为 75H,20H,50H。该指令的功能是将立即数“50H”传送到内部 RAM 的 20H 单元中。
比如一个数10,把他存入内存中,高级语法是int i=10;这个10存入内存之前叫做立即数,放入之后就不是了。
3.1.2 符号指令的格式80C51 指令系统的符号指令通常由操作助记符、目的操作数、源操作数及 指令的注释几部分构成。一般格式为: 操作助记符 [目的操作数][,源操作数][;注释] 操作助记符表示指令的操作功能;操作数是指令执行某种操作的对象,它可以是操作数本身,可以是寄存器,也可以是操作数的地址。 在 80C51 的指令系统中,多数指令为两操作数指令。当指令操作数隐含在操作助记符中时,在形式上这种指令无操作数。另有一些指令为单操作数指令或三操作数指令。在指令的一般格式中使用了可选择符号“[ ]”,其包含的内容因指令的不同可以有或无。 在两个操作数的指令中,通常目的操作数写在左边,源操作数写在右边。 例如:指令 ANL A,#40H 完成的任务是将立即数“40H”同累加器 A 中的数进行“与”操作,结果送回累加器。这里 ANL 为“与”操作的助记符,立即数“40H”为源操作数,累加器 A 为目的操作数(注:在指令中,多数情况下累加器用“A”表示,仅在直接寻址方式中,用“ACC”表示累加器在 SFR 区的具 体地址 E0H。试比较,指令 MOV A,#30H 的机器码为 74H、30H;而指令 MOV ACC,#30H 的机器码为 75H、E0H、30H。)。
3.13 符号指令及其注释中常用的符号及含义如下所示:Rn(n=0–7)–当前选中的工作寄存器组中的寄存器 R0~R7 之一; Ri(i=0,1)–当前选中的工作寄存器组中的寄存器 R0 或 R1; @ -------------间址寄存器前缀; #data ------------8 位立即数; //一个字节的常量 #data16---------16 位立即数;//两个字节的常量 direct------------片内低 128 个 RAM 单元的地址、SFR 的地址(可用符号名称表示); addr11-----------11 位目的地址; addr16-----------16 位目的地址; rel----------------补码形式表示的 8 位地址偏移量,其值在-128~+127 范围内; bit----------------片内RAM 位地址、SFR 的位地址(可用符号名称表示); /-----------------位操作数的取反操作前缀; (×)-------------表示 × 地址单元或寄存器中的内容; ((×))----------表示以 × 单元或寄存器中的内容为地址间接寻址单元的内容; ← ----------------将箭头右边的内容送入箭头左边的单元中。
3.2 80C51 的寻址方式寻址方式就是寻找操作数或指令地址的方式。寻址方式包含两方面内容:,二是指令地址的寻址(如转移指令、调用指令)。寻址方式是计算机性能的具体体现,也是编写汇编语言程序的基础。 对于两操作数指令,源操作数有寻址方式,目的操作数也有寻址方式。若不特别