控制转移类指令(17条)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第七课复习3.4.4控制转移类指令(17条)3.4.5位操作指令(17条)3.4MCS-51指令系统的分类介绍一个计算机“智商”的高低,取决于它的转移类指令的多少,特别是条件转移指令的多少。计算机运行过程中,有时因为操作的需要,程序不能按顺序逐条执行指令,需要改变程序的运行方向,即将程序跳转到某个指定的地址再顺序执行下去。某些指令具有修改程序计数器PC内容的功能,因为PC内容是将要执行的下一条指令的地址,所以计算机执行这类指令就能够控制程序转移到新的地址上去执行。开头的话XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51C11nFX1CRYSTALC21nFC322uFResistorResistorR11kD1LED-REDResistorResistorR2220D2LED-REDD3LED-REDD4LED-REDResistorResistorR4220ResistorResistorR5220ResistorResistorR6220D5LED-REDD6LED-REDD7LED-REDResistorResistorR3220ResistorResistorR7220ResistorResistorR8220ResistorResistorR9220D9LED-REDORG0100HLOOP:MOVP1,#55HLCALLTIME;调延时子程序TIMEMOVP1,#0AAHLCALLTIME;调延时子程序TIMESJMPLOOP;转移到LOOPEND开始55H送P1口延时2秒AAH送P1口延时2秒流水式彩灯程序流程图源程序与机器码:ORG0100HLOOP:MOVP1,#55HLCALLTIMEMOVP1,#0AAHLCALLTIMESJMPLOOPENDROM中的机器码0100H75H90H55H12H**H**H75H90HAAH12H**H**H010CH80Hrel转移的实质就是PC得到一个新的值:目标地址执行完本指令,希望PC=0100H学习方法及要求:在这个场景中,将会有三个角色出现:编程者、汇编程序及CPU。编程者写出如SJMPLOOP这样的指令,表达想要转移的意愿以及转向何处;汇编程序将指令汇编成机器码;CPU则依据对机器码的译码最终将目标地址赋给PC。要求:会写不同的转移指令,掌握各转移指令的含义及使用条件。了解转移指令的汇编过程。了解CPU对转移指令的执行过程。3.4.4控制转移类指令(17条)无条件转移指令(4条)空操作指令(1条)条件转移指令(8条)调用和返回指令3.4.4控制转移类指令(17条)3.4.4控制转移类指令(17条)无条件转移指令是当程序执行到该指令时,程序无条件的转移到指令所提供的地址处执行。无条件转移指令有长转移、短转移、相对转移和间接转移4条指令。AJMPaddr11LJMPaddr16SJMPrelJMP@A+DPTR1.无条件转移(4条)3.4.4控制转移类指令(17条)(1)长转移指令LJMPaddr16对于编程者:它是一条可以转向64K空间任一地址的转移。助记符后通常直接写目标行号。对与汇编程序:汇编后它有三个字节,操作码是02H,而其后的两个字节分别是目标地址的高、低字节。对与CPU:当它取得操作码02H后,紧跟其后获取的两个字节被送往PC,所以,本指令执行完,PC=目标地址。例如:ORG0000HLJMPMAIN;02H00H30HORG0030HMAIN:MOVR0,#83.4.4控制转移类指令(17条)(2)近转移指令AJMPaddr11对于编程者:它是一条可以转向2K空间某地址的转移。助记符后通常直接写目标行号。对与汇编程序:汇编后它有两个字节,操作码的是后五位是00001,而其余的11位来自目标地址的后11位,格式为(a10a9a800001)(a7~a0)。对与CPU:当它取得操作码,发现后五位是00001后,接着获取下一个字节的机器码,执行(PC)+2→(PC),addr11→(PC10-0)。程序计数器赋予新值-(PC15-11)不改变,低11位地址来自指令的标号地址。3.4.4控制转移类指令(17条)(3)短转移指令SJMPrel对于编程者:目标地址可以在这条指令的前128B到后127B之间。助记符后通常仍然直接写目标行号。对与汇编程序:汇编后它有两个字节,操作码是80H,而其余一个字节表明转移的相对偏移量,用rel表示。汇编时rel=目标地址-(源地址+2)对与CPU:当它取得操作码为80H后,紧跟着获取的一个字节rel被用来计算新的PC值。执行时新的PC=(PC)当前+2+rel=源地址+2+目标地址-(源地址+2)=目标地址3.4.4控制转移类指令(17条)补:指令系统的寻址方式相对寻址是以程序计数器PC的当前值(指读出该2字节或3字节的跳转指令后,PC指向的下条指令的地址)为基准,加上指令中给出的相对偏移量rel形成目标地址的寻址方式。该类寻址方式主要用于跳转指令。目的地址=转移指令所在的地址+转移指令的字节数+rel偏移量rel是一带符号的8位二进制数补码数范围是:–128B~+127B相对寻址54H程序存储区54HA2001H20HPC02HΣ2056HXX80H2056H2000H……②③①设指令SJMP54H的机器码80H54H存放在2000H处,当执行到该指令时,先从2000H和2001H单元取出指令,PC自动变为2002H;再把PC的内容与操作数54H相加,形成目标地址2056H,再送回PC,使得程序跳转到2056H单元继续执行。相对寻址补:指令系统的寻址方式偏移量rel是一带符号的8位二进制数补码数的说明:1.范围是:–128B~+127B2.目标地址与源地址的大小关系不定当目标地址大于源地址,则向下转移,rel为正数当目标地址小于源地址,则向上转移,rel为负数例如:在ROM区0100H地址单元80H55H(SJMPrel)当PC=0100H,取得机器码后,会根据公式进行计算:PC=(PC)当前+2+rel=0100H+2+55H=0157H,向下转移又如:若ROM区0100H地址单元80HF6H(rel是负数,为-0AH)当PC=0100H,取得机器码后,会根据公式进行计算:PC=(PC)当前+2+rel=0100H+2-0AH=00F8H,向上转移再如:若ROM区0100H地址单元80HFEH(rel是负数,为-2H)当PC=0100H,取得机器码后,会根据公式进行计算:PC=(PC)当前+2+rel=0100H+2-2H=0100H,原地踏步、等待指令经常写成:SJMP$3.4.4控制转移类指令(17条)在用汇编语言程序是,rel是由汇编程序在汇编过程中自动计算偏移地址,并且填入指令代码中;在手工汇编时,我们可用转移目的地址减转移指令所在源地址,再减转移指令字节数2得到偏移字节数rel。ORG0100HLOOP:MOVP1,#55HLCALLTIMEMOVP1,#0AAHLCALLTIMESJMPLOOPENDROM中的机器码0100H75H90H55H12H**H**H75H90HAAH12H**H**H010CH80Hrel3.4.4控制转移类指令(17条)rel=0100H-(010CH+2)=-0EH=F2H(4)间接转移指令JMP@A+DPTR这是一个转移指令。它的目标地址由操作数字段来描述。可以在ROM空间的64K内范围任意转移。当对DPTR赋值后,转移的目标地址还可以由A的内容决定。这条指令可代替众多的判别跳转指令,具有散转功能。执行完(PC)=(A)+(DPTR)执行JMP@A+DPTR后,会依A内容的不同转向不同的目标地址。3.4.4控制转移类指令(17条)例如:根据累加器A中命令键键值,设计命令键操作程序入口跳转表:CLRC;清进位RLCA;键值乘2MOVDPTR,#JPTAB;指向命令键跳转表首址JMP@A+DPTR;散转入命令键入口JPTAB:AJMPCCS0;双字节指令AJMPCCS1AJMPCCS2。。CCS0:CCS1:3.4.4控制转移类指令(17条)有条件转移指令共三类,8种,它们有如下共性:指令字面上会用助记符给出一个判决规则,如(A)=0等。CPU执行时会依据当前的条件作出真/假判断,是真--则转移;是假--则继续顺序执行。指令中最后一个操作数表明转移的目标地址,通常是标号地址。所有的有条件转移均为短转移。本指令前要有意识地构建判决条件。不同的指令其实就是以不同的助记符,给出不同的判决规则2.有条件转移指令(8条)3.4.4控制转移类指令(17条)判决规则真假新的目标地址顺序执行助记符给出操作数给出例如:JNZABC助记符给出(A)≠0的判决条件操作数给出目标地址为ABC执行到此句,若(A)=0,顺序执行;若(A)≠0,则转向ABCJZrel;判决规则(A)=0JNZrel;判决规则(A)≠0①条件转移指令(2条)3.4.4控制转移类指令(17条)CJNEOPR1,OPR2,rel;判决规则(OPR1)≠(OPR2)CJNEA,data,rel;A≠(data),(PC)+3+rel→(PC)CJNEA,#data,rel;A≠#data,(PC)+3+rel→(PC)CJNERn,#data,rel;(Rn)≠#data,(PC)+3+rel→PC)CJNE@Ri,#data,rel;((Rn))≠#data,(PC)+3+rel→(PC)说明:(1)字节与字节比较(2)比较不等转,否则顺序执行(3)影响Cy与减法相同,但不改变操作数(4)三字节指令,rel是偏移量②比较不相等转移(4条)3.4.4控制转移类指令(17条)③减1不为0转移(2条)DJNZRn,rel;(Rn)-1→(Rn),(Rn)≠0,(PC)+2+rel→(PC)DJNZdata,rel;(data)-1→(data),(data)≠0,(PC)+2+rel→(PC)例:延时子程序delay:MOVR7,#03HDJNZR7,$RETDJNZOPR,rel;判决规则:(OPR)-1≠03.4.4控制转移类指令(17条)3.调用和返回指令(4条)在程序设计中,有时因操作要求,需反复执行某段程序,于是引进了主程序和子程序的概念。子程序能被反复调用。这样可减少程序编写和调试的工作量。指令系统中一般都有主程序调用子程序的指令和从子程序返回主程序的指令。通常把具有一定功能的公用程序段作为子程序。子程序的入口标号可以成为子程序名(或子程序的入口地址),最后一条指令为返回主程序指令(RET)。3.4.4控制转移类指令(17条)长调用指令LCALLaddr16(子程序的入口地址)短调用指令ACALLaddrll(子程序的入口地址)子程序返回指令RET中断返回指令RETI上述指令的执行,最终都会令PC得到一个新值。3.4.4控制转移类指令(17条)4.空操作指令(1条)NOP这条指令除了使PC加1,消耗一个机器周期外,没有执行任何操作。可用于短时间的延时。3.4.4控制转移类指令(17条)3.4.5位操作指令(17条)位数据传送指令(2条)位修正指令(6条)逻辑运算指令(4条)位条件转移类指令(5条)位寻址空间在进行位操作时,进位标志位CY——布尔累加器(位累加器),简写成

1 / 35
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功