MCS-C51的指令系统.ppt_第1页
MCS-C51的指令系统.ppt_第2页
MCS-C51的指令系统.ppt_第3页
MCS-C51的指令系统.ppt_第4页
MCS-C51的指令系统.ppt_第5页
已阅读5页,还剩86页未读 继续免费阅读

下载本文档

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

文档简介

2019年12月5日星期四,1,单片机原理及应用,主讲:梁德胜联系方式:dsliang办公地点:教五楼408室,2019年12月5日星期四,2,常用的编程语言,1.机器语言机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合。机器语言具有灵活、直接执行和速度快等特点。用机器语言编写程序,编程人员要首先熟记所用计算机的全部指令代码和代码的涵义。手编程序时,程序员得自己处理每条指令和每一数据的存储分配和输入输出,还得记住编程过程中每步所使用的工作单元处在何种状态。而且,编出的程序全是些0和1的指令代码,直观性差,还容易出错。,2019年12月5日星期四,3,2.汇编语言为了克服机器语言难读、难编、难记和易出错的缺点,人们就用与代码指令实际含义相近的英文缩写词、字母和数字等符号来取代指令代码,于是就产生了汇编语言。所以说,汇编语言是一种用助记符表示的仍然面向机器的计算机语言。汇编语言亦称符号语言。汇编语言由于是采用了助记符号来编写程序,比用机器语言的二进制代码编程要方便些,在一定程度上简化了编程过程。汇编语言的特点是用符号代替了机器指令代码,而且助记符与指令代码一一对应,基本保留了机器语言的灵活性。使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序。汇编语言中由于使用了助记符号,计算机不能象用机器语言编写的程序一样直接识别和执行,必须通过预先放入计算机的“汇编程序“的加工和翻译,才能变成能够被计算机识别和处理的二进制代码程序。汇编语言像机器指令一样,是硬件操作的控制信息,因而仍然是面向机器的语言,使用起来还是比较繁琐费时,通用性也差。汇编语言是低级语言。但是,汇编语言用来编制系统软件和过程控制软件,其目标程序占用内存空间少,运行速度快,有着高级语言不可替代的用途。,2019年12月5日星期四,4,3.高级语言不论是机器语言还是汇编语言都是面向硬件的具体操作的,语言对机器的过分依赖,要求使用者必须对硬件结构及其工作原理都十分熟悉。高级语言是面向用户的语言。无论何种机型的计算机,只要配备上相应的高级语言的编译或解释程序,则用该高级语言编写的程序就可以通用。计算机并不能直接地接受和执行用高级语言编写的源程序,源程序在输入计算机时,通过“翻译程序”翻译成机器语言形式的目标程序,计算机才能识别和执行。每一种高级语言,都有自己规定的专用符号、英文单词、语法规则和语句结构。高级语言与自然语言更接近,而与硬件功能相分离,便于广大用户掌握和使用。高级语言的通用性强,兼容性好,便于移植。,2019年12月5日星期四,5,第3章MCS-51指令系统,3.1指令格式及常用符号3.2MCS-51的寻址方式3.3数据传送类指令(29条)3.4算术运算类指令(24条)3.5逻辑运算与循环类指令(24条)3.6位操作类指令(17条)3.7控制转移类指令(17条),2019年12月5日星期四,6,3.1指令格式及常用符号,3.1.1机器指令的编码格式一、单字节指令1.8位编码仅为操作码:如:INCA该指令的编码为:00000100B,其十六进制表示为04H,累加器A隐含在操作码中。指令的功能是累加器A的内容加1。注意:在指令中用“A”表示累加器,而用“ACC”表示累加器对应的地址(E0H)。,指令要指明操作和操作对象,2019年12月5日星期四,7,28位编码含有操作码和寄存器编码高5位为操作码,低3位为存放操作数的寄存器编码。如:MOVA,R0编码为11101000B,其十六进制表示为E8H(低3位000为寄存器R0的编码)。功能是将当前工作寄存器R0中的数据传送到累加器A中。,如何知道是哪一组寄存器?,2019年12月5日星期四,8,二、双字节指令第一字节表示操作码,第二个字节表示参与操作的数据或数据存放的地址。如:MOVA,#50H编码为01110100B,01010000B。其十六进制表示为74H,50H。功能是将立即数“50H”传送到累加器A中。,注意:指令中带#的是立即数,不带#的是地址,50H是存储在程序区还是数据区?,2019年12月5日星期四,9,三、三字节指令指令的第一字节表示该指令的操作码,后两个字节表示参与操作的数据或数据存放的地址。如:MOV20H,#50H编码为01110101B,00100000B,01010000B。其十六进制表示为75H,20H,50H。功能是将立即数“50H”传送到内部RAM的20H单元中。,如何知道是传输到内部RAM中?,2019年12月5日星期四,10,3.1.2符号指令的格式一般格式为:操作助记符目的操作数,源操作数;注释多数指令为两操作数指令;当指令操作数隐含在操作助记符中时,在形式上这种指令无操作数;另有一些指令为单操作数指令或三操作数指令。指令的一般格式中使用了可选择符号“”,包含的内容因指令的不同可以有或无。在两个操作数的指令中,通常目的操作数写在左边,源操作数写在右边。,2019年12月5日星期四,11,如:指令ANLA,40H功能是将立即数“40H”同累加器A中的数进行“与”操作,结果送回累加器。ANL为“与”操作的助记符,立即数“40H”为源操作数,累加器A为目的操作数。注:在指令中,多数情况下累加器用“A”表示,仅在直接寻址方式中,用“ACC”表示累加器在SFR区的具体地址E0H。试比较,指令MOVA,30H的机器码为74H、30H;而指令MOVACC,30H的机器码为75H、E0H、30H。,两个指令的执行效率是不一样的前一个为单周期指令而后一个为双周期指令。,2019年12月5日星期四,12,3.1.3符号指令及其注释中常用的符号Rn(n=07)-当前选中的工作寄存器组中的寄存器R0R7之一;Ri(i=0,1)-当前选中的工作寄存器组中的寄存器R0或R1;-间址寄存器前缀;#data-8位立即数;#data16-16位立即数;direct-片内低128个RAM单元地址及SFR地址(可用符号名称表示),2019年12月5日星期四,13,addr11-11位目的地址;addr16-16位目的地址;rel-补码形式表示的8位地址偏移量,值在128127范围内;bit-片内RAM位地址、SFR的位地址(可用符号名称表示);/-位操作数的取反操作前缀;()-表示地址单元或寄存器中的内容;()-表示以单元或寄存器内容为地址间接寻址单元的内容;-将箭头右边的内容送入箭头左边的单元中。,2019年12月5日星期四,14,3.2MCS-51的寻址方式,寻址方式是寻找操作数或指令的地址的方式。寻址方式包含两方面内容:一是操作数的寻址,二是指令地址的寻址(如转移指令、调用指令)。寻址方式有七种。即:寄存器寻址、直接寻址、寄存器间接寻址、立即寻址、基址寄存器加变址寄存器变址寻址、相对寻址和位寻址对于两操作数指令,源操作数有寻址方式,目的操作数也有寻址方式。若不特别声明,我们后面提到的寻址方式均指源操作数的寻址方式。,2019年12月5日星期四,15,2019年12月5日星期四,16,操作数存放在寄存器中,指令中直接给出该寄存器名称的寻址方式称为寄存器寻址。采用寄存器寻址可以获得较高的传送和运算速度。寄存器可以是:R0R7;累加器A(注:使用符号ACC表示累加器时属于直接寻址);寄存器B(以A、B寄存器对形式出现);数据指针DPTR。,3.2.1寄存器寻址,如:MOVA,R0,2019年12月5日星期四,17,指令操作码之后的字节存放的是操作数的地址,操作数本身存放在该地址指示的存储单元中的寻址方式称为直接寻址。在直接寻址方式中的SFR经常采用符号形式表示。寻址空间为:片内RAM低128字节(以地址形式表示);SFR(以地址或SFR的符号形式表示)。,3.2.2直接寻址,如:MOVA,50H,注:直接寻址是特殊功能寄存器唯一的访问方式,2019年12月5日星期四,18,寄存器中的内容为地址,从该地址去取操作数的寻址方式称为寄存器间接寻址。寄存器间接寻址的存储空间为片内RAM或片外RAM。片内RAM的数据传送采用“MOV”类指令,间接寻址寄存器采用寄存器R0或R1(堆栈操作时采用SP)。片外RAM的数据传送采用“MOVX”类指令,这时间接寻址寄存器有两种选择,一是采用R0和R1作间址寄存器,这时R0或R1提供低8位地址(由P2口提供高8位地址);二是采用DPTR作为间址寄存器。,3.2.3寄存器间接寻址,注意:访问片内片外RAM的MOV指令不同,2019年12月5日星期四,19,寄存器间接寻址对应的空间为:片内RAM(采用R0,R1或SP);片外RAM(采用R0,R1或DPTR)。,如:MOVA,R0,2019年12月5日星期四,20,指令编码中直接给出操作数的寻址方式称为立即寻址。在这种寻址方式中,紧跟在操作码之后的操作数称为立即数。立即数可以为一个字节,也可以是两个字节,并要用符号“”来标识。由于立即数是一个常数,所以只能作为源操作数。立即寻址所对应的寻址空间为:ROM,3.2.4立即寻址,如:MOVA,50H,2019年12月5日星期四,21,以一个基地址加上一个偏移量地址形成操作数地址的寻址方式称为变址寻址。在这种寻址方式中,以数据指针DPTR或程序计数器PC作为基址寄存器,累加器A作为偏移量寄存器,基址寄存器的内容与偏移量寄存器的内容之和作为操作数地址。变址寻址所对应的寻址空间为:ROM,3.2.5变址寻址,如:MOVCA,A+DPTR,2019年12月5日星期四,22,相对寻址是以程序计数器PC的当前值(指读出该2字节或3字节的跳转指令后,PC指向的下条指令的地址)为基准,加上指令中给出的相对偏移量rel形成目标地址的寻址方式。rel是一个带符号的8位二进制数,取值范围是128127,以补码形式置于操作码之后存放。,3.2.6相对寻址,如:JCrel;rel75H,2019年12月5日星期四,23,对位地址中的内容进行操作的寻址方式称为位寻址。采用位寻址指令的操作数是8位二进制数中的某一位。指令中给出的是位地址。位寻址方式实质属于位的直接寻址。寻址空间为:片内RAM的20H2FH单元中的128可寻址位;SFR的可寻址位。习惯上,特殊功能寄存器的寻址位常用符号位地址表示。如:CLRACC.0MOV30H,C,3.2.7位寻址,注意:如何来区分是位地址还是字节地址是通过指令来判断,2019年12月5日星期四,24,3.3数据传送类指令(29条),传送类指令占有较大的比重。数据传送是进行数据处理的最基本的操作,这类指令一般不影响标志寄存器PSW的状态。传送类指令可以分成两大类。一是采用MOV操作符,称为一般传送指令;二是采用非MOV操作符,称为特殊传送指令,如:MOVC、MOVX、PUSH、POP、XCH、XCHD及SWAP。,2019年12月5日星期四,25,3.3.1一般传送指令,图31MCS-51传送指令示意图,2019年12月5日星期四,26,3.3.1一般传送指令,2019年12月5日星期四,27,一、16位传送这条指令的功能是将源操作数data16(通常是地址常数)送入目的操作数DPTR中。源操作数的寻址方式为立即寻址。例如:执行指令MOVDPTR,#1234H后(DPH)=12H,(DPL)=34H。,2019年12月5日星期四,28,二、8位传送,在5种源字节中,只有data不能用作目的字节。所以可以用4种目的字节为基础构造4类指令。相应的源字节选择依据是:源字节与目的字节不相同;寄存器寻址与寄存器间接寻址间不相互传送。,指的是工作寄存器:寄存器寻址与寄存器间接寻址间及其本身之间都不相互传送,2019年12月5日星期四,29,1以A为目的,这组指令的功能是把源字节送入累加器中。源字节的寻址方式分别为直接寻址、寄存器间接寻址、寄存器寻址和立即寻址四种基本寻址方式。例:若(R1)=20H,(20H)=55H,执行指令MOVA,R1后(A)=55H。,2019年12月5日星期四,30,2以Rn为目的,这组指令的功能是把源字节送入寄存器Rn中。源字节的寻址方式分别为立即寻址、直接寻址和寄存器寻址(由于目的字节为工作寄存器,所以源字节不能是工作寄存器及其间址方式寻址)。例:若(50H)=40H,执行指令MOVR6,50H后,(R6)=40H,2019年12月5日星期四,31,3以direct为目的,这组指令的功能是把源字节送入direct中。源字节的寻址方式分别为立即寻址、直接寻址、寄存器间接寻址和寄存器寻址。例:若(R1)=50H,(50H)=18H,执行指令MOV40H,R1后(40H)=18H,2019年12月5日星期四,32,4以Ri为目的,这组指令的功能是把源字节送入Ri内容为地址的单元,源字节寻址方式为立即寻址、直接寻址和寄存器寻址(因目的字节采用寄存器间接寻址,故源字节不能是寄存器及其间址寻址)。例:若(R1)=30H,(A)=20H,执行指令MOVR1,A后,(30H)=20H。,2019年12月5日星期四,33,3.3.2特殊传送指令,特殊传送指令的操作符为:MOVC、MOVX、PUSH、POP、XCH、XCHD和SWAP。功能分别为:ROM查表、外部RAM读写、堆栈操作和交换指令,2019年12月5日星期四,34,2019年12月5日星期四,35,一、ROM查表1DPTR内容为基址MOVCA,A+DPTR;A(A)+(DPTR)该指令首先执行16位无符号数加法,将获得的基址与变址之和作为16位的程序存储器地址,然后将该地址单元的内容传送到累加器A。指令执行后DPTR的内容不变。2PC内容为基址MOVCA,A+PC;A(A)+(PC)取出该单字节指令后PC的内容增1,以增1后的当前值去执行16位无符号数加法,将获得的基址与变址之和作为16位的程序存储器地址。然后将该地址单元的内容传送到累加器A。指令执行后PC的内容不变。,2019年12月5日星期四,36,二、读写片外RAM1读片外RAMMOVXA,DPTR;A(DPTR)MOVXA,Ri;A(Ri)第一条指令以16位DPTR为间址寄存器读片外RAM,可以寻址整个64K字节的片外RAM空间。指令执行时,在DPH中的高8位地址由P2口输出,在DPL中的低8位地址由P0口分时输出,并由ALE信号锁存在地址锁存器中。第二条指令以R0或R1为间址寄存器,也可以读整个64K字节的片外RAM空间。指令执行时,低8位地址在R0或R1中由P0口分时输出,ALE信号将地址信息锁存在地址锁存器中(高8位地址由P2口提供)。读片外RAM的MOVX操作,使P3.7引脚输出的信号选通片外RAM单元,相应单元的数据从P0口读入累加器中。,2019年12月5日星期四,37,2写片外RAMMOVXDPTR,A;(DPTR)(A)MOVXRi,A;(Ri)(A)第一条指令以16位DPTR为间址寄存器写外部RAM,可以寻址整个64K字节的片外RAM空间。指令执行时,在DPH中高8位地址由P2口输出,在DPL中的低8位地址,由P0口分时输出,并由ALE信号锁存在地址锁存器中。第二条指令以R0或R1为间址寄存器,也可以写整个64K字节的片外RAM空间。指令执行时,低8位地址在R0或R1中由P0口分时输出,ALE信号将地址信息锁存在地址锁存器中(高8位地址由P2口提供)。写片外RAM的“MOVX”操作,使P3.6引脚的信号有效,累加器A的内容从P0口输出并写入选通的相应片外RAM单元。注:当片外扩展的I/O端口映射为片外RAM地址时,也要利用这4条指令进行数据的输入输出。,2019年12月5日星期四,38,三、堆栈操作堆栈是在内部RAM中按“后进先出”的规则组织的一片存储区。此区的一端固定,称为栈底;另一端是活动的,称为栈顶。栈顶的位置(地址)由栈指针SP指示(即SP的内容是栈顶的地址)。在80C51中,堆栈的生长方向是向上的(地址增大)。系统复位时,SP的内容为07H。通常用户应在系统初始化时对SP重新设置。SP的值越小,堆栈的深度越深。PUSHdirect;SPSP)1,(SP)(direct)POPdirect;direct(SP),SP(SP)1例:若(SP)=07H,(40H)=88H,执行指令PUSH40H后,(SP)=08H,(08H)=88H。,2019年12月5日星期四,39,四、数据交换对于单一的MOV类指令,传送通常是单向的,即数据是从一处(源)到另一处(目的)的拷贝。而交换类指令完成的传送是双向的,是两字节间或两半字节间的双向交换。1字节交换,例:若(R0)=80H,(A)=20H。执行指令XCHA,R0后,(A)=80H,(R0)=20H。,2019年12月5日星期四,40,2半字节交换,XCHD指令的功能是间址操作数的低半字节与A的低半字节内容互换。SWAP指令的功能是累加器的高低4位互换。例:若(R0)30H,(30H)67H,(A)20H。执行指令XCHDA,R0指令后(A)27H,(30H)60H。若(A)30H,执行指令SWAPA后,(A)03H。,2019年12月5日星期四,41,3.4算术运算类指令(24条),算术运算指令可以完成加、减、乘、除及加1和减1等运算。这类指令多数以A为源操作数之一,同时又使A为目的操作数。,2019年12月5日星期四,42,2019年12月5日星期四,43,进位(借位)标志CY为无符号整数的多字节加法、减法、移位等操作提供了方便;溢出标志OV可方便的控制补码运算;辅助进位标志AC用于BCD码运算。算术运算操作将影响PSW中的OV、CY、AC和P等。,2019年12月5日星期四,44,3.4.1加法,一、不带进位加,CY:和的D7位有进位时,(CY)=1;否则,(CY)=0。AC:和的D3位有进位时,(AC)=1;否则,(AC)=0。OV:和的D7、D6位只有一个有进位时,(OV)=1;溢出表示运算的结果超出了数值所允许的范围。如:两个正数相加结果为负数或两个负数相加结果为正数时属于错误结果,此时(OV)=1。P:累加器ACC中“1”的个数为奇数时,(P)=1;为偶数时,(P)=0。,11001100+01001000,100010100,2019年12月5日星期四,45,例若(A)=84H,(30H)=8DH,执行指令ADDA,30H之后,由于:,即:(A)=11H,(CY)=1,(AC)=1,(OV)=1(D7有进位,D6无进位),(P)=0。,2019年12月5日星期四,46,二、带进位加,指令的功能是把源操作数与累加器A的内容相加再与进位标志CY的值相加,结果送入目的操作数A中。加的进位标志CY的值是在该指令执行之前已经存在的进位标志的值,而不是执行该指令过程中产生的进位。,2019年12月5日星期四,47,三、增1,指令的功能是把源操作数的内容加1,结果再送回原单元。这些指令仅INCA影响P标志。其余指令都不影响标志位的状态。,2019年12月5日星期四,48,二十进制编码BCD码BCD(Binary-CodedDecimal)码又称为“二十进制编码”,专门解决用二进制数表示十进数的问题。最常用的是8421编码,其方法是用4位二进制数表示1位十进制数,自左至右每一位对应的位权是8、4、2、1。1压缩BCD码压缩BCD码的每一位用4位二进制表示,00001001表示09,一个字节表示两位十进制数。例如:二进制数1000,1001B,采用压缩BCD码表示为十进制数89D。2非压缩BCD码非压缩BCD码用一个字节表示一位十进制数,高4位总是0000,低4位的00001001表示09。例如:十进制数89D,采用非压缩BCD码表示为二进制数是:0000100000001001B,2019年12月5日星期四,49,四、十进制调整DAA指令的功能是对累加器A中刚进行的两个BCD码的加法的结果进行十进制调整。两个压缩的BCD码按二进制相加后,必须经过调整方能得到正确的压缩BCD码的和。调整要完成的任务是:(1)当累加器A中的低4位数出现了非BCD码(10101111)或低4位产生进位(AC=1),则应在低4位加6调整,以产生低4位正确的BCD结果。(2)当累加器A中的高4位数出现了非BCD码(10101111)或高4位产生进位(CY=1),则应在高4位加6调整,以产生高4位正确的BCD结果。十进制调整指令执行后,PSW中的CY表示结果的百位值。,2019年12月5日星期四,50,例若(A)01010110B,表示的BCD码为(56)BCD(R2)01100111B,表示的BCD码为(67)BCD,(CY)0。执行以下指令:ADDA,R2DAA得到:(A)00100011B,即(23)BCD,且(CY)1,即,结果为BCD数123。应该注意,DA指令不能对减法进行十进制调整。,2019年12月5日星期四,51,3.4.2减法,一、带借位减,CY:差的位7需借位时,(CY)=1;否则,(CY)=0。AC:差的位3需借位时,(AC)=1;否则,(AC)=0。OV:若位6有借位而位7无借位或位7有借位而位6无借位时,(OV)=1。注意:如要用此组指令完成不带借位减法,只需先清CY为0。第一次进行减法时CY应清零,2019年12月5日星期四,52,例若(A)=C9H,(R2)=54H,(CY)=1,执行指令SUBBA,R2之后,由于:,即:(A)=74H,(CY)=0,(AC)=0,(OV)=1(位6有借位,位7无借位),(P)=0。,2019年12月5日星期四,53,二、减1,这组指令的功能是把操作数的内容减1,结果再送回原单元。这组指令仅DECA影响P标志。其余指令都不影响标志位的状态。,2019年12月5日星期四,54,3.4.3乘法,MULAB;累加器A与B寄存器相乘该指令的功能是将累加器A与寄存器B中的无符号8位二进制数相乘,乘积的低8位留在累加器A中,高8位存放在寄存器B中。当乘积大于FFH时,溢出标志位(OV)=1。而标志CY总是被清0。例若(A)=50H,(B)=A0H,执行指令MULAB之后,(A)=00H,(B)=32H,(OV)=1,(CY)=0。,2019年12月5日星期四,55,3.4.4除法,DIVAB;累加器A除以寄存器B该指令的功能是将累加器A中的无符号8位二进制数除以寄存器B中的无符号8位二进制数,商的整数部分存放在累加器A中,余数部分存放在寄存器B中。当除数为0时,则结果的A和B的内容不定,且溢出标志位(OV)=1。而标志CY总是被清0。例若(A)=FBH(251),(B)=12H(18),执行指令DIVAB之后,(A)=0DH,(B)=11H,(OV)=0,(CY)=0。,2019年12月5日星期四,56,MOV23H,#30HMOV12H,#34HMOVR0,#23HMOVR7,#22HMOVR1,#12HMOVA,R0MOV34H,R1,(23H)=30H(12H)=34H(R0)=23H(R7)=22H(R1)=12H(A)=30H(34H)=34H,执行程序前sp=07H,2019年12月5日星期四,57,MOV45H,34HMOVDPTR,#6712HMOV12H,DPHMOVR0,DPLMOVA,R0PUSH12HPUSH45HPOP60HPOP70H,(45H)=34H(DPTR)=6712H(12H)=67H(R0)=12H(A)=67H(08H)=67H(09H)=34H(60H)=34H(70H)=67H(12H)=67H(45H)=34H,2019年12月5日星期四,58,3.5逻辑运算与循环类指令(24条),逻辑运算指令可以完成与、或、异或、清0和取反操作,当以累加器A为目的操作数时,对P标志有影响;循环指令是对累加器A的循环移位操作,包括左、右方向以及带与不带进位位等移位方式,移位操作时,带进位的循环移位对CY和P标志有影响;累加器清0操作对P标志有影响。,2019年12月5日星期四,59,2019年12月5日星期四,60,2019年12月5日星期四,61,3.5.1逻辑与,前2条指令的功能是把源操作数与直接地址指示的单元内容相与,结果送入直接地址指示的单元。后4条指令的功能是把源操作数与累加器A的内容相与,结果送入累加器A中。例若(A)=C3H,(R0)=AAH,执行指令ANLA,R0之后,(A)=82H。,2019年12月5日星期四,62,前2条指令的功能是把源操作数与直接地址指示的单元内容相或,结果送入直接地址指示的单元。后4条指令的功能是把源操作数与累加器A的内容相或,结果送入累加器A中。例若(A)=C3H,(R0)=55H,执行指令ORLA,R0之后,(A)=D7H。,3.5.2逻辑或,2019年12月5日星期四,63,3.5.3逻辑异或,前2条指令的功能是把源操作数与直接地址指示的单元内容异或,结果送入直接地址指示的单元。后4条指令的功能是把源操作数与累加器A的内容异或,结果送入累加器A中。例若(A)=C3H,(R0)=AAH,执行指令XRLA,R0之后,(A)=69H。,2019年12月5日星期四,64,3.5.4累加器清0和取反,;A0;A,这两条指令的功能分别是把累加器A的内容清0和取反,结果仍在A中。例若(A)=A5H,执行指令CLRA之后,(A)=00H。,2019年12月5日星期四,65,3.5.5累加器循环移位,2019年12月5日星期四,66,有时“累加器A内容乘2”的任务可以利用指令RLCA方便地完成。例:若(A)=BDH=10111101B,(CY)0。执行指令RLCA后,(CY)=1,(A)=01111010B=7AH,(CY)1。结果为:17AH(378)2BDH(189)。,2019年12月5日星期四,67,3.6位操作类指令(17条),位操作又称布尔操作,它是以位为单位进行的各种操作。位操作指令中的位地址有4种表示形式:直接地址方式(如,0D5H);点操作符方式(如,0D0H.5、PSW.5等);位名称方式(如,F0);伪指令定义方式(如,MYFLAGBITF0)。以上几种形式表示的都是PSW中的位5。与字节操作指令中累加器ACC用字符“A”表示类似的是,在位操作指令中,位累加器要用字符“C”表示(注:在位操作指令中CY与具体的直接位地址D7H对应)。,2019年12月5日星期四,68,1,1,2019年12月5日星期四,69,MOVbit,C;bit(CY)MOVC,bit;CY(bit)这两条指令可以实现指定位地址中的内容与位累加器CY的内容的相互传送。例若(CY)=1,(P3)=11000101B,(P1)=00110101B。执行以下指令:MOVP1.3,CMOVC,P3.3MOVP1.2,C结果为:(CY)=0,P3的内容未变,P1的内容变为00111001B。,3.6.1位传送,2019年12月5日星期四,70,一、位清0这两条指令可以实现位地址内容和位累加器内容的清0。例若(P1)=10011101B。执行指令CLRP1.3后,结果为:(P1)=10010101B。,3.6.2位状态设置,2019年12月5日星期四,71,二、位置位这两条指令可以实现地址内容和位累加器内容的置位。例若(P1)=10011100B。执行指令SETBP1.0后,(P1)10011101B。,2019年12月5日星期四,72,一、位逻辑“与”这两条指令可以实现位地址单元内容或取反后的值与位累加器的内容“与”操作,操作的结果送位累加器C。例若(P1)=10011100B,(CY)1。执行指令ANLC,P1.0后,结果为:P1内容不变,而(CY)0。,3.6.3位逻辑运算,2019年12月5日星期四,73,二、位逻辑“或”这两条指令可以实现位地址单元内容或取反后的值与位累加器的内容“或”操作,操作的结果送位累加器C。,2019年12月5日星期四,74,三、位取反这两条指令可以实现位地址单元内容和位累加器内容的取反。,2019年12月5日星期四,75,一、判CY转移这两条指令的功能是对进位标志位CY进行检测,当(CY)=1(第一条指令)或(CY)=0(第二条指令),程序转向PC当前值与rel之和的目标地址去执行,否则程序将顺序执行。,3.6.4位判跳(条件转移),2019年12月5日星期四,76,二、判bit转移这三条指令的功能是对指定位bit进行检测,当(bit)=1(第一和第二条指令)或(bit)=0(第三条指令),程序转向PC当前值与rel之和的目标地址去执行,否则程序将顺序执行。对于第二条指令,当条件满足时(指定位为1),还具有将该指定位清0的功能。,2019年12月5日星期四,77,3.7控制转移类指令(17条),通常情况下,程序的执行是顺序进行的,但也可以根据需要改变程序的执行顺序,这种情况称作程序转移。控制程序的转移要利用转移指令。8051的转移指令有无条件转移、条件转移及子程序调用与返回等。,2019年12月5日星期四,78,2019年12月5日星期四,79,一、短跳转AJMPaddr11;PC(PC)+2,PC100addr11该指令执行时,先将PC的内容加2(这时PC指向的是AJMP的下一条指令),然后把指令中11位地址码传送到PC100,而PC1511保持原内容不变。在目标地址的11位中,前3位为页地址,后8位为页内地址(每页含256个单元)。当前PC的高5位(即下条指令的存储地址的高5位)可以确定32个2KB段之一。所以,AJMP指令的转移范围为包含AJMP下条指令在内的2KB区间。,3.7.1无条件转移,2019年12月5日星期四,80,2019年12月5日星期四,81,二、长跳转LJMPaddr16;PC(PC)+3,PCaddr16第一字节为操作码,该指令执行时,将指令的第二、三字节地址码分别装入指令计数器PC的高8位和低8位中,程序无条件地转移到指定的目标地址去执行。LJMP提供的是16位地址,因此程序可以转向64KB的程序存储器地址空间的任何单元。例若标号“NEWADD”表示转移目标地址1234H。执行指令LJMPNEWADD时,两字节的目标地址将装入PC中,使程序转向目标地址1234H处运行。,2019年12月5日星期四,82,三、相对转移SJMPrel;PC(PC)+2,PC(PC)+rel第一字节为操作码,第二字节为相对偏移量rel,rel是一个带符号的偏移字节数(2的补码),取值范围为127128。负数表示反向转移,正数表示正向转移。需要指出的是:用汇编语言编程时,指令中的相对地址往往用想转移去的地址标号(符号地址)表示,汇编程序在汇编过程中自动计算偏移地址,并填入指令代码中。在手工汇编时,可用转移目标地址减转移指令所在的源地址,再减转移指令字节数2得到偏移字节数rel。例若标号“NEWADD”表示转移目标地址0123H,PC的当前值为0100H。执行指令SJMPNEWADD后,程序将转向0123H处执行(此时rel=0123H(01002)=21H)。,2019年12月5日星期四,83,四、散转移JMPA+DPTR;PC(PC)+1,PC(A)+(DPTR)该指令具有散转功能,可以代替许多判别跳转指令。其转移地址由数据指针DPTR的16位数和累加器A的8位数进行无符号数相加形成,并直接装入PC。该指令执行时对标志位无影响。例已知累加器A中存放有待处理命令编号03,程序存储器存放有起始地址为PMTB的3字节

温馨提示

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

评论

0/150

提交评论