1 / 277

第四章 指令系统 及汇编语言程序设计 本章学习目标 了解助记符、指令格式 掌握单片机寻址方式 掌握单片机指令系统 掌握单片机汇编语言程序设计及开发环境

第四章 指令系统 及汇编语言程序设计 本章学习目标 了解助记符、指令格式 掌握单片机寻址方式 掌握单片机指令系统 掌握单片机汇编语言程序设计及开发环境. 第四章 指令系统及汇编语言程序设计语言. 4.1 编程语言 4.2 指令格式及其分类 4.3 寻址方式 4.4 数据传送类指令 4.5 逻辑操作类指令 4.6 算术运算类指令 4.7 位操作指令 4.8 控制类转移指令 4.9 汇编语言程序设计 4.10 汇编语言程序调试 4.11 利用 ISP 工具将程序下载到单片机中验证程序.

wood
Download Presentation

第四章 指令系统 及汇编语言程序设计 本章学习目标 了解助记符、指令格式 掌握单片机寻址方式 掌握单片机指令系统 掌握单片机汇编语言程序设计及开发环境

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第四章 指令系统 及汇编语言程序设计 本章学习目标 • 了解助记符、指令格式 • 掌握单片机寻址方式 • 掌握单片机指令系统 • 掌握单片机汇编语言程序设计及开发环境

  2. 第四章 指令系统及汇编语言程序设计语言 4.1 编程语言 4.2 指令格式及其分类 4.3 寻址方式 4.4 数据传送类指令 4.5 逻辑操作类指令 4.6 算术运算类指令 4.7 位操作指令 4.8 控制类转移指令 4.9 汇编语言程序设计 4.10 汇编语言程序调试 4.11利用ISP工具将程序下载到单片机中验证程序

  3. §4.1 编程语言 1、指令及指令系统 指令是计算机完成某种指定操作的命令,程序是 以完成一定任务为目的指令的有序组合。指令的集 合构成指令系统。 2、指令两种形式 • 汇编指令的形式:人们进行编写、调试程序使用的形式; • 机器指令的形式:是机器所能识别的二进制数或十六进制数的形式。

  4. §4.1编程语言 编写计算机程序有三种不同层次的计算机语言机器语言、汇编语言和高级语言。 • 机器语言 • 用二进制数表示的指令,是CPU唯一能够直接识别和执行的程序形式。 • 缺点是不直观,不易识别、理解和记忆,因此编写、调试程序时都不采用这种形式的语言。

  5. 汇编语言(Assembly Language) • 是用英文缩写形式的助记符书写的指令,地址、数据也可用符号表示。 • 优缺点:与机器语言程序相比,编写、阅读和修改都比较方便,不易出错。但用汇编语言编写的源程序必须进行汇编。 • 目前,常用计算机软件自动完成汇编工作。 不同的CPU具有不同的汇编语言,一般不能通用。 • 在实际系统中,对程序执行速度要求较高而软件处理功能有限的场合,以及对硬件操作有较强的针对性的场合,常用汇编语言编程。

  6. 高级语言(High Level Language) • 优缺点:不针对某种具体的计算机,通用性强。用高级语言编程不需了解计算机内部的结构和原理,这种语言的形式更接近英语,对于非计算机专业的人员比较易于掌握。高级语言程序易读、易编写,程序结构比较简洁,大量用于科学计算和事务处理。 • 用高级语言编写的源程序同样必须编译后,计算机才能执行。编译程序比汇编程序复杂得多,需要占用较大容量的存储器,编译的过程也要花费更多的时间。

  7. 一、助记符语言 • 汇编语言的指令由操作码和操作数组成。 操作码用规定的英文缩写字母组成,称为助记符。例如: MOV A, #76H 表示的是将十六进制的数据76H送到累加器A中, • 二进制机器语言是:01110100和01110110 • 十六进制数是:74H,76H。 其中74H表示操作码,是指将一个数据传送到累 加器A中,被传送的数据就是操作码的下一个字节, 即76H。

  8. 二、操作码 通常指令由操作码和操作数两部分组成。 • 操作码功能:表示对操作数进行什么操作。 • 表示形式:由英文缩写字母组成,容易理解和记忆。 • 例如,MOV是数据的传送 ADD是数据的相加运算 ANL是数据的逻辑与运算

  9. 三、操作数 • 操作数功能:指出对什么数进行操作以及将操作的结果放到何处。 • 操作数的表示形式:可以是参与操作的数据,也可以是参与操作的数据所在存储器的地址,还可以是数据所在的寄存器等不同形式。 • 寻找这些不同形式的操作数的方式称为寻址方式。

  10. 立即数 • 定义:在汇编语言指令中,直接参与操作的数据称为立即数。 • 表示方法:十进制的格式、十六进制格式、二进制的格式。 数据进制区分是在数据的后面加上后缀以示区别:十进制数据的后缀为D或省略,十六进制数据的后缀为H,二进制数据的后缀为B。

  11. 注意 • 参与操作的数据的位数要与参与操作的环境相匹配。 • 例如,指令MOV A, #71H,立即数71H是8位二进制数01110001B的十六进制格式,而A是8位的寄存器,所以给8位寄存器送的数据不能超出8位。 • 同理,给十六位寄存器送的数据不能超出16位。 • 数据只能是整数的格式,不能是小数的格式。逻辑数据也和二进制数据的表示一样,可以用十进制、十六进制、二进制的数据格式表示。

  12. 当汇编指令中的数据是十六进制且是以字母开头时,该数据应加一个前导0,以表示后面的字母不是变量而是数字。当汇编指令中的数据是十六进制且是以字母开头时,该数据应加一个前导0,以表示后面的字母不是变量而是数字。 • 在8051内核单片机中,一个数据的前面有前缀#号则表示后面的数据是立即数,如果数据的前面没有#号,则说明该数据表示的是直接地址。

  13. §4.2 指令格式及其分类 一、汇编语言的一般格式 标号:指令助记符 目的操作数,源操作数 ;注释 1、标号 • 标号也叫做标识符,放在指令之前,是其后指令所在地址的名字,必须跟一冒号":"。

  14. 标号的作用 • 标号用于表示某条指令跳转时的目标地址。 • 程序在修改和调试时,指令所在的实际地址往往会随之变化,而代表地址的名字可以不变。因此,使用标号,可以给编程和修改带来极大的方便。 • 不是每条指令都需要标号,通常在该指令作为跳转或调用的目的地址时需要标号。

  15. 标号的命名必须遵循下列规则: • 标号由字母(a~z或A~Z)、数字(0~9)或某些特殊字符(@、_、?等)组成,其中“_”是下划线; • 标号必须以字母(a~z或A~Z)或某些特殊的符号(@,_,?)开头,但问号“?”不能单独作标号; • 标号长度不允许超过31个字符; • 标号不能与指令助记符相同。

  16. 下面是符合上述规则的标号: • HOW NEXT_1 AA1Q • MCCl MODEL?? _DELAY • 下面是不符合上述规则的标号: • 5FVM -F33G ? • MOV ADD XOR 其中最后一行的三个标号均为指令助记 符,所以不能用做标号。

  17. 标号:指令助记符 目的操作数,源操作数 ;注释 2、指令助记符 • 指令助记符也叫做操作码,是指令名称的代表符号,它是一条指令语句中所必需的,不可缺少,表示本指令所要进行的操作。 • 例如:MOV 表示传送

  18. 标号:指令助记符 目的操作数,源操作数 ;注释 3、操作数 • 操作数是参与本条指令操作的数据,有些指令不需要操作数,只有操作码;有些指令需要两个甚至三个操作数。 • 在数据传送时,送出数据的叫做源操作数,接收数据的叫做目的操作数。指令中,目的操作数写在前,源操作数写在后,两操作数之间用逗号“,”分开。有些操作数可以用表达式表示。 • 可以用不同的寻址方式得到操作数。

  19. 操作数提供方式: • 指令给出; • 在寄存器中,此时就用寄存器表示该操作数; • 在存储器中,这时候就用以地址表示的存储器表示该操作数。 • 操作数的含义不同就表示了几种

  20. 标号:指令助记符 目的操作数,源操作数 ;注释 4、注释 • 注释是为了阅读程序方便由编程人员加上的,并不影响程序的执行和功能,所以,注释部分不是必需的。 • 注释部分必须用分号“;”开头,一般都写在它所注释的指令的后面,注释本身只用于对指令功能加以说明,使阅读程序时便于理解,所以注释可以用中文或者英文甚至任何便于理解的字符表示。

  21. 二、指令代码的存储格式 • 指令存储位置:程序存储器 • 指令由操作码和操作数组成,不同的指令所需要的操作数的个数有可能是不同的,所以每条指令的实际字节数不是固定的, • 例如,程序中有如下两条连续存放的指令: MOV A,#68H MOV B,#73H

  22. MOV A,#68H • 该指令将十六进制数据68H送到累加器A中; • 这条指令是两字节指令; • 对应的机器码是:74H和68H两个字节,其中74H是操作码,68H是操作数. MOV B, #73H • 该指令是将立即数73H送到寄存器B中; • 是三字节指令,对应的机器码是75H、F0H和73H三个字节,其中75H是操作码,B和73H是操作数。

  23. 指令存放格式 • 在存储器中是以二进制数的形式、以字节为单位按照地址递增的顺序存放的。 • 程序存储器中的指令机器码、数据字存放的规则是:从低地址开始,先存放操作码,然后是操作数。

  24. 假设这两条指令存放的起始地址是1000H,则存放的格式为:假设这两条指令存放的起始地址是1000H,则存放的格式为: • 左边一列表示的是程序存储器的地址 • 右边一列是存放在该地址单元中的二进制指令。

  25. 程序执行过程 • 程序执行时是依次逐条取出指令执行的。 • 单片机内部有一个程序计数器,具有自动加一的特点,因而指令被逐字节取出,然后译码执行。 • 首先取出操作码74H,经译码得知这是一条两字节的指令,要进行的操作是将立即数送到累加器A中,而操作数是以立即数的形式放在操作码的下一个地址中,程序计数器自动加一,将下一个地址中的数据68H取出来,送到累加器A中。 • 程序计数器再次自动加一,指向下一条指令的第一个字节,取出75H,经译码得知这是一条三字节的指令,要进行的操作是将一个立即数送到一个寄存器中,这个寄存器是用该指令的第二个字节F0H来表示的,而地址F0H表示的就是寄存器B,本条指令的第三个字节内容就是要传送的立即数73H。 • 这样随着程序计数器逐次加一,每条指令被一个字节一个字节地取出、译码和执行。

  26. 三、指令中的符号约定 在描述单片机指令系统时,经常使用各种缩写符号,各种符号及含义如表所示。

  27. §4.3寻址方式 指令中寻找操作数的方式,称为寻址方式。 STC15F2K60S2单片机共有7种寻址方式 • 立即数寻址 • 寄存器寻址 • 直接寻址 • 寄存器间接寻址 • 变址寻址 • 相对寻址 • 位寻址

  28. 1、立即数寻址 • 定义 在指令中,指令操作所需要的操作数就在 指令中,作为指令的一个组成部分,CPU在 得到指令的同时也就立即得到了操作数。

  29. 例如: M0V A,#28H; • 功能:将十六进制立即数28H送入累加器A中。指令执行后,A中为28H,A中原来的数据被覆盖,记作:A←28H • 其中,源操作数是立即数28H,目的操作数是累加器A。 • 指令执行的操作是,将立即数28H送A。指令的机器码为两个字节:74H,28H。

  30. 假设该指令存放在物理地址为0100H开始的地址中,则,机器码的存放与指令的执行过程如图所示。假设该指令存放在物理地址为0100H开始的地址中,则,机器码的存放与指令的执行过程如图所示。 图4-1 MOV A,#28H 执行过程示意图

  31. MOV A,#28H; • 注意:因为累加器A是8位的寄存器,所以在这里的立即数只能是8位数据,并且只能是整数,不能是小数、变量或者其他类型的数据。 • 立即数只能作为源操作数,其位数要与目的操作数的位数一致。 • 立即数前面的#号是表示其后所跟的数据是立即数而不是直接地址。

  32. 立即数寻址方式优点 采用立即数寻址方式的指令主要用来对寄 存器或存储器赋值。因为操作数可以从指令 中直接取得,不需要再到其他地方去寻找操 作数,所以,立即数寻址方式的指令执行速 度很快。

  33. 2、寄存器寻址 • 定义 指令所用的操作数在CPU的内部寄存器 中,指令中的操作数用寄存器名表示。一条 指令中,源操作数和目的操作数式,都可 以采用寄存器寻址方式。

  34. 例如: • MOV A, #45H ;A←立即数45H 其中,源操作数45H为立即寻址方式,目的操作数为寄存器寻址方式。 • INC R0 ;R0 ←R0+1 该指令只有一个操作数,为寄存器寻址方式。

  35. MOV A, R1 ;A←R1 源操作数为寄存器R1,目的操作数为A,两者都是寄存器寻址方式。 • 在寄存器寻址方式中,操作数用寄存器表示时有两种含义 • 寄存器用于表示目的操作数时,是寄存器名,表示是某个寄存器,用于接收数据; • 寄存器用于表示源操作数时,是表示该寄存器中的数据。

  36. 例如: INC R5;指令机器码为0DH ;把寄存器R5的内容加1后再送回R5 该指令的执行过程如图所示。其中,R5所在的内部 RAM单元地址与寄存器组的选择有关。 图4-2 INC R5指令执行过程示意图

  37. 寄存器寻址方式优点 • 采用寄存器寻址方式的指令在执行时,操作数就在寄存器中,对该操作数的存取操作在CPU内部进行,不需要使用总线周期读存储器,所以执行速度很快。

  38. 注意 • 在数据传送之后,源操作数中的数据并不消失,仍然存在。 • 例如,用寄存器作源操作数时,数据传送出之后寄存器中的内容仍然存在,只有作为目的操作数的寄存器被写入数据后,原来的数值会被新写入的数据所取代。这种性质,对于存储器也是同样的。

  39. 3、直接寻址 • 定义 指令的操作数在存储器中时,指令中给出的是该操作数所在存储器的地址的方式。 • 优点 直接寻址是对存储器进行访问时的最简单、最直接的方式。

  40. 例如: MOV A,45H • 功能:将地址为45H的存储器单元中的内容取到A中。 • 在这里,源操作数的寻址方式是直接寻址,表示要送出的数据在地址为45H的直接地址中;目的操作数的寻址方式是寄存器寻址。 • 这条指令的机器码为:E5H、45H,其中,E5H是操作码,45H是操作数。

  41. MOV A,45H 设机器码放在程序存储器地址为0100H和 0101H的两个 单元中,指令执行前,数据存储器的45H中的数据为34H, 则执行后A=34H,将A中原来的数据覆盖。 图4-3 MOV A, 45H 执行过程示意图

  42. 4、寄存器间接寻址(简称寄存器间址) • 定义:操作数所在存储单元的有效地址在指定的寄存器中,指令中给出的是存放这个地址的寄存器。 • 常用作寄存器间接寻址的寄存器有R0、R1或数据指针DPTR。 在汇编语言中,使用间接寻址的标志是在寄存器前面加一个“@”号,以区别于寄存器寻址。

  43. 例如: MOV A ,@R0 ;将R0中的内容所表示 的地址单元中的内容送 给A • 设R0的内容为31H,31H单元的内容为51H,则执行后,累加器A的内容为51H。该指令的执行过程如图所示。 图4-4 MOV A,@R0 指令执行过程示意图

  44. 5、变址寻址 • 两种寻址种类 • 第一类:用PC作基地址加上累加器A的内容形成操作数的地址A+PC。 • 第二类:使用DPTR作基地址,加上累加器A的内容形成操作数的地址A+DPTR。

  45. 例如:MOVC A,@A+PC,指令操作码助记符MOVC表示从程序存储器取数据,PC的内容指向下一个地址作为基地址,加上A中的数据就构成了所要取数的地址。 • 例如: …………… 0100 7402 MOV A, #02 0102 83 MOVC A, @A+PC 0103 00 NOP 0104 00 NOP 0105 64 DB 64H ……… 当执行到指令MOVC A,@A+PC时,A=2, PC=0103H,因此,A+PC=0105H, @A+PC表示0105H作 为地址,从这个地址 指向的单元中取数据 送到A中,所以结果就 是把0105H中的数据 64H送到了A中。

  46. 例如:MOVC A,@A+DPTR,DPTR的内容加上A中的数据就构成了所要取数的地址。 • 例如: …………… MOV A,#02H MOV DPTR,#TABLE MOVC A,@A+DPTR …………… TABLE: DB 30H DB 31H DB 32H ………………

  47. 变址寻址优点 特别适用于访问固化在程序存储器中的常数表格,以完成查表功能,如不同码制之间数据转换等。由于DPTR可以通过指令来设置,使用起来更加方便,因此,在实际应用中, MOVC A,@A+DPTR寻址使用更广泛。

  48. 6、相对寻址 • 功能 该寻址方式主要用于相对跳转指令。 • 寻址方法 把指令中给定的地址偏移量与本指令所在 单元地址(即程序计数器PC中的内容)相 加,即得到真正的程序转移地址。

  49. 与变址方式区别 该偏移量有正、负号,在该机器指令中必 须以补码形式给出,所转移的范围为相对于 当前PC值的-128~+127之间。 • 例如: JC 80H 若C=0,则PC值不变,若C=1,则以现行的PC为 基地址加上80H得到转向地址。

  50. JC 80H 假设若转移指令放在1005H,该指令的执行过程如图所示。 注意,指令偏移量以补码给出,所以80H代表着-80H。 图4-5 JC 80H执行示意图

More Related