《第3章指令系统3.ppt》由会员分享,可在线阅读,更多相关《第3章指令系统3.ppt(61页珍藏版)》请在优知文库上搜索。
1、第三章第三章 指令系统及程序设计举例指令系统及程序设计举例3.3 89C513.3 89C51指令系统指令系统3.1 3.1 汇编语言汇编语言3.2 3.2 寻址方式寻址方式REVIEW:算术运算指令:算术运算指令(24条条)算术运算指令可以完成加、减、乘、除及加加算术运算指令可以完成加、减、乘、除及加加1和减和减1等运算。这类指令除等运算。这类指令除INC、DEC指令外,其它运算指令的目指令外,其它运算指令的目的操作数必是的操作数必是A。REVIEW:逻辑运算及移位指令逻辑运算及移位指令(24条条)例例1:从:从(30H)=X7X6X5X4X3X2X1X0中取出高中取出高5位,位,从从(31
2、H)=Y7Y6Y5Y4Y3Y2Y1Y0中取出低中取出低3位,拼装位,拼装后存入后存入40H,(40H)=Y2Y1Y0X7X6X5X4X3 ORG 0030HMOV A,30HSWAP A RL A MOV 40H,A ANL 40H,#00011111B MOV A,31H MOV B,20H MUL AB ANL A,#11100000B ORL 40H,AHERE:SJMP HERE 例例2:设设(A)=43H,(CY)=0,则则执行指令执行指令:RL A ;RLC A ;RR A ;RRC A ;结果为结果为:(A)=86H,(CY)=0 (A)=0CH,(CY)=1 (A)=06H,(
3、CY)=1 (A)=83H,(CY)=03.3.4 控制程序转移类指令控制程序转移类指令 通常情况下,程序的执行是顺序进行的,通常情况下,程序的执行是顺序进行的,但也可以根据需要但也可以根据需要改变程序的执行顺序改变程序的执行顺序,这种,这种情况称作情况称作程序转移程序转移。控制程序的转移要利用转移指令。控制程序的转移要利用转移指令。80C51的转移指令有的转移指令有无条件转移无条件转移、条件转移条件转移及及子程序调用与返回子程序调用与返回等。等。控制程序转移类指令控制程序转移类指令(17条条)一、无条件转移指令一、无条件转移指令(4条条)(1)短转移指令短转移指令 AJMP addr11 ;
4、PC(PC)+2,;PC100 addr11 n机器代码:机器代码:n2KB范围内的无条件跳转指令范围内的无条件跳转指令n转移目标地址:转移目标地址:例:例:若若AJMP指令地址指令地址(PC)=2300H。执行指令执行指令:AJMP 0FFH后后PC值?值?n(PC)(PC)+2=2302H,n(PC)100 00011111111 n(PC)150=0010000011111111B 20FFH(2)长转移指令长转移指令 LJMP add16;,add16 PC LJMP提供的是提供的是16位地址,因此程序可以转向位地址,因此程序可以转向64KB的程序存储器地址空间的任何单元的程序存储器地
5、址空间的任何单元。例:例:设(设(PC)=0123H,标号,标号JMPADR所指的所指的单元单元3456H。执行指令为。执行指令为 LJMP JMPADR结果结果是什么?是什么?n(PC)70 56H,n(PC)158 34H,执行结果为执行结果为(PC)=3456H所以,程序转向所以,程序转向3456H单元执行。单元执行。(3)相对转移(短转移)指令相对转移(短转移)指令 SJMP rel ;PC(PC)+2 ;PC(PC)+rel rel 是一个带符号的偏移字节数(是一个带符号的偏移字节数(2的补码),取值的补码),取值范围为范围为 127 128(00H7FH对应表示对应表示0 127,
6、80HFFH对应表示对应表示1281)。负数表示反)。负数表示反向转移,正数表示正向转移。向转移,正数表示正向转移。例:例:在(在(PC)=0100H地址单元有条地址单元有条“SJMP rel”指令,若指令,若rel=55H,执行该指令后,执行该指令后PC转向转向何处?若何处?若rel=F6H,执行该指令后,执行该指令后PC转向何处?转向何处?n(1)若若rel=55H(正数正数)(PC)+2PC,(PC)=0102H (PC)+relPC,(PC)=0157Hn(2)若若rel=F6H(负数负数)(PC)+2PC,(PC)=0102H (PC)+relPC,(PC)=00F8H v跳转的范围
7、不同。跳转的范围不同。短转移类指令:短转移类指令:AJMP AJMP addr11addr11 长转移类指令:长转移类指令:LJMP LJMP addr16addr16 相对转移指令:相对转移指令:SJMP SJMP relrelv指令构成不同。指令构成不同。AJMPAJMP、LJMPLJMP后跟的是后跟的是绝对地址绝对地址,而而SJMPSJMP后跟的是后跟的是相对地址相对地址。v指令长度不同指令长度不同v 原则上,所有用原则上,所有用SJMPSJMP或或AJMPAJMP的地方都可以用的地方都可以用 LJMPLJMP来替代。来替代。短转移、长转移、相对转移指令的区别短转移、长转移、相对转移指令
8、的区别(4)间接转移指令间接转移指令JMP A+DPTR ;(A)+(DPTR)PC 该指令具有散转功能,可以代替许多判别跳该指令具有散转功能,可以代替许多判别跳转指令。其转移地址由数据指针转指令。其转移地址由数据指针DPTR的的16位数位数和累加器和累加器A的的8位数进行无符号数相加形成,并位数进行无符号数相加形成,并直接装入直接装入PC。该指令执行时对标志位无影响。该指令执行时对标志位无影响。例:例:根据累加器根据累加器A中命令键键值,设计命令键操作中命令键键值,设计命令键操作程序入口跳转表:程序入口跳转表:CLR C ;清进位;清进位 RLC A ;键值乘;键值乘2 MOV DPTR,#
9、JPTAB ;指向命令键跳转表首址;指向命令键跳转表首址 JMP A+DPTR ;散转入命令键入口;散转入命令键入口JPTAB:AJMP CCS0 ;双字节指令;双字节指令 AJMP CCS1 AJMP CCS2二、条件转移指令二、条件转移指令(8条条)(1)累加器判零转移指令累加器判零转移指令JZ rel ;01100000相对地址(rel)若(A)=0,则 (PC)(PC)+2+rel 若(A)0,则(PC)(PC)+2若(A)0,则 (PC)(PC)+2+rel 若(A)0,则(PC)(PC)+2例:例:将外部数据将外部数据RAM的一个数据块传送到内部的一个数据块传送到内部数据数据RAM
10、,两者的首址分别为两者的首址分别为DATA1 和和 DATA2,遇到传送的数据为零时停止遇到传送的数据为零时停止。n MOV R0,DATA1 ;外部数据块首址送外部数据块首址送R0n MOV R1,DATA2 ;内部数据块首址送内部数据块首址送R1nLOOP1:MOVX A,R0 ;取外部取外部RAM数据入数据入AnHERE:JZ HERE ;数据为零则终止传送数据为零则终止传送n MOV R1,A ;数据传送至内部数据传送至内部RAM单元单元n INC R0 ;修改地址指针修改地址指针,n INC R1n SJMP LOOP1 ;循环取数循环取数(2)比较转移指令(比较转移指令(4条)条)
11、CJNE A,data,rel ;B4 data relCJNE A,direct,rel ;B5direct relCJNE Ri,data,rel ;B6B7data relCJNER Rn,data,rel ;B8Bfdata rel若目的操作数若目的操作数=源操作数源操作数,则则(PC)(PC)+3;若目的操作数若目的操作数源操作数源操作数,则则(PC)(PC)+3+rel,CY=0;若目的操作数若目的操作数源操作数源操作数,则则(PC)(PC)+3+rel,CY=1;例:例:分析下列程序段执行后结果。分析下列程序段执行后结果。MOV A,R0 CJNE A,#10H,L1 MOV R
12、1,#0 ;如R0=10H,则不转移R1=00H;AJMP L3L1:JC L2 ;如CY=1即 R010H,则转移 AJMP L3L2:MOV R1,#0FFHL3:SJMP L3因此最终结果是:本程序执行前,如果R0=10H,则R1=00H;如果R010H,则R1=0AAH;如果R010H,则R1=0FFH。(3)循环转移指令(循环转移指令(2条)条)nDJNZ direct,rel ;(direct)(direct)1 若(direct)=0,则(PC)(PC)+3 否则,(PC)(PC)+3+relnDJNZ Rn,rel ;(Rn)(Rn)1 若(Rn)=0,则(PC)(PC)+2
13、否则,(PC)(PC)+2+rel例例1 有一段程序如下:有一段程序如下:MOV 23H,#0AH CLR ALOOPX:ADD A,23H DJNZ 23H,LOOPX SJMP$该程序执行后的结果是什么?该程序执行后的结果是什么?(A)=10+9+8+7+6+5+4+3+2+1=37H例例2 将内部将内部RAM中从中从DATA单元开始的单元开始的 10 个无个无符号数相加符号数相加,相加结果送相加结果送SUM 单元保存。单元保存。(设相加设相加结果不超过结果不超过8位二进制数位二进制数)MOV R0,0AH ;给给 R0 置计数器初值置计数器初值MOV R1,DATA ;数据块首址送数据块
14、首址送R1CLR A ;A清零清零LOOP:ADD A,R1 ;加一个数加一个数 INC R1 ;修改地址修改地址,指向下一个数指向下一个数 DJNZ R0,LOOP ;R0 减减 1,不为零循环不为零循环 MOV SUM,A ;存存 10 个数相加和个数相加和三、子程序调用与返回三、子程序调用与返回(4条条)(1)调用指令调用指令LCALL addr16 ;(PC)(PC)+3 (SP)(SP)+1,(SP)(PC 70)(SP)(SP)+1,(SP)(PC 158)(PC)addr 150ACALLaddr11 ;(PC)(PC)+2 (SP)(SP)+1,(SP)(PC 70)(SP)(
15、SP)+1,(SP)(PC 158)(PC)100 addr11例例1:设(设(SP)=07H,标号标号“SUBRTN”所对应的所对应的程序存储器实际地址为程序存储器实际地址为0345H,在(,在(PC)=0123H处执行指令处执行指令ACALL SUBRTN,试分析,试分析指令执行过程。指令执行过程。解:解:执行结果:(执行结果:(PC)+2=0125H,压入堆栈,压入堆栈,(SP)+1=07H+1=08H单元压入单元压入25H,(SP)+1=08H+1=09H压入压入01H,PC转向标号转向标号SUBRTN所在指令,即:所在指令,即:(PC)=0345H例例2:设(设(SP)=07H,符号
16、地址,符号地址“SUBRTUN”指向程序存储器的指向程序存储器的5678H(PC)=0123H。从。从0123H处执行指令处执行指令 LCALL SUBRTUN,试分析,试分析指令执行过程。指令执行过程。解:解:执行结果:(执行结果:(PC)+3=0126H,压入堆栈,压入堆栈,(SP)+1=07H+1=08H单元压入单元压入26H,(SP)+1=08H+1=09H压入压入01H,PC转向标号转向标号SUBRTN所在指令,即:所在指令,即:(PC)=5678H(2)返回指令返回指令 返回指令共有两条返回指令共有两条:一条是对应一条是对应两条调用指令两条调用指令的子程序的子程序返回指令返回指令RET;另一条是对应从另一条是对应从中断服务程序中断服务程序的返回指令的返回指令RETI。RET ;(PC158)(SP),(SP)(SP)1 (PC70)(SP),(SP)(SP)1 RETI ;(PC158)(SP),(SP)(SP)1 (PC70)(SP),(SP)(SP)1注:RETI指令除了具有RET指令的功能实现程序返回外,还有对中断优先级状态触发器的清零。四、空操作四、空操作(1条条)