第3章指令系统3.ppt
《第3章指令系统3.ppt》由会员分享,可在线阅读,更多相关《第3章指令系统3.ppt(61页珍藏版)》请在三一文库上搜索。
1、第三章 指令系统及程序设计举例,3.3 89C51指令系统,3.1 汇编语言,3.2 寻址方式,REVIEW:算术运算指令(24条),算术运算指令可以完成加、减、乘、除及加加1和减1等运算。这类指令除INC、DEC指令外,其它运算指令的目的操作数必是A。,REVIEW:逻辑运算及移位指令(24条),例1:从(30H)=X7X6X5X4X3X2X1X0中取出高5位,从(31H)=Y7Y6Y5Y4Y3Y2Y1Y0中取出低3位,拼装后存入40H,(40H)=Y2Y1Y0X7X6X5X4X3,ORG 0030H MOV A, 30H SWAP A RL A MOV 40H, A ANL 40H, #0
2、0011111B,MOV A, 31H MOV B, 20H MUL AB ANL A, #11100000B ORL 40H, A HERE: 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, (CY)=1 (A)=83H, (CY)=0,3.3.4 控制程序转移类指令,通常情况下,程序的执行是顺序进行的,但也可以根据需要改变程序的执行顺序,这种情况称作程序转移。,控制程序的转移要利用转移指令。80C51的转移指令
3、有无条件转移、条件转移及子程序调用与返回等。,控制程序转移类指令(17条),一、无条件转移指令 (4条),(1)短转移指令,AJMP addr11 ; PC (PC)+ 2, ; PC100 addr11 机器代码: 2KB范围内的无条件跳转指令 转移目标地址:,例:若AJMP指令地址(PC)=2300H。 执行指令: AJMP 0FFH后PC值?,(PC) (PC)+2=2302H, (PC)100 00011111111 (PC)150 =0010000011111111B 20FFH,(2) 长转移指令,LJMP提供的是16位地址,因此程序可以转向64KB的程序存储器地址空间的任何单元。
4、,例:设(PC)= 0123H,标号JMPADR所指的单元3456H。执行指令为 LJMP JMPADR结果是什么?,(PC)70 56H, (PC)158 34H, 执行结果为 (PC)=3456H 所以,程序转向3456H单元执行。,(3) 相对转移(短转移)指令,SJMP rel ;PC (PC)+ 2 ;PC (PC)+ rel rel 是一个带符号的偏移字节数(2的补码),取值范围为 127 128(00H7FH对应表示0 127,80HFFH对应表示1281)。负数表示反向转移,正数表示正向转移。,例:在(PC)=0100H地址单元有条“SJMP rel”指令,若rel=55H,执
5、行该指令后PC转向何处?若rel=F6H ,执行该指令后PC转向何处?,(1) 若rel=55H(正数) (PC)+2PC,(PC)=0102H (PC)+relPC,(PC)=0157H (2) 若rel=F6H(负数) (PC)+2PC,(PC)=0102H (PC)+relPC,(PC)=00F8H,跳转的范围不同。,短转移类指令:AJMP addr11 长转移类指令:LJMP addr16 相对转移指令:SJMP rel,指令构成不同。 AJMP、LJMP后跟的是绝对地址, 而SJMP后跟的是相对地址。,指令长度不同 原则上,所有用SJMP或AJMP的地方都可以用 LJMP来替代。,短
6、转移、长转移、相对转移指令的区别,(4) 间接转移指令,JMP A+DPTR ;(A)+(DPTR) PC,该指令具有散转功能,可以代替许多判别跳转指令。其转移地址由数据指针DPTR的16位数和累加器A的8位数进行无符号数相加形成,并直接装入PC。该指令执行时对标志位无影响。,例:根据累加器A中命令键键值,设计命令键操作程序入口跳转表: CLR C ;清进位 RLC A ;键值乘2 MOV DPTR,#JPTAB ;指向命令键跳转表首址 JMP A+DPTR ;散转入命令键入口 JPTAB:AJMP CCS0 ;双字节指令 AJMP CCS1 AJMP CCS2,二、条件转移指令 (8条),(
7、1)累加器判零转移指令,若 (A)=0, 则 (PC) (PC)+2+rel 若 (A)0, 则 (PC) (PC)+2,若 (A) 0, 则 (PC) (PC)+2+rel 若 (A)0, 则 (PC) (PC)+2,例:将外部数据RAM的一个数据块传送到内部数据RAM, 两者的首址分别为DATA1 和 DATA2, 遇到传送的数据为零时停止。,MOV R0, DATA1 ; 外部数据块首址送R0 MOV R1, DATA2 ; 内部数据块首址送R1 LOOP1:MOVX A, R0 ; 取外部RAM数据入A HERE:JZ HERE ; 数据为零则终止传送 MOV R1, A ; 数据传送
8、至内部RAM单元 INC R0 ; 修改地址指针, INC R1 SJMP LOOP1 ; 循环取数,(2)比较转移指令(4条),CJNE A, data , rel ; B4 data rel CJNE A, direct, rel ; B5direct rel CJNE Ri, data, rel ; B6B7data rel CJNER Rn, data, rel ; B8Bfdata rel,若目的操作数=源操作数, 则 (PC) (PC)+3 ; 若目的操作数源操作数, 则 (PC) (PC)+3+rel, CY=0; 若目的操作数源操作数, 则 (PC) (PC)+3+rel, C
9、Y=1;,比较转移指令操作示意图,例:分析下列程序段执行后结果。,MOV A,R0 CJNE A,#10H,L1 MOV R1,#0 ;如R0=10H,则不转移R1=00H; AJMP L3 L1:JC L2 ;如CY=1即 R010H,则转移 AJMP L3 L2:MOV R1,#0FFH L3:SJMP L3 因此最终结果是:本程序执行前, 如果R0=10H,则R1=00H; 如果R010H,则R1=0AAH; 如果R010H,则R1=0FFH。,(3)循环转移指令(2条),DJNZ direct, rel ; (direct) (direct)1 若(direct)=0, 则(PC) (
10、PC)+3 否则, (PC) (PC)+3+rel DJNZ Rn, rel ; (Rn) (Rn)1 若(Rn)=0, 则(PC) (PC)+2 否则, (PC) (PC)+2+rel,例1 有一段程序如下: MOV 23H,#0AH CLR A LOOPX: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
11、R1, DATA ; 数据块首址送R1 CLR 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 150,ACALLaddr11 ; (PC) (PC)+2 (SP) (SP)+1, (SP) (PC 70)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 指令系统
链接地址:https://www.31doc.com/p-2986931.html