第3章(1)指令系统_第1页
第3章(1)指令系统_第2页
第3章(1)指令系统_第3页
第3章(1)指令系统_第4页
第3章(1)指令系统_第5页
已阅读5页,还剩88页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第第3 3章:章:5151单片机指令系统单片机指令系统Instruction Set1.Keil1.Keil软件的使用软件的使用; ; 2.72.7种寻址方式种寻址方式; ;3.MCS-513.MCS-51指令集(难点、重点)指令集(难点、重点); ;熟练掌握、记住指令的熟练掌握、记住指令的英文全称,多上机调试,不要杜撰指令英文全称,多上机调试,不要杜撰指令; ;把把80868086汇编指令汇编指令忘记忘记, ,完全不同完全不同, ,容易混淆容易混淆4.(4.(复习复习) )把所有指令英文全称过一遍把所有指令英文全称过一遍23.1 Keil 3.1 Keil 软件的使用软件的使用3.2 3.

2、2 指令、指令系统的概念指令、指令系统的概念3.3 3.3 汇编指令的格式汇编指令的格式3.4 3.4 单片机指令的寻址方式单片机指令的寻址方式3.4.1 3.4.1 寄存器寻址寄存器寻址 3.4.2 3.4.2 立即寻址立即寻址3.4.3 3.4.3 寄存器间接寻址寄存器间接寻址3.4.4 3.4.4 直接寻址直接寻址3.4.5 3.4.5 变址寻址变址寻址 3.4.6 3.4.6 相对寻址相对寻址3.4.7 3.4.7 位寻址位寻址3.5 3.5 单片机汇编指令集单片机汇编指令集 3.5.1 3.5.1 数据传送类指令数据传送类指令 3.5.2 3.5.2 算术运算类指令算术运算类指令3.

3、5.3 3.5.3 逻辑运算及移位类指令逻辑运算及移位类指令 3.5.4 3.5.4 控制转移类指令控制转移类指令3.5.5 3.5.5 位操作类指令位操作类指令33.1 Keil 3.1 Keil 软件的使用(软件的使用(KeilKeil软件演示)软件演示)KeilKeil实例教程实例教程 uVision3/4uVision3/4入门教程入门教程( (一一)Keil)Keil工程文件的建立、设置与目标文件的获得工程文件的建立、设置与目标文件的获得1.Keil 1.Keil 工程工程的建立的建立-建立工程文件建立工程文件, ,源文件的建立源文件的建立2.2.工程工程的详细设置的详细设置3.3.

4、编译编译、连接、连接( (二二)Keil)Keil的调试命令、在线汇编与断点设置的调试命令、在线汇编与断点设置1.1.常用常用调试命令调试命令2.2.在线在线汇编汇编3.3.断点断点设置设置4( (三三)Keil )Keil 程序调试窗口程序调试窗口1.1.存储器窗口存储器窗口2.2.工程窗口寄存器页工程窗口寄存器页3.3.观察观察窗口窗口( (四四)Keil )Keil 的辅助工具和部份高级技巧的辅助工具和部份高级技巧辅助工具辅助工具1 1、外围接口、外围接口2 2、性能分析、性能分析3 3、变量来源浏览、变量来源浏览4 4、代码作用范围分析、代码作用范围分析部部份高级调试技巧份高级调试技巧

5、1 1、串行窗口与实际硬件相连、串行窗口与实际硬件相连2 2、从端口送入信号、从端口送入信号3 3、直接更改内存值、直接更改内存值51.检查源程序检查源程序;2.测出源程序中的语法错误,并给出出错信息测出源程序中的语法错误,并给出出错信息; (1)expression type does not match instruction (2)syntax error3.产生产生目标文件(目标文件(.OBJ),并可给出并可给出列表文件列表文件(同时列出汇编语言(同时列出汇编语言源程序和机器语言目标程序的文件,称之为源程序和机器语言目标程序的文件,称之为.LST文件文件)和)和交交叉索引文件叉索引文件

6、(列出程序中使用的符号、变量和标号以及引用(列出程序中使用的符号、变量和标号以及引用情况,称之为情况,称之为.CRF文件文件)。)。62.2.连接程序连接程序( (了解了解, ,计算机工作机理计算机工作机理) )v汇编之后生成的汇编之后生成的OBJOBJ文件必须经过文件必须经过链接过程链接过程, ,才能成为扩展才能成为扩展名名.EXE.EXE的可执行文件。的可执行文件。v链接的过程就是调用链接的过程就是调用连接程序连接程序(LINK.EXE(LINK.EXE),),对对OBJOBJ文件进行文件进行定位、链接定位、链接,最后生成扩展名为,最后生成扩展名为EXEEXE的可执行文件。的可执行文件。v

7、如果需要如果需要, ,也可生成也可生成MAPMAP文件和文件和LIBLIB文件。文件。7view-memory windowI: 00H 内部内部RAM(256 0 x00-0 xff)X:00H 外部外部RAM(64k 0 x0000-0 xffff)C:00H ROM鼠标右键鼠标右键modify memory 可以修改其中的数可以修改其中的数8扩展扩展( (了解了解):): HEX HEX是是intelintel的目标文件格式的目标文件格式,hex,hex是结果输出的目标文件格式是结果输出的目标文件格式, ,至少至少IntelIntel和和FranklinFranklin是采用是采用“in

8、telintel hex hex格式格式”。hexhex格式不难辨认格式不难辨认, ,它的它的格式是文件中的所有字节是可打印的格式是文件中的所有字节是可打印的ASCIIASCII字符字符. .其它更紧凑格式其它更紧凑格式“BIN”BIN”以单一字节表示每个程序代码字节以单一字节表示每个程序代码字节, ,这样文件中有许多非打印的这样文件中有许多非打印的ASCIIASCII字符代码。字符代码。 HEXHEX文件中的文件中的冒号冒号(:)(:)标示一个新记录标示一个新记录, ,接着的接着的两个字符是以实际数两个字符是以实际数据字节数表示的记录块的长度据字节数表示的记录块的长度. .典型的典型的1O1

9、O代表一个代表一个1616个数据字节的块个数据字节的块. .再下面的再下面的四个字符四个字符是十六进制数用于表示块中数据的是十六进制数用于表示块中数据的起始地址起始地址. .再下面再下面的两个字符是块的类型码的两个字符是块的类型码:00:00表示是可重定位数据表示是可重定位数据,01,01是文件的结束标是文件的结束标志志. .接下去是实际数据接下去是实际数据, ,每个十六进制的数字对表示一个字节每个十六进制的数字对表示一个字节,16,16字节数字节数据以据以3232个字符表示个字符表示. .最后两位数字表示校验和最后两位数字表示校验和, ,很容易与数据混淆很容易与数据混淆. .当所当所有的两字

10、符十六进制值与校验和加起来以有的两字符十六进制值与校验和加起来以256256取模,整个结果为取模,整个结果为0 0。9103.2 3.2 指令、指令系统的概念指令、指令系统的概念 指令指令(Instruction)(Instruction)是使计算机内部执行的一种操作是使计算机内部执行的一种操作, ,提供给用提供给用户编程使用的一种命令户编程使用的一种命令. .由构成计算机的电子器件特性所决定由构成计算机的电子器件特性所决定, ,计算计算机只能识别二进制代码。机只能识别二进制代码。 以二进制代码来描述指令功能的语言以二进制代码来描述指令功能的语言, ,称之为称之为机器语言机器语言. .由于机由

11、于机器语言不便被人们识别器语言不便被人们识别/ /记忆记忆/ /理解和使用理解和使用, ,因此给每条机器语言指因此给每条机器语言指令赋予助记符号来表示令赋予助记符号来表示, ,这就形成了这就形成了汇编语言汇编语言(assembly)(assembly). .也就是说也就是说, ,汇编语言是便于人们识别汇编语言是便于人们识别/ /记忆记忆/ /理解和使用的一种指令形式理解和使用的一种指令形式, ,它和它和机器语言指令一一对应机器语言指令一一对应, ,也是由计算机的硬件特性所决定的。也是由计算机的硬件特性所决定的。11 ( (了解了解) )指令的描述形式有两种指令的描述形式有两种: :机器语言形式

12、和汇编语言形式机器语言形式和汇编语言形式。现在描述计算机指令系统及实际应用中主要采用汇编语言形式现在描述计算机指令系统及实际应用中主要采用汇编语言形式. .采采用机器语言编写的程序称之为用机器语言编写的程序称之为目标程序目标程序. .采用汇编语言编写的程序采用汇编语言编写的程序称之为称之为源程序源程序. .计算机能够直接识别并执行的只有机器语言计算机能够直接识别并执行的只有机器语言. .汇编汇编语言程序不能被计算机直接识别并执行语言程序不能被计算机直接识别并执行, ,必须经过一个中间环节把必须经过一个中间环节把它翻译成机器语言程序它翻译成机器语言程序, ,这个这个中间过程叫做汇编中间过程叫做汇

13、编。 汇编有两种方式:汇编有两种方式:机器汇编和手工汇编机器汇编和手工汇编。机器汇编是用专门。机器汇编是用专门的汇编程序的汇编程序, ,在计算机上进行翻译在计算机上进行翻译; ;手工汇编是编程员把汇编语言手工汇编是编程员把汇编语言指令逐条翻译成机器语言指令指令逐条翻译成机器语言指令. .现在主要使用机器汇编现在主要使用机器汇编, ,但有时也但有时也用到手工汇编用到手工汇编. .12 指令一般有指令一般有功能、时间和空间功能、时间和空间三种属性三种属性( (了解了解) )。 功能属性功能属性是指每条指令都对应一个特定的操作功能是指每条指令都对应一个特定的操作功能; ; 时间属性时间属性是指一条指

14、令执行所用的时间是指一条指令执行所用的时间, ,一般用机器周期来表示一般用机器周期来表示 空间属性空间属性是指一条指令在程序存储器中存储所占用的字节数。是指一条指令在程序存储器中存储所占用的字节数。 这三种属性在使用中最重要的是功能这三种属性在使用中最重要的是功能, ,但时间、空间属性在有但时间、空间属性在有些场合也要用到些场合也要用到. .如一些实时控制应用程序中如一些实时控制应用程序中, ,有时需要计算一个有时需要计算一个程序段的确切执行时间或编写软件延时程序程序段的确切执行时间或编写软件延时程序, ,都要用到每条指令都要用到每条指令的时间属性的时间属性; ;在程序存储器的空间设计在程序存

15、储器的空间设计, ,或相对转移指令的偏移量或相对转移指令的偏移量计算时就要用到指令的空间属性计算时就要用到指令的空间属性. .135151系列单片机指令集含有系列单片机指令集含有111111条指令条指令 (1)(1)每条指令在程序存储器每条指令在程序存储器ROMROM中占据一定的中占据一定的空间空间, ,以字节为单位。以字节为单位。按指令所占按指令所占字节数字节数分类:分类:单字节单字节(49(49条条););双字节双字节(46(46条条);3);3字节字节(16(16条条) )(2)(2)每条指令在执行时要花去一定的每条指令在执行时要花去一定的时间时间, ,以机器周期为单位以机器周期为单位.

16、 .按指按指令令执行时间执行时间分类:分类:单周期单周期(64(64条条););双周期双周期(45(45条条););4 4周期周期(2(2条条) )(3)(3)按指令的按指令的功能功能分类分类, ,可分为可分为5 5大类大类: : 数据传送类(数据传送类(2929条)条); ;算术运算类(算术运算类(2424条)条)逻辑运算及移位类(逻辑运算及移位类(2424); ;控制转移类(控制转移类(1717条)条)位操作类(位操作类(1717条)条)14指令的指令的字节数字节数(1)(1)单字节指令单字节指令: :指令只有一个字节指令只有一个字节, ,操作码和操作数同在一个字节中。操作码和操作数同在一

17、个字节中。 INC DPTR INC DPTR (A3H)(A3H) MOV A,R MOV A,RN N (E8H(E8HEFH)EFH)(2)(2)双字节指令双字节指令:一个字节为:一个字节为操作码操作码,另一个字节是,另一个字节是操作数操作数。 MOV A,#dataMOV A,#data (74H data)(74H data)(3)(3)三字节指令三字节指令:操作码占一个字节,操作数占二个字节。其中操作数既:操作码占一个字节,操作数占二个字节。其中操作数既可能是数据,也可能是地址。可能是数据,也可能是地址。 MOV DPTR,#4000H MOV DPTR,#4000H (90H 4

18、0H 00H)(90H 40H 00H) MOV 30H,#80H (75H,30H,80H) MOV 30H,#80H (75H,30H,80H) CJNE A,#20H,rel (B5H,20H,rel) CJNE A,#20H,rel (B5H,20H,rel)153.3 3.3 汇编指令的格式汇编指令的格式(1)(1)方括符方括符 表示可选项表示可选项(2)(2)标号标号代表指令所在地址代表指令所在地址,1-8,1-8个字母个字母/ /数字数字, ,“:”“:”结尾结尾(3)(3)操作码就是指令功能操作码就是指令功能助记符助记符, ,指令实体指令实体, ,操作码表示操作码表示计算机执行

19、该指令将进行何种操作计算机执行该指令将进行何种操作(4)(4)目的操作数目的操作数/ /源操作数源操作数 操作数表示参加操作的数的操作数表示参加操作的数的本身或操作数所在的地址本身或操作数所在的地址 标号标号: : 操作码操作码 目的操作数目的操作数,源操作数源操作数;注释注释 例例1: 1: loop: djnz r7,nextloop: djnz r7,next ;R7-10 ;R7-10 跳转到跳转到nextnext next: next: 16(5)4(5)4个区段之间要用分隔符分开个区段之间要用分隔符分开(6)(6)标号与操作码之间用标号与操作码之间用“:”(:”(冒号冒号) )隔开

20、隔开(7)(7)操作码与操作数之间用空格隔开操作码与操作数之间用空格隔开(8)(8)操作数与操作数与注释注释之间用之间用“;”(;”(分号分号) )隔开隔开(9)(9)如果操作数有两个以上如果操作数有两个以上, , 则在操作数之间要用逗号则在操作数之间要用逗号“,”,”隔开隔开 ( (乘法指令和除法指令除外乘法指令和除法指令除外) )(10)(10)这些符号这些符号“: ;: ; , ,”必须是在必须是在英文状态英文状态下输入下输入(11)(11)大小写不敏感大小写不敏感 例例2: LED1:MOV DPTR,#4000H2: LED1:MOV DPTR,#4000H17指令的一些符号的意义指

21、令的一些符号的意义: :RnRn 当前寄存器区的当前寄存器区的8 8个工作寄存器个工作寄存器R0R0R7(n=0R7(n=07)7)。RiRi 当前选中的寄存器区中可作间接寻址寄存器的当前选中的寄存器区中可作间接寻址寄存器的2 2个寄存器个寄存器R0R0、R1(i=0,1)R1(i=0,1)DirectDirect 直接地址直接地址, ,即即8 8位的内部数据存储器单元或特殊功能寄存位的内部数据存储器单元或特殊功能寄存器的地址。器的地址。#data#data 包含在指令中的包含在指令中的8 8位立即数位立即数。Mov a,#60hMov a,#60h#data16#data16 包含在指令中的

22、包含在指令中的1616位立即数位立即数( (对对DPTRDPTR作用作用) )。relrel 相对转移指令中的偏移量,为相对转移指令中的偏移量,为8 8位的带符号补码数位的带符号补码数( (选择标选择标号号) )DPTRDPTR 数据指针数据指针, ,可用作可用作1616位的地址寄存器。位的地址寄存器。18bit bit 内部内部RAMRAM或特殊功能寄存器中的直接寻址位或特殊功能寄存器中的直接寻址位C C或或CyCy 进位标志位或位处理机中的累加器。进位标志位或位处理机中的累加器。addr11addr11 1111位目的地址位目的地址addr16 addr16 1616位目的地址位目的地址$

23、 $ 当前指令的地址当前指令的地址(sjmp(sjmp $,JNB TI,$)( $,JNB TI,$)(常用常用) )the same address of the current instruction193.4 3.4 单片机指令的单片机指令的寻址方式寻址方式1.1.寄存器寻址寄存器寻址2.2.立即寻址立即寻址3.3.寄存器间接寻址寄存器间接寻址4.4.直接寻址直接寻址5.5.变址寻址变址寻址( (基址寄存器基址寄存器+ +变址寄存器间接寻址变址寄存器间接寻址) )6.6.相对寻址相对寻址7.7.位寻址位寻址寻址方式:指令按地址获得操作数的方式寻址方式:指令按地址获得操作数的方式七种七种

24、寻址方式寻址方式, ,一条指令可能含多种寻址方式一条指令可能含多种寻址方式201.1.寄存器寻址寄存器寻址 Register AddressingRegister Addressing从寄存器中读取操作数或存放操作数进寄存器从寄存器中读取操作数或存放操作数进寄存器例例3 3:MOV A,B MOV A,B ;(A);(A)(B B) MOV 30H,R0 MOV 30H,R0 ;(30H);(30H)(R0R0) MOV A,R1 MOV A,R1 ;(A);(A)(R1R1)寻址范围包括:寻址范围包括:(1 1)4 4组通用工作寄存区共组通用工作寄存区共3232个工作寄存器个工作寄存器(2

25、2)部分特殊功能寄存器)部分特殊功能寄存器, ,例如例如A A、B B 以及数据指针寄存器以及数据指针寄存器DPTRDPTR等。等。212.2.立即寻址立即寻址 Immediate AddressingImmediate Addressing操作数直接就出现在指令中操作数直接就出现在指令中例例4 4:MOV A,#64H ;(A) MOV A,#64H ;(A) 立即数立即数 64H64H ADD A,# ADD A,#0 0F5H ;(A)(A)+F5H ;(A)(A)+立即数立即数 F5HF5H注意:注意:符号符号“#”#”表明其后跟的是立即数表明其后跟的是立即数, , 立即数立即数就是数

26、字量本身就是数字量本身. .例如例如:MOV A,#30H :MOV A,#30H 指令中指令中30H30H就是立即数就是立即数. .这一条指令的这一条指令的功能是执行将立即数功能是执行将立即数30H30H传送到累加器传送到累加器A A中的操作中的操作. .mov a,#20h;()十六进制数十六进制数 mov a,#20 ;() = mov a,#20D ;十进制数十进制数mov a,#10000101b ;() mov a,#10000101 ;(X)223.3.寄存器间接寻址寄存器间接寻址 Register Indirect AddressingRegister Indirect Add

27、ressing寄存器中的内容是一个地址,由该地址单元寻寄存器中的内容是一个地址,由该地址单元寻址到所需的操作数址到所需的操作数NOTE:1)“间接间接”表示某寄存器中的表示某寄存器中的“内容内容”只是一个只是一个“单元单元地地址址”,这个地址单元中存放的数据才是要找的这个地址单元中存放的数据才是要找的“操作数操作数”.(注注意区分意区分“内容、地址内容、地址”的关系)的关系) 2)符号)符号“”表示表示“在在”,其含义与读音皆同其含义与读音皆同“at”. MOV R1,#30H ;(R1) 立即数立即数30H MOV R1,#0FH ;(30H)立即数立即数0FH MOV A,R1 ;(A)(

28、30H)=#0FH23理解地址和内容的关系理解地址和内容的关系(自学自学) 例如:例如:MOV A,R1指令的源指令的源操作数是寄存器间接寻址。该指操作数是寄存器间接寻址。该指令的功能是将以工作寄存器令的功能是将以工作寄存器R1R1中中的内容为地址的片内的内容为地址的片内RAMRAM单元的单元的数据传送到数据传送到A A中去。例如:若中去。例如:若R1R1中的内容为中的内容为80H80H,片内,片内RAMRAM地址为地址为80H80H的单元中的内容为的单元中的内容为2FH2FH,则执,则执行该指令后,片内行该指令后,片内RAM 80HRAM 80H单元单元的内容的内容2FH2FH被送到被送到A

29、 A中。寄存器间中。寄存器间接寻址示意图如图所示。接寻址示意图如图所示。24寻址范围:寻址范围:(1)访问内部访问内部RAM低低128个单元,其通用形式为个单元,其通用形式为Ri R0,R1 ;() R2,R7 ;(x) (2)对片外数据存储器的对片外数据存储器的64K字节的间接寻址字节的间接寻址, MOVX A,DPTR(3)片外数据存储器的低片外数据存储器的低256字节字节 MOVX A,Ri(4)堆栈区堆栈区:堆栈操作指令堆栈操作指令PUSH(压栈压栈)和和POP(出栈出栈)使用使用堆栈指针堆栈指针(SP)作间址寄存器作间址寄存器254.直接寻址直接寻址 Direct Addressin

30、g指令中直接直接给出存放数据的地址或名称指令中直接直接给出存放数据的地址或名称 例:例:MOV R1,1FH ;(R1)(1FH) MOV 30H,4AH ;(30H)(4AH)NOTE:访问访问SFR只能采用直接寻址只能采用直接寻址方式方式.例如:例如:MOV A,SP ;(A) (SP)MOV A,81H ;(A) (SP) MOV P1,#5AH ;(P1)(#5AH) MOV 90H,#5AH ;(P1)(#5AH) MOV B,30H ;(B) (30H) 相同相同相同相同26 在本单片机中访问特殊功能寄存器在本单片机中访问特殊功能寄存器SFRSFR只能采用直只能采用直接寻址方式接寻

31、址方式的的原因原因:SFRSFR分布在分布在80H80H0FFH0FFH范围内,而范围内,而5252系列单片机有系列单片机有256256字节的片内字节的片内RAM,RAM,其中的其中的80H80H0FFH0FFH的的RAMRAM与与SFRSFR所占地址重叠。所占地址重叠。MOV A,90H MOV A,90H 等效于等效于 MOV A, P1 MOV A, P1 属直接寻址属直接寻址 MOV A, MOV A, R0 ;R0 ;事先已知事先已知 (R0) = #90H (R0) = #90H 执行的操作:执行的操作:A (90H) A (90H) 属寄存器间接寻址属寄存器间接寻址, , MOV

32、 A, 85HMOV A, 85H(X X)! 于是规定于是规定: :80H80H0FFH0FFH范围内的范围内的RAMRAM只能用寄存器间只能用寄存器间接寻址方式接寻址方式, ,而而SFRSFR只能用直接寻址方式只能用直接寻址方式. .从而解决了地从而解决了地址冲突的问题址冲突的问题. .27复习:存储器配置(片内RAM)v89C5189C51片内片内RAM 128RAM 128字节(字节(00H00H7FH7FH)v89C5289C52片内片内RAM 256RAM 256字节(字节(00H00H0FFH0FFH)00H00H20H20H2FH2FH7FH7FH1FH1FH30H30H80H

33、80HFFHFFH52子系列才有子系列才有的的RAM区区普通普通RAM区区位寻址区位寻址区工作寄存器区工作寄存器区SFR分布在分布在80H-FFH其中其中92个位个位可位寻址可位寻址80H80HFFHFFH89C51 128128字节字节89C52 256256字节字节只能直接寻址只能直接寻址只能寄存器间接寻址只能寄存器间接寻址285.变址寻址变址寻址 Index Addressing也称为也称为: 基址寄存器基址寄存器+变址寄存器变址寄存器 以以16位的地址指针寄存器位的地址指针寄存器DPTR或或16位的位的PC寄存器为寄存器为基址寄存器基址寄存器,以累加器以累加器A为为变址寄存器变址寄存器

34、,两者中的两者中的“内容内容”形成一个形成一个16位的位的“地址地址”,该该“地址地址”所指的存储单元中所指的存储单元中的内容才是操作数的内容才是操作数.MOVC A,A+DPTR ;(A)(A)+(DPTR)MOVC A,A+PC ;(A)(A)+(PC)JMP A+DPTR29例例:设设A中已存有中已存有#A4H,DPTR中已存有中已存有#1234H MOVC A,A+DPTR;(A)(A)+(DPTR)操作:将操作:将A4H+1234H=12D8H单元中的数放进累加器单元中的数放进累加器A306.相对寻址相对寻址 Comparatively Addressing当前当前PC值加上指令中规

35、定的偏移量值加上指令中规定的偏移量rel,构成实际,构成实际的操作数地址的操作数地址(跳到标号指向的地方跳到标号指向的地方)例:例: SJMP rel 操作:跳转到的目的地址操作:跳转到的目的地址 = 当前当前16位位PC值值 + rel(了解了解)NOTE:1)“当前当前PC值值”指程序中下一条指令所在的首地址,是一指程序中下一条指令所在的首地址,是一个个16位数位数;2)符号符号“rel”表示表示“偏移量偏移量”,是一个带符号的单字是一个带符号的单字 节数节数,范围是范围是:-128+127(80H7FH),3)在实际编程中在实际编程中,“rel” 通常用标号代替通常用标号代替 317.位

36、寻址位寻址 Bit Addressing指令中直接给出了操作数所在的位地址。指令中直接给出了操作数所在的位地址。例:例: CLR P1.0 ;(P1.0) 0 SETB ACC.7 ;(ACC.7) 1 CPL C ;(C) NOT( C )NOTE: 1)位地址里的数据只可能是)位地址里的数据只可能是0或或1 2)有的位地址十分明确)有的位地址十分明确,如如 P1.0, ACC.7等等, 有的位地址则有的位地址则“不太明确不太明确”,比较:比较: MOV A,17H ;(A)(17H),17H是是字节地址字节地址 MOV ACC.0,17H ;(ACC.0)(17H),这里这里ACC.0 是

37、是位地址位地址所以该指令中的所以该指令中的17H是是22H单元的第单元的第7位位32寻址范围包括:寻址范围包括:(1)(1)内部内部RAMRAM中的位寻址区中的位寻址区. .位有两种表示方法位有两种表示方法, ,例如例如,17H;,17H;另另一种是一种是单元地址加上位单元地址加上位, ,例如例如, ,22H.6(22H.6(常用常用) ), ,指的是指的是22H22H单单元中的第元中的第7 7位位, ,它们是等价的。它们是等价的。(2)(2)特殊功能寄存器中的可寻址位特殊功能寄存器中的可寻址位, ,在指令中有如下在指令中有如下4 4种的表种的表示方法:示方法: a.a.直接使用位地址直接使用

38、位地址, ,例如例如PSW.5PSW.5的位地址为的位地址为0D5H.0D5H. b. b.位名称的表示方法位名称的表示方法( (常用常用),),例如例如PSW.5PSW.5是是F0F0标志位标志位, ,可可使用使用F0F0表示该位表示该位。 c.c.单元地址加位数的表示方法单元地址加位数的表示方法, ,例如例如(0D0H).5(0D0H).5。 d.d.特殊功能寄存器符号加位数特殊功能寄存器符号加位数的表示方法的表示方法( (常用常用),),例如例如 PSW.5PSW.5。33v片内片内RAMRAM中有中有128128个位可个位可按位寻址的位,位地址:按位寻址的位,位地址:00H00H7FH

39、7FH分布在:分布在:20H20H2FH2FH单元单元; ;v另外,在另外,在SFRSFR中还有中还有9292个个位可按位寻址位可按位寻址00H00H20H20H2FH2FH7FH7FH1FH1FH30H30H80H80HFFHFFH52子系列才有子系列才有的的RAM区区普通普通RAM区区位寻址区位寻址区工作寄存器区工作寄存器区27H22H21H20H26H24H25H23H28H07 06 05 04 03 02 01 000F 0E 0D 0C 0B 0A 09 0817 16 15 14 13 12 11 101F 1E 1D 1C 1B 1A 19 1827 26 25 24 23 2

40、2 21 202F 2E 2D 2C 2B 2A 29 2837 36 35 34 33 32 31 303F 3E 3D 3C 3B 3A 39 3847 46 45 44 43 42 41 402FH7F 7E 7D 7C 7B 7A 79 78位地址位地址总共总共128个个可按可按位寻位寻址的址的位位单元地址单元地址17D7 D6 D5 D4 D3 D2 D1 D0复复习习343.5 513.5 51单片机汇编指令集单片机汇编指令集 Instruction SetInstruction Set学习要点:学习要点:1.1.多上机熟悉指令多上机熟悉指令; ;2.2.了解指令的操作了解指令的操

41、作, ,了解指令的寻址方式了解指令的寻址方式, ,了解指令对了解指令对PSWPSW的影响的影响; ;3.3.合理使用指令合理使用指令, ,只用正确使用指令的权利只用正确使用指令的权利, ,不可制造指令不可制造指令; ;4.4.养成良好的编程习惯养成良好的编程习惯( (首行缩进首行缩进 参考:参考:华为编程规范华为编程规范) )35MCS-51MCS-51指令集指令集( (五大类功能五大类功能) )了解了解1.1.数据传送类指令数据传送类指令 (2929条)条)2.2.算术运算类指令算术运算类指令 (2424条)条)3.3.逻辑运算及移位类指令逻辑运算及移位类指令 (2424条)条)4.4.控制

42、转移类指令控制转移类指令 (1717条)条)5.5.位操作位操作( (布尔操作布尔操作) )类指令类指令 (1717条)条)36内部存储器间传送:内部存储器间传送: (MOVMOV1616条)条)外部数据存储器与累加器间传送外部数据存储器与累加器间传送: : (MOVXMOVX4 4条)条)程序存储器向累加器传送:程序存储器向累加器传送: (MOVCMOVC2 2条)条)数据交换:数据交换: (XCH/XCHD/SWAPXCH/XCHD/SWAP5 5条)条)堆栈操作:堆栈操作: (PUSH/POPPUSH/POP2 2条)条)3.5.1 3.5.1 数据传送类指令(数据传送类指令(5 5种种

43、/29/29条)条)37Acc 累加器累加器Direct 直接寻址直接寻址Ri 间接寻址间接寻址Rn 寄存器寄存器#data 立即数立即数Rn:R0R7Ri:R0,R1#data:8位立即数位立即数#data16:16位立即数位立即数direct: 直接地址直接地址rel:8位带符号偏移量位带符号偏移量内部存储器间内部存储器间传送指令传送指令 (16(16条条) ): MOV MOV 类指令的操作方向总是类指令的操作方向总是后面后面的操作数的操作数, ,指向指向前面前面的操作数!的操作数!例例:MOV A,30H :MOV A,30H ;(A);(A)( (30H) 30H) 38(1)(1)

44、立即寻址型传送指令立即寻址型传送指令NOTE:NOTE:MOV A,#0FFH MOV A,#0FFH ()()MOV A,#18H MOV A,#18H ()()MOV A,#12 MOV A,#12 ()()MOV A,#13D MOV A,#13D ()()MOV A,#00101111B MOV A,#00101111B ()()MOV A,#FEH MOV A,#FEH (X)(X)MOV A,#0AF MOV A,#0AF (X)(X)MOV A,#00101111 MOV A,#00101111 (X)(X)MOV A,#data ;dataA MOV Rn,#data ;dat

45、a Rn MOV Ri ,#data ; data (Ri) MOV direct,#data ; datadirect MOV DPTR,#DATA16 ; DATA16DPTR eg: mov dptr,#4000h39(2)(2)直接寻址型传送指令直接寻址型传送指令 MOV A,direct ;(direct) A MOV direct,A ; A(direct) MOV Rn,direct;(direct ) Rn, n=07 MOV direct2,direct1; MOV Ri, direct; (direct) (Ri)例:例:M EQU 40H N EQU 50H MOV M,

46、N MOV M,A40(3)寄存器寻址型传送指令寄存器寻址型传送指令 MOV R2,R1 (X)(4)以寄存器间接地址为目的操作数的指令以寄存器间接地址为目的操作数的指令MOV Rn, A ; (A)Rn,n=07 MOV A, Rn ; (A)Rn,n=07MOV direct, Rn ;(direct)Rn,n=07MOV A,Ri ;(Ri)A ,i=0,1MOV Ri, A ;A(Ri),i=0,1 MOV direct,Ri; (Ri)direct ie:MOV B,R0MOV A,Ri+1 (X)MOV A,R3 (X)MOV R0,R1 (X)41Programming Hint

47、: When you find yourself in a situation that you need to execute a type of MOV instruction that doesnt exist, it is generally helpful to use the accumulator. If a given MOV instruction doesnt exist it can usually be accomplished by using two MOV instructions that both use the accumulator as a transf

48、er or temporary register.42 例例1:设内部:设内部RAM (30H)=40H,(40H)=10H,(10H)=00H, (P1)=0CAH(11001010B),分析以下程序执行后各单元及寄存器、,分析以下程序执行后各单元及寄存器、P2口的内容。(口的内容。(keil I: peripherial)MOV R0,#30H;(R0)30HMOV A,R0;(A)(R0),A=40HMOV R1,A;(R1)(A),R1=40HMOV B,R1;(B)(R1),B=10HMOV R1,P1;(R1)(P1),(40H)=0CAHMOV P2,P1;(P2)(P1),P2

49、=0CAHMOV 10H,#20H;(10H)20H,(10H)=20H 执行上述指令后的结果为:执行上述指令后的结果为:(R0)=30H,(R1)=(A)=40H,(B)=10H,(40H)=(P1)=(P2)=CAH,(10H)=20H。43外部数据存储器外部数据存储器RAMRAM与累加器与累加器间传送间传送 (4(4条条):):MOVXMOVX类指令可在类指令可在累加器累加器与以与以 DPTRDPTR或或 RiRi所代表的所代表的外部外部 RAMRAM之间之间进行数据传送。进行数据传送。 MOVMOVX X(eXternal 外部的外部的)MOVX B,DPTR(X)MOVX DIREC

50、T,DPTR (X)MOVX A,30H (X)MOVX 30H,DPTR (X)MOVX A,A+DPTR (X) MOVC A,A+DPTR ()MOVX A,R7(X) Ri i=0 or 1MOVX A, DPTR ;(A)(DPTR)MOVX A, Ri ;(A)(Ri) MOVX DPTR, A ;(DPTR) (A) MOVX Ri, A ;(Ri) (A)44例例2:设外部:设外部RAM(0203H)= 0CFH,分析以下指令执行后的结果。,分析以下指令执行后的结果。 (KEIL X:)MOV DPTR,#0203H ;(DPTR)0203HMOVX A,DPTR ;(A)(D

51、PTR) a=0CFHMOV 30H,A ;(30H)(A),(30H)=0CFHMOV A,#0FH ;(A)0FHMOVX DPTR,A ;(DPTR)(A),(0203H)=0FH执行结果为:执行结果为:(DPTR)=0203H(DPTR)=0203H,(30H)=0CFH(30H)=0CFH,(0203H)=(A)=0FH(0203H)=(A)=0FH。45程序存储器程序存储器向向累加器累加器传送指令(传送指令(2 2条)条)(Code Code 代码代码) MOVC A,A+DPTR MOVC A,A+PC 也称为也称为查表指令查表指令,寻址方式属,寻址方式属: : “ “基址寄存器

52、基址寄存器 + + 变址寄存器间接寻址变址寄存器间接寻址”A+DPTR或或A+PC指向程序存储器中的某单元指向程序存储器中的某单元. .拟传送拟传送给累加器给累加器ACCACC的数据就是程序中事先写进去的表格数据。的数据就是程序中事先写进去的表格数据。这些表格数据往往用伪指令这些表格数据往往用伪指令DB,DWDB,DW等定义在程序中。等定义在程序中。NOTE:MOVC A,DPTR (X) MOVX A,DPTR ()MOVC A,DPTR+A (X)46数据交换指令数据交换指令(5(5条条):):XCH A,direct (字节互换字节互换) Exchange 交换交换XCH A,Ri (字

53、节互换字节互换) XCH A,Rn (字节互换字节互换) (A A) (directdirect) 或或(Ri)(Ri),或,或(Rn(Rn)XCHD A,Ri exchange the low-order nibble of the accumulator (bit3-0) 少用少用累加器累加器 AccAcc的低的低4 4位与位与(Ri(Ri)的低的低4 4位互换,各自的高位互换,各自的高4 4位不变位不变SWAP A swap nibbles within the accumulator累加器累加器 AccAcc的低的低4 4位与自身的高位与自身的高4 4位互换位互换47例例4:设设(R0

54、) = 30H,30H = 4AH,(A) = 28H,则,则执行执行XCH A, R0后,结果为后,结果为(A) = 4AH,(30H) = 28H。执行执行XCHD A,R0后,结果为后,结果为(A) = 2AH,(30H) = 48H。执行执行SWAP A后,结果为后,结果为(A) = 82H。NOTE: The SWAP A instruction is identical (相同的相同的) to executing four RL A instructions or four RR A instructions.48堆栈操作指令堆栈操作指令(2(2条条):):push direct;

55、入栈入栈 spsp+1,(sp)(direct)pop direct;出栈出栈 (direct) sp, (sp) sp-1NoteNote:注意注意PUSH POP PUSH POP 指令数据变化的指令数据变化的顺序(考试必考)顺序(考试必考)堆栈区由特殊功能寄存器堆栈区由特殊功能寄存器堆栈指针堆栈指针SPSP管理管理堆栈区可以安排在堆栈区可以安排在RAMRAM区任意位置,一般不安排在工作寄存器区和可按位区任意位置,一般不安排在工作寄存器区和可按位寻址的寻址的RAMRAM区区, ,而是而是放在放在RAMRAM区的靠后的位置(区的靠后的位置(30-FFH MOV SP,#70H30-FFH M

56、OV SP,#70H)堆栈总是指向堆栈总是指向栈顶单元栈顶单元通常通常PUSHPUSH与与POPPOP两条指令两条指令成对使用成对使用PUSH DPTRPUSH DPTR(X (X 字字) ) PUSH DPL PUSH DPL ( ( 字节字节) ) Push dphPush dph ( () )EXPRESSION TYPE DOES NOT MATCH INSTRUCTIONPUSH APUSH A(X)(X)PUSH ACC(PUSH ACC() )49NOTE: The stack operates on a Last In-First Out (LIFO) basis. This

57、means if you PUSH the values 4, 5, and 6 (in that order), POPping them one at a time will return 6, 5, and then 4. Thevalue most recently added to the stack is the first value that will come off when you execute a POP instruction.NOTE: When PUSHing or POPping the Accumulator, you must refer to it as

58、 ACC since that is the memory location of the SFR. You may not assemble the instruction PUSH A nor POP A-both of these will result in an assemble-time error in most, if not all, 8052 assemblers.50例例5:设:设(A)=7BH,(35H)=11H,并且(,并且(SP)60H PUSH ACC ;(61H) #7BH PUSH 35H ;(62H) (35H) 即:即:(62H) #11H POP ACC

59、 ;(A) (62H) 即:即:(A) #11H POP 5AH ;(5AH) (61H) 即:即:(5AH) #7BH51 例例6 6:若在外部程序存储器中若在外部程序存储器中2000H2000H单元开始依次存放单元开始依次存放0909的平的平方值,数据指针方值,数据指针(DPTR)=3A00H(DPTR)=3A00H,用查表指令取得,用查表指令取得2003H2003H单元的数单元的数据后,要求保持据后,要求保持DPTRDPTR中的内容不变。中的内容不变。完成上述功能的程序如下:完成上述功能的程序如下:MOV A,#03H;(A)03HPUSH DPH;保护保护DPTR高高8位入栈位入栈PU

60、SH DPL;保护保护DPTR低低8位入栈位入栈MOV DPTR,#2000H;(DPTR)2000HMOVC A,A+DPTR;(A)(2000H+03H)POP DPL ;弹出弹出DPTR低位低位POP DPH ;弹出弹出DPTR高位高位 执行结果:执行结果:(A)09H,(DPTR)=3A00H。52加法运算:加法运算: (ADD(ADD4 4条条) )带进位加法运算带进位加法运算: (ADDC: (ADDC4 4条条) )带借位减法运算带借位减法运算: (SUBB: (SUBB4 4条条) )加加1/1/减减1 1操作:操作: (INC(INC,DECDEC9 9条条) )单字节乘单字

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论