资源预览内容
第1页 / 共36页
第2页 / 共36页
第3页 / 共36页
第4页 / 共36页
第5页 / 共36页
第6页 / 共36页
第7页 / 共36页
第8页 / 共36页
第9页 / 共36页
第10页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
单片机第单片机第3章章3v 一个计算机一个计算机“智商智商”的高低,取决于它的转移类指的高低,取决于它的转移类指令的多少,特别是令的多少,特别是条件转移条件转移指令的多少。计算机运行过指令的多少。计算机运行过程中,有时因为操作的需要,程序不能按顺序逐条执行程中,有时因为操作的需要,程序不能按顺序逐条执行指令,需要指令,需要改变程序的运行方向改变程序的运行方向,即将程序跳转到某个,即将程序跳转到某个指定的地址再顺序执行下去。某些指令具有指定的地址再顺序执行下去。某些指令具有修改程序计修改程序计数器数器PCPC内容内容的功能,因为的功能,因为PCPC内容是将要执行的下一条指内容是将要执行的下一条指令的地址,所以计算机执行这类指令就能够控制程序转令的地址,所以计算机执行这类指令就能够控制程序转移到新的地址上去执行。移到新的地址上去执行。v无条件转移指令是当程序执行到该指令时,程序无条无条件转移指令是当程序执行到该指令时,程序无条件的转移到指令所提供的地址处执行。无条件转移指件的转移到指令所提供的地址处执行。无条件转移指令有长转移、短转移、相对转移和间接转移令有长转移、短转移、相对转移和间接转移4 4条指令。条指令。vAJMPaddr11vLJMPaddr16vSJMPrelvJMPA+DPTR1. 1. 无条件无条件转移移 (4 4条)条)3.4.4 3.4.4 控制控制转移移类指令(指令(1717条)条)(1) (1) 长转移指令长转移指令LJMPaddr16v对于编程者:它是一条可以转向对于编程者:它是一条可以转向64K64K空间任一地址的转空间任一地址的转移。助记符后通常直接写目标行号。移。助记符后通常直接写目标行号。v对与汇编程序:汇编后它有三个字节,操作码是对与汇编程序:汇编后它有三个字节,操作码是02H,02H,而而其后的两个字节分别是目标地址的高、低字节。其后的两个字节分别是目标地址的高、低字节。v对与对与CPUCPU:当它取得操作码:当它取得操作码02H02H后,紧跟其后获取的两个后,紧跟其后获取的两个字节被送往字节被送往PCPC,所以,本指令执行完,所以,本指令执行完,PC=PC=目标地址。目标地址。例如:例如: ORGORGORGORG0000H0000H0000H0000HLJMPLJMPLJMPLJMPMAINMAINMAINMAIN ;02H 00H 30H 02H 00H 30H 02H 00H 30H 02H 00H 30H ORGORGORGORG0030H0030H0030H0030HMAINMAINMAINMAIN: MOVMOVMOVMOVR0,#8R0,#8R0,#8R0,#83.4.4 3.4.4 控制控制转移移类指令(指令(1717条)条)(2) (2) 近转移指令近转移指令AJMPaddr11v对于编程者:它是一条可以转向对于编程者:它是一条可以转向2K2K空间某地址的转移。空间某地址的转移。助记符后通常直接写目标行号。助记符后通常直接写目标行号。v对与汇编程序:汇编后它有两个字节,操作码的是后五对与汇编程序:汇编后它有两个字节,操作码的是后五位是位是00001,00001,而其余的而其余的1111位来自目标地址的后位来自目标地址的后1111位,格式位,格式为(为(a10a9a8 00001a10a9a8 00001)(a7(a7a0)a0)。v对与对与CPUCPU:当它取得操作码,发现后五位是:当它取得操作码,发现后五位是0000100001后,接后,接着获取下一个字节的机器码,执行着获取下一个字节的机器码,执行(PCPC)+2+2(PCPC),),addr11addr11(PC10-0PC10-0)。程序计数器赋予新值)。程序计数器赋予新值- -(PC15-PC15-1111)不改变,低)不改变,低1111位地址来自指令的标号地址位地址来自指令的标号地址 。3.4.4 3.4.4 控制控制转移移类指令(指令(1717条)条)(3) (3) 短转移指令短转移指令SJMPrelv对于编程者:目标地址可以在这条指令的前对于编程者:目标地址可以在这条指令的前128B128B到后到后127B127B之间。助记符后通常仍然直接写目标行号。之间。助记符后通常仍然直接写目标行号。v对与汇编程序:汇编后它有两个字节,操作码是对与汇编程序:汇编后它有两个字节,操作码是80H,80H,而而其余一个字节表明转移的相对偏移量,用其余一个字节表明转移的相对偏移量,用relrel表示。表示。v 汇编时汇编时rel=rel=目标地址目标地址- -(源地址(源地址+2+2)v对与对与CPUCPU:当它取得操作码为:当它取得操作码为80H80H后,紧跟着获取的一个后,紧跟着获取的一个字节字节relrel被用来计算新的被用来计算新的PCPC值。值。v 执行时新的执行时新的PC=PC=(PCPC)当前)当前+2+rel +2+rel v = =源地址源地址+2+2+目标地址目标地址- -(源地址(源地址+2+2)v = =目标地址目标地址3.4.4 3.4.4 控制控制转移移类指令(指令(1717条)条)补:指令系统的寻址方式补:指令系统的寻址方式 相对寻址是相对寻址是以程序计数器以程序计数器PCPC的的当前值当前值(指读出该指读出该2 2字节或字节或3 3字节的跳转指令后,字节的跳转指令后,PCPC指向的下条指令的地址指向的下条指令的地址)为基准,加为基准,加上指令中给出的相对偏移量上指令中给出的相对偏移量 rel rel 形成目标地址的寻址方式形成目标地址的寻址方式 。该类寻址方式主要用于跳转指令。该类寻址方式主要用于跳转指令。目的地址目的地址= =转移指令所在的地址转移指令所在的地址 + + 转移指令的字节数转移指令的字节数+ rel+ rel 偏移量偏移量relrel是一带符号的是一带符号的8 8位二进制数补码数位二进制数补码数范围是:范围是:128 B128 B +127B +127B 相对寻址相对寻址相对寻址相对寻址54H54H程序存储区程序存储区程序存储区程序存储区54H54HA A2001H2001H20H20HPCPC02H02H 2056H2056HXXXX80H80H2056H2056H2000H2000H设指令设指令SJMP54H的机器码的机器码80H54H存放在存放在2000H处,当处,当执行到该指令时,先从执行到该指令时,先从2000H和和2001H单元取出指令,单元取出指令,PC自动自动变为变为2002H;再把;再把PC的内容与操作数的内容与操作数54H相加,形成目标地址相加,形成目标地址2056H,再送回,再送回PC,使得程序跳转到,使得程序跳转到2056H单元继续执行。单元继续执行。相相相相对寻对寻址址址址补:指令系:指令系统的的寻址方式址方式偏移量偏移量relrel是一是一带符号带符号的的8 8位二进制数补码数的说明:位二进制数补码数的说明:1.1.范围是:范围是: 128 B128 B +127B+127B2.2.目标地址与源地址的大小关系不定目标地址与源地址的大小关系不定3.3. 当目标地址大于源地址,则向下转移,当目标地址大于源地址,则向下转移,relrel为正数为正数4.4.当目标地址小于源地址,则向上转移,当目标地址小于源地址,则向上转移,relrel为负数为负数例如:例如:在在ROMROM区区0100H0100H地址单元地址单元 80H 55H 80H 55H( SJMP rel SJMP rel) 当当PC=0100HPC=0100H,取得机器码后,会根据公式进行计算:,取得机器码后,会根据公式进行计算: PC= PC=(PCPC)当前当前+ +2+rel =0100H+2+55H=0157H,2+rel =0100H+2+55H=0157H,向下转移向下转移又如又如:若:若ROMROM区区0100H0100H地址单元地址单元 80H F6H 80H F6H( rel rel是负数,为是负数,为- -0AH0AH) 当当PC=0100HPC=0100H,取得机器码后,会根据公式进行计算:,取得机器码后,会根据公式进行计算: PC= PC=(PCPC)当前当前+ +2+rel =0100H+2-0AH=00F8H,2+rel =0100H+2-0AH=00F8H,向上转移向上转移再如:再如:若若ROMROM区区0100H0100H地址单元地址单元 80H FEH 80H FEH( rel rel是负数,为是负数,为-2H-2H) 当当PC=0100HPC=0100H,取得机器码后,会根据公式进行计算:,取得机器码后,会根据公式进行计算: PC= PC=(PCPC)当前当前+ +2+rel =0100H+2-2H=0100H,2+rel =0100H+2-2H=0100H, 原地踏步、等待原地踏步、等待指令经常写成:指令经常写成:SJMP $SJMP $3.4.4 3.4.4 控制控制转移移类指令(指令(1717条)条)在用汇编语言程序是,在用汇编语言程序是,rel是由汇编程序在汇编过程中是由汇编程序在汇编过程中自动计算偏移地址,并且填入指令代码中;在手工汇编时,自动计算偏移地址,并且填入指令代码中;在手工汇编时,我们可用转移目的地址减转移指令所在源地址,再减转移我们可用转移目的地址减转移指令所在源地址,再减转移指令字节数指令字节数2得到偏移字节数得到偏移字节数rel。 ORG 0100HORG 0100HORG 0100HORG 0100H LOOPLOOPLOOPLOOP:MOV P1,#55HMOV P1,#55HMOV P1,#55HMOV P1,#55H LCALL TIMELCALL TIMELCALL TIMELCALL TIME MOV P1,#0AAH MOV P1,#0AAH MOV P1,#0AAH MOV P1,#0AAH LCALL TIMELCALL TIMELCALL TIMELCALL TIME SJMP LOOPSJMP LOOPSJMP LOOPSJMP LOOP END END END END ROMROMROMROM中的机器码中的机器码中的机器码中的机器码0100H 75H 90H 55H0100H 75H 90H 55H0100H 75H 90H 55H0100H 75H 90H 55H 12H *H *H12H *H *H12H *H *H12H *H *H 75H 90H AAH 75H 90H AAH 75H 90H AAH 75H 90H AAH 12H *H *H12H *H *H12H *H *H12H *H *H010CH 80010CH 80010CH 80010CH 80H relH relH relH rel3.4.4 3.4.4 控制控制转移移类指令(指令(1717条)条)rel=0100H-(010CH+2)rel=0100H-(010CH+2)rel=0100H-(010CH+2)rel=0100H-(010CH+2) =-0EH =F2H =-0EH =F2H =-0EH =F2H =-0EH =F2H(4) (4) 间接转移指令间接转移指令JMPA+DPTR这是一个转移指令。它的目标地址由操作数字段来描述。这是一个转移指令。它的目标地址由操作数字段来描述。可以在可以在ROM空间的空间的64K内范围任意转移。当对内范围任意转移。当对DPTR赋值后,赋值后,转移的目标地址还可以由转移的目标地址还可以由A的内容决定。的内容决定。这条指令可代替众多的判别跳转指令,具有散转功能。这条指令可代替众多的判别跳转指令,具有散转功能。执行完执行完(PC)=(A)+(DPTR)执行JMPA+DPTR后,会依后,会依A内容的不同转向不同的目标地内容的不同转向不同的目标地址。址。3.4.4 3.4.4 控制控制转移移类指令(指令(1717条)条)例如:根据累加器例如:根据累加器A A中命令键键值,设计命令键操作中命令键键值,设计命令键操作 程序入口跳转表程序入口跳转表: CLR C CLR C ;清进位;清进位 RLC A RLC A ;键值乘;键值乘2 2 MOV DPTR MOV DPTR,#JPTAB#JPTAB ;指向命令键跳转表首址;指向命令键跳转表首址 JMP JMP A+DPTR A+DPTR ;散转入命令键入口;散转入命令键入口JPTABJPTAB: AJMP CCS0 AJMP CCS0 ;双字节指令;双字节指令 AJMP CCS1 AJMP CCS1 AJMP CCS2 AJMP CCS2。CCS0CCS0:CCS1CCS1:3.4.4 3.4.4 控制控制转移移类指令(指令(1717条)条) 有条件转移指令共三类,有条件转移指令共三类,8 8种,它们有如下种,它们有如下共性共性:v指令字面上会用助记符给出一个指令字面上会用助记符给出一个判决规则判决规则,如,如(A)=0(A)=0等。等。vCPUCPU执行时会依据当前的条件作出真执行时会依据当前的条件作出真/ /假判断,是真假判断,是真-则转则转移;是假移;是假-则继续顺序执行。则继续顺序执行。v指令中最后一个操作数表明转移的目标地址,通常是标号指令中最后一个操作数表明转移的目标地址,通常是标号地址。地址。v所有的有条件转移均为短转移。所有的有条件转移均为短转移。v本指令前要有意识地构建判决条件。本指令前要有意识地构建判决条件。不同的指令其实就是以不同的助记符,给出不同的不同的指令其实就是以不同的助记符,给出不同的判决规则判决规则2.有条件转移指令(有条件转移指令(8条)条)3.4.4 3.4.4 控制控制转移移类指令(指令(1717条)条)判决规则判决规则真真假假新的新的目标目标地址地址顺序顺序执行执行助记符助记符给出给出操作数操作数给出给出例如:例如:JNZ ABC JNZ ABC 助记符给出助记符给出(A)0的判决的判决条件条件操作数给出目标地操作数给出目标地址为址为ABC执行到此句,若(执行到此句,若(A A)0 0,顺序执行;,顺序执行;若若 (A) (A) 0 0,则转向,则转向ABCABCJZ relJZ rel;判决规则(判决规则(A A)= 0= 0JNZ relJNZ rel;判决规则(判决规则(A A)00条件转移指令(条件转移指令(条件转移指令(条件转移指令(2 2 2 2条)条)条)条)3.4.4 3.4.4 控制控制转移移类指令(指令(1717条)条)CJNE OPR1,OPR2,relCJNE OPR1,OPR2,rel;判决规则(;判决规则(OPR1OPR1) (OPR2OPR2)CJNE A, direct, rel CJNE A, direct, rel ; A(data),(PC)+3+rel(PC)CJNE A, #data, rel CJNE A, #data, rel ;A#data,(PC)+3+rel(PC)CJNE Rn, #data, rel CJNE Rn, #data, rel ;(Rn)#data,(PC)+3+relPC)CJNE Ri, #data, relCJNE Ri, #data, rel;(Rn)#data,(PC)+3+rel(PC)说明:说明:()()字节与字节比较字节与字节比较()()比较不等转,否则顺序执行比较不等转,否则顺序执行()()影响影响Cy与减法相同,但不改变操作数与减法相同,但不改变操作数()()三字节指令,三字节指令,rel是偏移量是偏移量比较不相等转移(比较不相等转移(比较不相等转移(比较不相等转移(4 4 4 4条)条)条)条)3.4.4 3.4.4 控制控制转移移类指令(指令(1717条)条)减减减减1 1 1 1不为不为不为不为0 0 0 0转移(转移(转移(转移(2 2 2 2条)条)条)条) DJNZRn,rel;(Rn)-1(Rn),(Rn)0,(PC)+2+rel(PC)DJNZdirect,rel;(data)-1(data),(data)0,(PC)+3+rel(PC)例:延时子程序例:延时子程序delay:MOVR7,#03HDJNZR7,$RETDJNZOPR,rel; 判决规则:(判决规则:(OPROPR)-1-1 03.4.4 3.4.4 控制控制转移移类指令(指令(1717条)条)3. 3. 3. 3. 调用和返回指令(调用和返回指令(调用和返回指令(调用和返回指令(4 4 4 4条)条)条)条) 在程序设计中,有时因操作要求,需反复执行某在程序设计中,有时因操作要求,需反复执行某段程序,于是引进了主程序和子程序的概念。段程序,于是引进了主程序和子程序的概念。子程序子程序能被反复调用。这样可减少程序编写和调试的工作量。能被反复调用。这样可减少程序编写和调试的工作量。指令系统中一般都有主程序指令系统中一般都有主程序调用调用子程序的指令和从子子程序的指令和从子程序程序返回返回主程序的指令。主程序的指令。 通常把具有一定功能的公用程序段作为子程序。通常把具有一定功能的公用程序段作为子程序。子程序的入口标号可以成为子程序名(或子程序的入子程序的入口标号可以成为子程序名(或子程序的入口地址),最后一条指令为返回主程序指令(口地址),最后一条指令为返回主程序指令(RETRET)。)。3.4.4 3.4.4 控制控制转移移类指令(指令(1717条)条)v长调用指令长调用指令LCALL addr16LCALL addr16(子程序的入口地址子程序的入口地址)v短调用指令短调用指令ACALL addrll ACALL addrll (子程序的入口地址子程序的入口地址)v子程序返回指令子程序返回指令 RET RETv中断返回指令中断返回指令 RETI RETI上述指令的执行,最终都会令上述指令的执行,最终都会令PC得到一个新值。得到一个新值。3.4.4 3.4.4 控制控制转移移类指令(指令(1717条)条)4 . 4 . 空操作指令(空操作指令(1 1条)条) NOP NOP 这条指令除了使这条指令除了使PCPC加加1 1,消耗一个机器周期外,消耗一个机器周期外,没有执行任何操作。可用于短时间的延时。没有执行任何操作。可用于短时间的延时。3.4.4 3.4.4 控制控制转移移类指令(指令(1717条)条)3.4.5 3.4.5 位操作指令(位操作指令(1717条)条)位数据传送指令(位数据传送指令(2条)条)位修正指令(位修正指令(6条)条)逻辑运算指令(逻辑运算指令(4条)条)位条件转移类指令(位条件转移类指令(5条)条)位寻址空间位寻址空间v在在进进行行位位操操作作时时,进进位位标标志志位位CYCY布布尔尔累累加加器器(位位累累加加器器),简写成,简写成C C。v位寻址区:位寻址区: 片内片内RAMRAM字节地址字节地址20H20H2FH2FH单元中连续的单元中连续的128128位位(位地址(位地址00H00H7FH7FH)v部分特殊功能寄存器部分特殊功能寄存器SFRSFR(通常用位名来访问,如(通常用位名来访问,如RS0RS0、OVOV)3.4.5 3.4.5 位操作指令(位操作指令(1717条)条)v点操作符号:点操作符号: 如如PSW.4(D0H).4PSW.4(D0H).4v位名称方式:位名称方式: 如如RS1RS1v直接写位地址:直接写位地址: 如如D4HD4Hv用户定义名方式:如用伪指令用户定义名方式:如用伪指令bitbit flag bit 10H flag bit 10HSETB flagSETB flag;(10H)=1(10H)=1位地址的表达方式:位地址的表达方式:3.4.5 3.4.5 位操作指令(位操作指令(1717条)条) 位传送指令就是可寻址位与累加位位传送指令就是可寻址位与累加位CYCY之间的传送,指之间的传送,指令有两条。令有两条。 MOVC,bit;bitCY,某位数据送,某位数据送CY。MOVbit,C;CYbit,CY数据送某位数据送某位例:将位地址例:将位地址20H的一位数传送到位地址的一位数传送到位地址30H中:中:MOVC,20HMOV30H,C1 1 1 1、位传送指令(、位传送指令(、位传送指令(、位传送指令(2 2 2 2条)条)条)条)若(若(CY)=1,(,(P1)=10100011B,(,(P3)=01101100B。试指出执行下列程序段后,试指出执行下列程序段后,CY、P1口及口及P3口内容的变化情况。口内容的变化情况。MOVP1.3,CMOVP1.4,CMOVC,P1.6MOVP3.6,CMOVC,P1.0MOVP3.4,CCY=1,P1=10101111B,P3=00111100B3.4.5 3.4.5 位操作指令(位操作指令(1717条)条)这些指令对这些指令对这些指令对这些指令对CYCYCYCY及可寻址位进行置位或复位操作,共有四条指令。及可寻址位进行置位或复位操作,共有四条指令。及可寻址位进行置位或复位操作,共有四条指令。及可寻址位进行置位或复位操作,共有四条指令。 CLR C ; 0CY, CLR C ; 0CY, CLR C ; 0CY, CLR C ; 0CY,清清清清CYCYCYCY。CLR bit ; CLR bit ; CLR bit ; CLR bit ; 0bit,0bit,0bit,0bit,清某一位。清某一位。清某一位。清某一位。SETB C ; SETB C ; SETB C ; SETB C ; 1CY,1CY,1CY,1CY,置位置位置位置位CYCYCYCY。 SETB bit ; 1bit, SETB bit ; 1bit, SETB bit ; 1bit, SETB bit ; 1bit,置置置置位某一位。位某一位。位某一位。位某一位。例如:例如:例如:例如:CLR P3.0 CLR P3.0 CLR P3.0 CLR P3.0 指令,就是将指令,就是将指令,就是将指令,就是将P3.0P3.0P3.0P3.0清零。清零。清零。清零。 2 2 2 2、位置位复位指令(、位置位复位指令(、位置位复位指令(、位置位复位指令(4 4 4 4条)条)条)条)3.4.5 3.4.5 位操作指令(位操作指令(1717条)条)3 3 3 3、位运算指令(、位运算指令(、位运算指令(、位运算指令(6 6 6 6条)条)条)条)ANLC,bit;(CY)(bit)CY。ANLC,/bit;(CY)(/bit)CY。ORLC,bit;(CY)(bit)CY。ORLC,/bit;(CY)(/bit)CY。CPLC;(/CY)CY。CPLbit;(/bit)bir。位运算包括与、或、非三种逻辑运算,与字节逻位运算包括与、或、非三种逻辑运算,与字节逻位运算包括与、或、非三种逻辑运算,与字节逻位运算包括与、或、非三种逻辑运算,与字节逻辑运算比较,没有异或。与、或运算,位累加器辑运算比较,没有异或。与、或运算,位累加器辑运算比较,没有异或。与、或运算,位累加器辑运算比较,没有异或。与、或运算,位累加器C C一定参与。一定参与。一定参与。一定参与。3.4.5 3.4.5 位操作指令(位操作指令(1717条)条)JCrel;判决规则;判决规则C=1JNCrel;判决规则;判决规则C=04 4 4 4、位控制转移指令(、位控制转移指令(、位控制转移指令(、位控制转移指令(5 5 5 5条)条)条)条)JBbit,rel;判决规则判决规则位状态为位状态为1转移。转移。JNBbit,rel;判决规则判决规则位状态为位状态为0转移。转移。JBCbit,rel;判决规则判决规则位状态为位状态为1时先清时先清“0”再转移再转移3.4.5 3.4.5 位操作指令(位操作指令(1717条)条)作业作业vP741.4,2.5,2.63.1,3.2测试测试1.根据你所理解的逻辑关系,写出五大类指令。根据你所理解的逻辑关系,写出五大类指令。(1)数据传送类)数据传送类(28条条)(2)算术操作类)算术操作类(24条条)(3)逻辑运算类)逻辑运算类(25条条)(4)控制转移类)控制转移类(17条条)(5)位操作类)位操作类(17条条)若(若(R1)=30H,(,(A)=40H,(30H)=60H,(,(40H)=08H分析:分析:MOVA,R1MOVR1,40HMOV40H,AMOVR1,#7FH2.分析执行下列程序段后上述各单元内容的变化。分析执行下列程序段后上述各单元内容的变化。结束语结束语谢谢大家聆听!谢谢大家聆听!36
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号