1、04:21,1,单片机原理与接口技术,第3章 MCS-51单片机 指令系统,04:21,2,本章教学要求,熟悉MCS-51单片机指令系统的分类、格式; 熟悉MCS-51指令系统的七种寻址方式; 掌握MCS-51指令系统的数据传送、算术运算、逻辑运算、转移操作、布尔运算等指令的功能; 掌握MCS-51指令系统的各种指令对寄存器资源的占用情况。,第3章 MCS-51单片机指令系统,04:21,3,本章目录,3.1 指令系统简介 3.1.1 指令系统的分类 3.1.2 指令格式 3.1.3 指令中的常用符号 3.1.4 寻址方式,第3章 MCS-51单片机指令系统,3.2 指令系统 3.2.1 数据
2、传送指令 3.2.2 算术运算指令 3.2.3 逻辑运算指令 3.2.4 控制转移指令 3.2.5 位操作指令 习题与思考题,04:21,4,3.1 指令系统简介,指令系统计算机所有指令的集合,称为该计算机的指令系统,它是表征计算机性能的重要标志。每种计算机都有它自己特有的指令系统。指令是指计算机执行某种操作(如传送数据、做算术运算等)的命令。,-指令系统,04:21,5,要让计算机工作,就得向计算机发出指令。指令的格式是机器码指令格式, 如:75905B ,即数字格式。另一种指令格式,即汇编指令格式, 如:MOV P1, #5BH,-指令的两种格式,3.1 指令系统简介,04:21,6,-M
3、CS-51汇编语言指令格式,操作码 操作数1 ,操作数2 ;注释,MCS-51单片机的汇编语言使用40多种助记符表征30多种指令功能。MCS-51单片机能够识别并执行的指令共有111条。这111条指令,构成了MCS-51单片机的指令系统。,3.1 指令系统简介,04:21,7,-特点,1) 指令执行时间短。只需1个机器周期的指令有64条,2个机器周期的指令有45条,而4个机器周期的指令仅有2条(既乘法和除法指令)。 2) 指令字节少。单字节指令有49条,双字节指令有46条,三字节指令有16条。 3) 位操作指令极为丰富,这体现了MCS-51单片机具有面向控制的特点。,3.1 指令系统简介,04
4、:21,8,3.1.1 指令系统的分类,MCS-51单片机能够识别并执行的指令共有111条。按指令所占字节数、指令执行时间和指令功能进行分类。 1按指令所占字节数分类1) 单字节指令(49条)2) 双字节指令(46条)3) 三字节指令(16条),-按指令所占存储空间分类,04:21,9,2按指令执行时间分类,1) 单周期指令(65条) 2) 双周期指令(44条) 3) 四周期指令(2条),3.1.1 指令系统的分类,-按指令执行时间可分类,04:21,10,1) 数据传送类指令(29条) 2) 算术运算类指令(24条) 3) 逻辑运算类指令(24条) 4) 控制转移类指令(17条) 5) 位操
5、作类指令(17条),3.1.1 指令系统的分类,-按指令功能分类,3按指令功能分类,04:21,11,3.1.2 指令格式,指令由操作码和操作数组成。操作码用来规定要执行的操作的性质,操作数为指令的操作提供数据和地址。 1指令的基本格式 符号地址: 操作码 操作数1 ,操作数2 ,操作数3 ;注释其中符号地址和操作码之间用“:”作为分隔符,也可再加上若干空格。操作码和操作数之间用空格作为分隔符。操作数之间用“,”作为分隔符。注释之前用“;”作为分隔符。,-基本格式,04:21,12,一条指令必须在一行中写完。例如: MAIN:MOV A,#10H ;主程序段 MAIN为符号地址; MOV为操作
6、码; A、#10H为二个操作数; 最后是注释。指令在送入计算机执行之前,必须先转换成机器语言形式。转换成机器语言的过程称为汇编,汇编有机器汇编和手工汇编两种方法。,3.1.2 指令格式,-基本格式,04:21,13,3.1.3 指令中的常用符号,为了便于阅读指令,MCS-51指令助记符中的一些常用符号约定如下。 Rn:表示当前工作寄存器R0R7中的一个。 Ri:表示寄存器间接寻址,常作间接寻址的地址指针。其中Ri代表R0和R1寄存器中的一个。 direct:表示内部数据存贮器单元的地址及特殊功能寄存器SFR的地址,对SFR而言,既可使用它的物理地址,也可直接使用它的名字。,04:21,14,#
7、date:表示8位立即数,即8位常数,取值范围为#00H#0FFH。 date16:表示16位立即数,即16位常数,取值范围为#0000H#0FFFFH。 addr16:表示16位地址。 addr11:表示11位地址。 rel:用补码形式表示的地址偏移量,取值范围为-128+127。 bit:表示内部RAM和SFR中的具有位寻址功能的位地址。,3.1.3 指令中的常用符号,04:21,15,:表示间接寻址寄存器或基址寄存器的前缀符号。 $: 表示当前指令的地址。 /: 位操作数的前缀,表示对该位操作数取反,如:/bit。 (x):表示存储单元x的内容。 (x):表示以寄存器或存储单元x的内容作
8、为地址的存储单元的内容。 :表示数据传送方向。,3.1.3 指令中的常用符号,04:21,16,3.1.4 寻址方式,如何找到参与运算的操作数据或数据所在的地址称为寻址方式。所以寻址方式是在地址范围内如何找到所需要的操作数的地址。MCS-51指令系统的寻址方式主要有立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、基址加变址寻址、相对寻址和位寻址等七种。,04:21,17,立即寻址是将操作数直接写在指令中,作为指令的一部分存放在代码段里,位置在程序存储器中。立即寻址中的操作数,称为立即数。 例如:MOV A, #30H ;30HA,1.立即寻址,3.1.4 寻址方式,-立即寻址,04:21,18
9、,2.直接寻址,直接寻址是将操作数的地址直接存放在指令中。这种寻址方式的操作数指的是内部数据存储器中存放数据的地址,或存放数据的一个特殊功能寄存器地址。 例如:MOV A, 30H ;(30H)A,3.1.4 寻址方式,-直接寻址,04:21,19,直接寻址方式可访问的范围,1) 特殊功能寄存器。 这部分存储单元既可以用单元地址给出,也可以用寄存器符号的形式给出。如:MOV A, 90H 或 MOV A, P1为同一条指令的两种写法(特殊功能寄存器只能用直接寻址方式访问)。 2) 内部数据存储器的低128个字节单元。 直接以单元地址的形式给出对于8032/8052等单片机,其内部高128字节R
10、AM(80HFFH)不能用直接寻址方式访问。,3.1.4 寻址方式,-访问范围,04:21,20,3) 位地址空间 片内RAM中20H2FH中的128个位地址,以及SFR中的11个可进行位寻址的寄存器中的位地址(可位寻址的特殊功能寄存器有B、ACC、PSW、IP、IE、SCON、TCON、P0P3)。 4) 在一些程序控制指令中,可采用直接寻址方式提供程序转移的目标地址。,3.1.4 寻址方式,-访问范围,直接寻址方式可访问的范围,04:21,21,-寄存器寻址,寄存器寻址是指操作数存放在寄存器中,并且寻址时的寄存器已隐含在指令的操作码中。 例如:MOV A, R5,3.1.4 寻址方式,3.
11、寄存器寻址,04:21,22,寄存器寻址方式的寻址范围: (1) 4个工作寄存器组共32个通用寄存器(在指令中只能使用当前寄存器组) (2) 部分特殊功能寄存器。如A,B,DPTR。,-寄存器寻址,3.1.4 寻址方式,04:21,23,-寄存器寻址,4.寄存器间接寻址 寄存器间接寻址是指操作数据存放在以寄存器内容为地址的单元中。如: MOV A, R0 ;(R0)A 指令功能为将R0所指出的内部RAM单元内容送入累加器A中,执行过程如图所示。图中设R0=60H。,3.1.4 寻址方式,04:21,24,寄存器间接寻址的寻址范围:,1) 内部低128字节单元(只能使用R0、R1作间址寄存器)。
12、 2) 外部数据存储器(64KB字节,使用DPTR作间址寄存器。另外,外部低128B单元也可用R0、R1作间址寄存器寻址)。 3) 在堆栈操作指令(PUSH、POP)中,以堆栈指针SP作间址寄存器,寻址空间为片内RAM。,3.1.4 寻址方式,-寻址范围,04:21,25,-基址变址寻址,基址变址寻址是指操作数存放在以变址寄存器和基址寄存器的内容相加形成的数为地址的单元中。其中累加器A作变址寄存器、程序计数器PC或寄存器DPTR作基址寄存器。基址加变址寻址方式常用于查表操作。如: MOVC A, A+PC ;PC+1PC,(A+PC)A MOVC A, A+DPTR ;(A+DPTR)A,3.
13、1.4 寻址方式,5.基址变址寻址,04:21,26,相对寻址是将程序计数器PC的当前值与指令第二字节给出的偏移量相加,从而形成转移的目标地址。 例如:JC 80H ;C=1则跳转,-相对寻址,3.1.4 寻址方式,6.相对寻址,04:21,27,-位寻址,位寻址是指对片内RAM中20H2FH中的128个位地址,以及SFR中的11个可进行位寻址的寄存器中的位地址寻址(可位寻址的特殊功能寄存器有B、ACC、PSW、IP、IE、SCON、TCON、P0P3)。例如:MOV C, 20H 此指令是将RAM中位寻址区20H位地址中的内容,送给位累加器Cy。位寻址指令不同于字节地址寻址指令, 例如:MO
14、V A, 20H,3.1.4 寻址方式,7.位寻址,04:21,28,-位寻址的表示形式,1) 直接使用位地址 包括位寻址区的位地址00H7FH和部分特殊功能寄存器的位地址。例如,PSW寄存器第2位的位地址为D2H。 2) 位名称表示法 专用寄存器中的一些寻址位是有符号名的,对其进行位寻址时可用其符号名,例如,PSW寄存器的第2位可用OV表示。 3) 单元地址加位表示法 例如,2F单元的第1位,可表示为2FH.1。 再如,D0H单元(PSW)的第2位,可表示为D0H.2。,3.1.4 寻址方式,04:21,29,4) 专用寄存器名称加位表示法 例如,PSW寄存器的第2位可表示为:PSW.2。
15、对于可位寻址的特殊功能寄存器,上面4种表示法是等效的。以读取PSW第二位为例的4种位寻址指令如下: MOV C, 0D2H ;直接使用位地址寻址 MOV C, OV ;使用位名称寻址 MOV C, 0D0H.2 ;使用单元地址加位表示法寻址 MOV C, PSW.2 ;使用专用寄存器名称加位表示法寻址,3.1.4 寻址方式,-位寻址的表示形式,04:21,30,在MCS-51单片机的指令系统中,指令对哪一个存储器空间进行操作,是由指令的操作码和寻址方式确定的。 1)对程序存储器只能采用立即寻址和基址加变址寻址方式; 2)对特殊功能寄存器只能采用直接寻址方式,不能采用寄存器间接寻址;,3.1.4
16、 寻址方式,-总结,04:21,31,3)对8032/8052等单片机内部RAM的高128个字节(80HFFH),只能采用寄存器间接寻址,不能使用直接寻址方式; 4)对位操作指令只能对位寻址区操作; 5)外部扩展的数据存储器只能用MOVX指令访问; 6)内部RAM的低128个字节(00H7FH)既能用直接寻址,也能用间接寻址。,3.1.4 寻址方式,-总结,04:21,32,存储空间对应的寻址方式,3.1.4 寻址方式,-寻址范围,04:21,33,3.2 指令系统,MCS-51的数据传送指令共有29条。助记符有MOV、MOVC、MOVX、XCH、XCHD、PUSH、POP。 数据传送指令一般
17、的操作是把源操作数传送到目的操作数,指令执行完成后,源操作数不变,目的操作数等于源操作数。如果要求在进行数据传送时,目的操作数不丢失,则不能用直接传送指令,而采用交换型的数据传送指令。数据传送指令不影响标志Cy、AC和OV,但可能会对奇偶标志P有影响。,3.2.1 数据传送类指令,-传送指令,04:21,34,-传送指令列表,3.2.1 数据传送类指令,04:21,35,-传送指令列表,3.2.1 数据传送类指令,04:21,36,助记符 功能说明 MOV A, Rn ;(Rn)A Rn中的内容送到累加器A中 MOV A, direct ;(direct) A 直接地址单元中的内容送到累加器A
18、中 MOV A, Ri ;(Ri) A Ri内容指向的地址单元中的内容送到累加器A中 MOV A, #data ;dataA 立即数送到累加器A中 功能:将源操作数指定内容送到累加器A中。,-传送指令列表,3.2.1 数据传送类指令,1以累加器为目的操作数的指令(4条),04:21,37,助记符 功能说明 MOV Rn, A ;(A)Rn 累加器A中的内容送到寄存器Rn中 MOV Rn, direct ;(direct) Rn 直接寻址单元中的内容送到寄存器Rn中 MOV Rn, #data ;dataRn 立即数直接送到寄存器Rn中 功能:将源操作数指定的内容送到所选定的工作寄存器Rn中。,
19、-传送指令列表,3.2.1 数据传送类指令,2以寄存器Rn为目的操作数的指令(3条),04:21,38,助记符 功能说明 MOV direct, A ;(A)direct 累加器A中的内容送到直接地址单元中 MOV direct, Rn ;(Rn)direct 寄存器Rn中的内容送到直接地址单元中 MOV direct1, direct2 ;(direct2) direct1 直接地址单元2中的内容送到直接地址1中 MOV direct, Ri ;(Ri) direct以寄存器Ri中的内容为地址的单元中内容送到直接地址单元中 MOV direct,#data ;datadirect 立即数送到
20、直接地址单元中,-传送指令列表,3.2.1 数据传送类指令,3以直接地址为目的操作数的指令(5条),04:21,39,功能:将源操作数指定的内容送到由直接地址指出的片内存储单元中。如: MOV 20H, A ;累加器A中的内容送到20H直接地址单元中 MOV 20H, R1 ;寄存器R1中的内容送到20H直接地址单元中 MOV 20H, 30H ;30H直接地址单元中的内容送到20H直接地址单元中 MOV 20H, R1 ;以寄存器R1中的内容为地址的单元中内容送到20H直接地址单元中 MOV 20H, #34H ;立即数送到20H直接地址单元中 MOV P2, #34H ;立即数送到P2直接
21、地址单元中,-传送指令列表,3.2.1 数据传送类指令,04:21,40,助记符 功能说明 MOV Ri, A ;(A)(Ri) 累加器A中内容送到以Ri中内容为地址的RAM单元中 MOV Ri, direct ;(direct) (Ri) 直接地址单元中内容送到以Ri中内容为地址的RAM单元中 MOV Ri, #data ;data(Ri) 立即数送到以Ri中内容为地址的RAM单元中,-传送指令列表,3.2.1 数据传送类指令,4以间接地址为目的操作数的指令(3条),04:21,41,功能:将源操作数指定的内容送到以R0或R1为地址指针的片内RAM存储单元中。如: MOV R0, A ;累加
22、器A中内容送到以R0中内容为 地址的RAM单元中 MOV R1, 20H ;20H单元中内容送到以R1中内容为地址的RAM单元中 MOV R0, #34H ;立即数34H送到以R0中内容为地址的RAM单元中,-传送指令列表,3.2.1 数据传送类指令,04:21,42,助记符 功能说明 MOV DPTR, #data16 ;dataHDPH,dataLDPL;16位常数的高8位送到DPH,低8位送到DPL 功能:将一个16位的立即数送到DPTR中去。其中高8位送入DPH,低8位送入DPL。如: MOV DPTR, #1234H ;指令执行后DPH中的值为12H,DPL中的值为34H,-传送指令
23、列表,3.2.1 数据传送类指令,516位数的传递指令(1条),04:21,43,如果我们分别向DPH和DPL送数,则结果也一样。如下面两条指令: MOV DPH, #12H MOV DPL, #34H 就相当于执行了MOV DPTR, #1234H。 MCS-51是一种8位机,这是唯一的一条16位立即数传递指令。,-传送指令列表,3.2.1 数据传送类指令,04:21,44,助记符 功能说明 MOVX A, Ri ;(Ri) A寄存器Ri指向的片外RAM单元中的内容送到累加器A中 MOVX Ri, A ;A(Ri)累加器A中内容送到寄存器Ri指向的片外RAM单元中 MOVX A, DPTR
24、;(DPTR) A数据指针指向的片外RAM单元中的内容送到累加器A中 MOVX DPTR, A ;(A)(DPTR)累加器A中内容送到数据指针指向的片外RAM单元中,-传送指令列表,3.2.1 数据传送类指令,6累加器A与片外RAM数据传送指令(4条),04:21,45,功能:在MCS-51中,与外部存储器RAM打交道的只可以是A累加器。所有需要送入外部RAM的数据必须通过A传送,而所有要读入的外部RAM中的数据也必须通过A读入。 在此我们可以看出内外部RAM的区别,内部RAM间可以直接进行数据传递,而外部RAM则不行。 例如,要将外部RAM中某一单元(假设为0100H单元的数据)送入另一个单
25、元(假设为0200H单元),则必须先将0100H单元中的内容读入A,然后再送到0200H单元中去。,-传送指令列表,3.2.1 数据传送类指令,04:21,46,要读或写外部RAM,必须要知道16位的RAM地址。在后两条指令中,地址是被直接放在DPTR中的。而前两条指令,由于Ri(即R0或R1)只是8位的寄存器,所以只提供低8位地址,此时,高8位地址要由P2口来提供。使用时应先将要读或写的地址送入DPTR或Ri(高8位地址送到P2口)中,然后再用读/写指令。,-传送指令列表,3.2.1 数据传送类指令,04:21,47,例3-1 将外部RAM的100H单元中内容送入外部RAM的200H单元中。
26、MOV DPTR, #0100HMOVX A, DPTRMOV DPTR, #0200HMOVX DPTR, A,-传送指令应用,3.2.1 数据传送类指令,04:21,48,助记符 功能说明 MOVC A, A+DPTR ;(A)+(DPTR) A表格地址;单元中的内容送到累加器A中 MOVC A, A+PC ;(PC)+1PC,(A)+(PC) A;表格地址单元中的内容送到累加器A中 功能:将ROM中的数据送到A中。常用此指令来查一个已存储在ROM中的数据表格。这组指令也称为查表指令。,-传送指令应用,3.2.1 数据传送类指令,7读程序存储器指令(2条),04:21,49,以DPTR或P
27、C为基址,以A为变址,在不断修改A中内容(等值增量)的同时,执行该指令,实现对ROM中存储的一块区域数据的读取。 以PC为基址时,不用设置PC的值,只需根据A的内容,就可以查出表格中的数据。但表格只能放在该条查表指令后面的256个单元之中,表格的大小受到限制,而且表格只能被一段程序所利用。而以DPTR为基址时,表格的大小和位置可以在64 KB的ROM中任意安排,并且表格可被任意程序块所共享。 说明:查找到的结果放在A中,因此,这类指令执行前后,A中的值不一定相同。,-传送指令应用,3.2.1 数据传送类指令,04:21,50,例3-2 有一个110的平方表存放在0100H开始的ROM中,用DP
28、TR和R0基址+变址的寻址方式实现查表功能,确定110(在R0中)的平方值。MOV DPTR, #0100HMOV A, R0MOVC A, A+DPTR.ORG 0100 ;ORG是指明后面数据块的起始地址DB 0,1, 4, 9, 16, 25, 36DB 49, 64, 81, 100 ;DB是定义字节指令,-传送指令应用,3.2.1 数据传送类指令,04:21,51,助记符 功能说明 PUSH direct ;(SP)+1SP,(direct) (SP);堆栈指针首先加1,直接寻址单元;中的数据送到堆栈指针SP所指的;单元中 POP direct ;(SP) direct,(SP) -
29、 1SP;堆栈指针SP所指的单元中的数据;送到直接寻址单元中,堆栈指针;SP再进行减1操作,-传送指令应用,3.2.1 数据传送类指令,8堆栈操作(2条),04:21,52,功能:第1条为压入堆栈指令,就是将direct中的内容送入堆栈中;第2条为弹出堆栈指令,就是将堆栈中的内容送回到direct中。 如:MOV SP, #5FHMOV A, #100MOV B, #20PUSH ACCPUSH B,-传送指令应用,3.2.1 数据传送类指令,其中,PUSH ACC指令是这样执行的:将SP中的值加1,即变为60H,然后将A中的值送到60H单元中,因此执行完本条指令后,内存60H单元中的值就是1
30、00。同样,执行PUSH B时,是将SP中的值加1,即变为61H,然后将B中的值送入到61H单元中,即执行完本条指令后,61H单元中的值变为20。,04:21,53,助记符 功能说明 XCH A, Rn ;(A)(Rn)累加器与工作寄存器 Rn中的内容互换 XCH A, direct ;(A)(direct)累加器与直接地址单元中的内容互换 XCH A, Ri ;(A)(Ri)累加器与工作寄存器Ri所指存储单容互换元中的内容互换,-传送指令应用,3.2.1 数据传送类指令,9交换指令(5条),04:21,54,XCHD A, Ri ;(A.3A.0)(Ri.3Ri.0)累加器与工作寄存器Ri所
31、指存储单元中的低半字节内容互换 SWAP A ;(A.3A.0)(A.7A.4)累加器中 内容高低半字节互换 功能:前4条指令是把累加器A中的内容与源操作数所指的数据相互交换。最后一条指令将累加器A中的内容高低半字节互换。,-传送指令应用,3.2.1 数据传送类指令,04:21,55,例3-3 假设A中内容为34H,R0指向的单元内容为56H。执行下列指令后看结果。 MOV R6, #29H ;R6=29H XCH A, R6 ;A=29H,R6=34H SWAP A ;A=92H XCH A, R6 ;A=34H,R6=92H XCHD A, R0 ;A=36H,(R0)=54H,-传送指令
32、应用,3.2.1 数据传送类指令,04:21,56,3.2.2 算术运算类指令,MCS-51的算术运算指令共有24条。助记符有ADD、ADDC、SUBB、DA、INC、DEC、MUL、DIV。 算术运算主要是执行加、减、乘、除法四则运算。,04:21,57,3.2.2 算术运算类指令,-运算指令列表,04:21,58,3.2.2 算术运算类指令,-运算指令列表,04:21,59,3.2.2 算术运算类指令,-运算指令对标志位的影响,04:21,60,例3-4 设1067H存在于R1R0中,30A0H存在于R3R2中,计算R1R0+R3R2,结果存于R5R4中。MOV A, R0 ADD A,
33、R2 ;R0+R2A和Cy MOV R4, A MOV A, R1 ADDC A, R3 ;R1+R3+CyA和Cy MOV R5, A,R1 R0 +R3 R2R5 R4,3.2.2 算术运算类指令,-运算指令应用,04:21,61,例3-5 设A=12H,R0=33H,(21H)=32H,(34H)=22H,DPTR=1234H。连续执行下面指令后看相应寄存器和单元中的结果。INC A ;A=13H INC R0 ;R0=34H INC 21H ;(21H)=33H INC R0 ;(34H)=23H INC DPTR ;DPTR=1235H,3.2.2 算术运算类指令,-运算指令应用,0
34、4:21,62,3.2.3 逻辑运算类指令,逻辑运算和移位指令共有24条,助记符有ANL、ORL、XRL、CLR、CPL、RL、RLC、RR、RRC。有与、或、异或、求反、左/右移位、清0等逻辑操作,有直接、寄存器和寄存器间址等寻址方式。这类指令一般不影响程序状态字(PSW)标志。MCS-51指令系统的逻辑运算指令见表3-5。,04:21,63,逻辑运算类指令列表,04:21,64,逻辑运算类指令列表,04:21,65,助记符 功能说明 ORL A, Rn ;(A)(Rn)A ORL A, direct ;(A)(direct)A ORL A, Ri ;(A)(Ri)A ORL A, #dat
35、a ;(A)dataA ORL direct, A ;(direct)(A)direct ORL direct, #data ;(direct)datadirect,3.2.3 逻辑运算类指令,1逻辑或指令(6条),04:21,66,3.2.3 逻辑运算类指令,功能:将两个单元中的内容执行逻辑或操作。如果目的操作数的直接地址是I/O地址,则为“读修改写”操作。如: MOV A, #45H ;A=45H MOV R1, #25H ;R1=25H MOV 25H, #39H ;(25H)=39H ORL A, R1 ;45H39H = 7DH, A = 7DH ORL 25H, #13H ;39H
36、13H = 3BH, (25H) = 3BH ORL 25H, A ;3BH7DH =7FH, (25H) = 7FH,04:21,67,3.2.3 逻辑运算类指令,助记符 功能说明 ANL A, Rn ;(A)(Rn)A ANL A, direct ;(A)(direct)A ANL A, Ri ;(A)(Ri)A ANL A, #data ;(A)dataA ANL direct, A ;(direct)(A)direct ANL direct, #data ;(direct)datadirect,2逻辑与指令(6条),04:21,68,3.2.3 逻辑运算类指令,功能:将两个单元中的内容
37、执行逻辑与操作。如果目的操作数的直接地址是I/O地址,则为“读修改写”操作。如: MOV A, #45H ;A=45H MOV R1, #25H ;R1=25H MOV 25H, #79H ;(25H)=79H ANL A, R1 ;45H79H = 41H, A = 41H ANL 25H, #15H ;79H15H = 11H, (25H) = 11H ANL 25H, A ;11H41H = 01H, (25H) = 01H,04:21,69,3.2.3 逻辑运算类指令,助记符 功能说明 XRL A, Rn ;(A)(Rn)A XRL A, direct ;(A) (direct)A X
38、RL A, Ri ;(A) (Ri)A XRL A, #data ;(A)dataA XRL direct, A ;(direct) (A)direct XRL direct, #data ;(direct) datadirect,3逻辑异或指令(6条),04:21,70,3.2.3 逻辑运算类指令,功能:将两个单元中的内容执行逻辑异或操作。如果直接地址是I/O地址,则为“读修改写”操作。如: MOV A, #45H ;A=45H MOV R1, #25H ;R1=25H MOV 25H, #39H ;(25H)=39H XRL A, R1 ;45H39H = 7CH, A = 7CH XRL
39、 25H, #13H ;39H13H = 2AH, (25H) = 2AH XRL 25H, A ;2AH7CH =56H, (25H) = 56H,04:21,71,3.2.3 逻辑运算类指令,助记符 功能说明 清零:CLR A ;0A,这条指令将累加器A中的内容清零。 取反:CPL A ;/(A)A,这条指令将累加器A中的内容按位取反。 如:若A=5CH,执行 CPL A后的结果是A=A3H。,4清零与取反指令(2条),04:21,72,3.2.3 逻辑运算类指令,RL A ;累加器A中的内容向左环移1位RLC A ;累加器A中的内容带进位标志位向左环移1位,5循环移位指令(4条),04:
40、21,73,3.2.3 逻辑运算类指令,RR A ;累加器A中的内容向右环移1位RRC A;累加器A中的内容带进位标志位向右环移1位,5循环移位指令(4条),04:21,74,3.2.3 逻辑运算类指令,功能:对累加器A中的内容进行简单的逻辑操作。除了带进位标志位的移位指令外,其他都不影响Cy,AC,OV等标志位。如:若A=5CH,Cy=1,执行RLC A后,结果为A=B9H,Cy=0,P=1。 对RLC和RRC指令,在Cy=0时: RLC相当于乘以2,RRC相当于除以2。,5循环移位指令(4条),04:21,75,3.2.4 控制转移类指令,控制转移指令有17条,助记符有: ACALL、LC
41、ALL、RET、RETI、AJMP、LJMP、SJMP、JMP、CJNE、DJNZ、JZ、JNZ、NOP。 控制转移指令用于控制程序的流向,所控制的范围即为程序存储器区间。,04:21,76,控制转移类指令列表,3.2.4 控制转移类指令,04:21,77,3.2.4 控制转移类指令,控制转移类指令列表,04:21,78,3.2.4 控制转移类指令,控制转移类指令列表,04:21,79,MOV DPTR, #TAB ;将TAB代表的地址送入DPTRJMP A+DPTR ;跳转TAB: AJMP ROUT0 ;A=0时,跳转到ROUT0 TAB+2: AJMP ROUT1 ;A=2时,跳转到RO
42、UT1 TAB+4: AJMP ROUT2 ;A=4时,跳转到ROUT2 TAB+6: AJMP ROUT3 ;A=6时,跳转到ROUT3. ROUT0: . ROUT1: . ROUT2: . ROUT3: .,3.2.4 控制转移类指令,例3-6 利用间接转移指令实现散转程序结构。,04:21,80,例3-7 条件转移程序结构举例。MOV A, R0JZ L1 MOV R1, #00H AJMP L2L1: MOV R1, #0FFHL2: SJMP L2 在执行上面这段程序前,如果R0=0,结果是R1=0FFH;如果R00,结果是R1=00H。 把上面例子中的JZ改成JNZ后,如果R0=
43、0,结果是R1=00H;如果R00,结果是R1=0FFH。,3.2.4 控制转移类指令,04:21,81,MOV A, R0CJNE A, #10H, L1 ;如R010H,则转移至标号L1MOV R1, #0 ;如R0=10H,则不转移,00HR1AJMP L3 L1: JC L2 ;如Cy=1,即R010H,0AAHR1AJMP L3 L2: MOV R1, #0FFH ;R010H,则R1=0AAH;如果R010H,则R1=0FFH。,3.2.4 控制转移类指令,例3-8 比较R0中的数是否大于10H。,04:21,82,例3-9 求01H0AH十个数的和,结果放在A中。MOV 23H,
44、 #0AHCLR ALOOP: ADD A, 23HDJNZ 23H, LOOPSJMP $ 程序段的执行过程是:将23H单元中的数连续相加,存至A中,每加一次,23H单元中的数值减1,直至减到0,共加0AH次。,3.2.4 控制转移类指令,04:21,83,3.2.5 位操作指令,在MCS-51单片机的硬件结构中,有一个位处理器(又称布尔处理器),它有位操作指令17条,包括位传送、逻辑运算、控制程序转移等。助记符有,MOV、CLR、CLP、SETB、ANL、ORL、JC、JNC、JB、JNB、JBC。MCS-51指令系统的位操作指令见表3-7。,04:21,84,3.2.5 位操作指令,-指
45、令列表,04:21,85,例3-10 P3.2和P3.3口各接有一只按键,要求它们分别按下时(P3.2=0或P3.3=0),分别使P1口为0或FFH。 START:MOV P1, #0FFHMOV P3, #0FFH L1: JNB P3.2, L2 ;P3.2=0,则转到L2使P1口输出0JNB P3.3, L3 ;P3.2=1,P3.3=0,则转到L3LJMP L1 ;P3.2=1,P3.3=1,则转到L1(等待) L2: MOV P1, #00H ;P3.2=0,使P1口全为“0” LJMP L1 L3: MOV P1, #0FFH ;P3.3=0,使P1口全为“1”LJMP L1,3.
46、2.5 位操作指令,04:21,86,习题与思考题,3-1 什么是寻址方式?MCS-51指令系统有哪些寻址方式?相应的寻址空间在何处? 3-2 访问内部RAM单元可以采用哪些寻址方式?访问外部RAM单元可以采用哪些寻址方式?访问特殊功能寄存器(SFR)可以采用哪些寻址方式? 3-3 访问外部数据存储器和程序存储器可以用哪些指令来实现?举例说明。 3-4 试用下列3种寻址方式编程,将立即数0FH送入内部RAM的30H单元中。(1) 立即寻址方式;(2) 寄存器寻址方式;(3) 寄存器间接寻址方式。,04:21,87,3-5 SJMP指令和AJMP指令都是两字节转移指令,它们有什么区别?各自的转移
47、范围是多少?能否用AJMP指令代替程序中的所有SJMP指令?为什么? 3-6 加法和减法指令影响哪些标志位?是怎么影响的? 3-7 写出实现下列要求的指令或程序片段。(1) 将R0的内容传送到R1(2) 内部RAM的20H单元内容传送到寄存器R1(3) 内部RAM的20H单元的D7和D3位清零,其他位保持不变(4) 外部RAM的1000H单元内容传送到内部RAM的60H单元中(5) 外部RAM的1000H单元内容传送到寄存器R2中(6) 累加器高4位清零,习题与思考题,04:21,88,3-8 试编写一段程序,将内部数据存储器的30H和3lH单元内容传送到外部数据存储器的1000H和1001H单元中。 3-9 试编写一段程序,将外部数据存储器的40H单元中的内容传送到0l00H单元中。 3-10 试编写一段程序,将R3中的数乘以4(用移位指令)。 3-11 试编写一段程序,将R2中的各位倒序排列后送到R3中。 3-12 试编写一段程序,将P1口的高5位置位,低3位不变。,习题与思考题,