Chap3MCS-51指令系统.ppt_第1页
Chap3MCS-51指令系统.ppt_第2页
Chap3MCS-51指令系统.ppt_第3页
Chap3MCS-51指令系统.ppt_第4页
Chap3MCS-51指令系统.ppt_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

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

文档简介

第三章第三章 MCS-51MCS-51指令系统指令系统 3-13-1 指令格式指令格式 3-23-2 指令寻址方式指令寻址方式 3-33-3 MCS-51MCS-51指令系统指令系统 1 一一. . 汇编语言指令格式汇编语言指令格式 标号:操作码 操作数1,操作数2;注释 换行表示一条指令结束。 例: LOOP: MOV A,#40H ;取参数 1.标号:指令的符号地址 2.操作码:指明指令功能。 3.操作数:指令操作对象 数据、地址、寄存器名及约定符号。 4.注释行:说明指令在程序中的作用 。 操作码和操作数是指令主体。 MOV_move传送 XCH_exchange交换 ANL_and logic与逻辑 运算 XRL_exclusive or异或 运算 MUL_Multiply乘法 RR_rotate right右循环 SJMP_short jump短跳 转 RET_return 子程序返 回 3-13-1 指令格式指令格式 2 二. 指令中符合意义说明 Rn当前工作寄存器组R0R7,n=07 Ri用作间接寻址的寄存器R0,R1,i=0,1 Direct内部RAM的8位地址,低128字节地址或SFR中的专 用寄存器的地址或符号.表示是直接寻址方式 #data8位立即数 #data1616位立即数 addr1616位目的地址 addr1111位目的地址 rel以补码表示的8位相对偏移量,用在相对寻址指令中 bit直接位地址 (x)表示x单元的内容 (x)以x单元的内容为地址的存储器单元 的内容 /表示对该位操作数取反 表示数据传递方向 $当前指令的地址 3 三三. . 机器语言指令格式机器语言指令格式 操作码 操作数1 操作数2 有单字节、双字节和三字节指令。 汇编语言指令中操作码和操作数是指令主体,称为指 令可执行部分,指令表中可查出对应指令代码。 举例: 汇编语言:机器语言: MOV A,R0E8H MOV R6,#32H7E 32H MOV 40H,#100 75 40 64H 11101000 01111110 00110010 01110101 01000000 01100100 4 3-2 3-2 指令寻址方式指令寻址方式 3-2-13-2-1 操作数类型操作数类型 位(b) 位寻址区中的一位二进制数据 字节(B) 8位二进制数据 字(W) 16位双字节数据 3-2-2 3-2-2 寻址方式寻址方式 一.立即寻址方式 指令中给出实际操作数据(立即数),一般用于为寄存 器或存储器赋常数初值。 举例: 8位立即数: MOV A,#40H ;A40H 16位立即数: MOV DPTR,#2100H ;DPTR2100H 5 二.直接寻址方式 指令操作数是存储器单元地址,数据在存储器单元中 。 MOV A,40H;A(40H) 直接寻址方式对数据操作时,地址是 固定值,而地址所指定的单元内容为 变量形式。 41H 78H 40H 56H 56H 例:设存储器两个单元的内容如图所示, 执行指令 MOV A,40H后 A = ? 思考题:直接寻址方式指令和立即寻址方式指令的形 式有什么不同? 6 直接寻址方式应注意的问题 当direct为SFR中的寄存器时, direct可以使用寄存器名 ,也可以使用直接地址 例:MOV A,SP MOV A,81H 指令码均为E5 81H 累加器有三种形式:A, ACC, E0H, 寻址方式不同 例: INC A ;寄存器寻址,指令码04H INC ACC ;直接寻址,指令码05E0H INC 0E0H ;直接寻址,指令码05E0H 7 三.寄存器寻址方式 指令操作数为寄存器名,数据在寄存器中 。 例:MOV A,R0;AR0 设指令执行前 A=20H,R0=40H, 执行指令后,A= ?,R0= ? 四.寄存器间接寻址方式 指令的操作数为寄存器名,寄存器中为数据地址。 存放地址的寄存器称为间址寄存器或数据指针。 例: MOV A,R0;A(R0) 设指令执行前 A=20H,R0=40H,地址为40H存储器 单元内容如图所示。执行指令后, A= ? ,R0 = ? , (40H)= ? 41H 67H 40H 34H 34H40H34H 40H40H 0100 0000 A 0010 0000 R0 0100 0000 R0 8 五.变址间接寻址方式 数据在存储器中,指令给出的寄存器中为数据 的基地址和偏移量。 数据地址 = 基地址 + 偏移量。 例:MOVC A,A+DPTR;A(A+DPTR) 设指令执行前 A=09H,DPTR=2000H,存储器单元内容 如图所示。执行指令后,A= ? DPTR= ? 12H 2000H 六.位寻址方式 指令给出位地址。一位数据在存储器位寻址区 。 例: MOV C,40H;Cy(位地址40H) 设指令执行前 Cy=1,位地址40H存储器单元如图 ,执行指令后,Cy= ? 28H 01100010 29H 11010111 位寻址区 0 2008H 89H 2009H 12H 9 3-33-3MCS-51MCS-51指令系统分析指令系统分析 指令功能分类: 数据传送、数据操作、布尔处理、程序控制。 3-3-1 数据传送指令 实现寄存器、存储器之间的数据传送。 一. 内部传送指令:片内数据存储器数据传送。 二. 外部传送指令: 片外数据存储器数据传送。 三. 交换指令: 片内数据存储器数据传送。 四. 堆栈操作指令: 片内数据存储器数据传送。 五. 查表指令: 程序存储器数据传送。 10 (一)内部传送指令:实现片内数据存储器中数据 传送。 指令格式: MOV 目的操作数,源操作数 寻址方式:立即寻址、直接寻址、寄存器寻址、寄 存器间址。 1.立即数传送指令 MOV A, #data ;A data MOV direct,#data ; direct data MOV Rn, #data ;Rn data MOV Ri, #data ;(Ri) data MOV DPTR, #data16 ;DPTR data16 11 2.内部RAM单元之间的数据传送 MOV direct2,direct1 ;direct2 (direct1) MOV direct,Rn ;direct (Rn) MOV Rn , direct ;Rn (direct) MOV direct ,Ri ;direct (Ri) MOV Ri ,direct ;(Ri) (direct) 12 例: MOV P2, R2 MOV 0A0H, R2; A0H是P2的口地址 MOV 0D0H, Ri MOV R3, 66H 13 3. 通过累加器的数据传送 MOV A, Rn ; A (Rn) MOV Rn, A ; Rn (A) MOV A, direct ;A (direct) MOV direct ,A ;direct (A) MOV A, Ri ;A (Ri) MOV Ri, A ;(Ri) (A) 14 例3-3-1:顺序执行下列指令序列,求每一步执行结 果。 MOV A,#30H MOV 4FH,A MOV R0,#20H MOV R0,4FH MOV 21H,20H ;A= 30H ;(4FH)= 30H ;R0= 20H ;(20H)= 30H ;(21H)= 30H 15 说明: 只有指令表中的指令才有对应指令代码,计算机 才能执行。编程时,不能随意创造发明指令。 1. 一条指令中不能同时出现两个工作寄存器: 非法指令:MOV R1,R2 MOV R2,R0 2. 间址寄存器只能使用 R0、R1。 非法指令:MOV A,R2 3. SFR区只能直接寻址,不能用寄存器间接寻 址。 非法指令:MOV R0,#80H MOV A,R0 4. 指令表:B:指令字节数,M:机器周期数 16 (二) 外部传送指令 实现片外数据存储器和A累加器之间的数据传送 。 指令格式:MOVX 目的操作数,源操作数 寻址方式:片外数据存储器用寄存器间址方式。 1. DPTR作16位数据指针,寻址64KB片外RAM空间 MOVX A,DPTR ;A(DPTR) MOVX DPTR,A;(DPTR)A 2. Ri作8位数据指针,寻址256B片外RAM空间 MOVXA,Ri;A(Ri) MOVXRi,A ;(Ri)A 注意:外部RAM的数据传送,只能通过累加器A进行 17 例3-3-2: 实现片外数据存储器数据传送(2000H)(2100H) 。 MOV DPTR,#2000H MOVX A,DPTR MOV DPTR,#2100H MOVX DPTR,A 思考:将片外RAM 0000H单元的数据传送到片内RAM的 60H单元。 ; DPTR= 2000H ; A= X ; DPTR= 2100H ;(2100H)= X 片外数据存储器不能直接 寻址。下列为非法指令: MOVX A,2000H MOVX 2100H,2000H 18 (三) 交换指令 实现片内RAM区的数据双向传 送。 1. 字节交换指令 XCH A,Rn ;A Rn XCH A,Ri;A (Ri) XCH A,direct ;A (direct) 思考:将片内RAM60H单元与61H单元的数据交换。 例:设A= 29H,执行指令 XCH A,2AH后,A= ?(2AH)= ? 38H 29H XCH 60H,61H 对吗 ? 29 H 19 2. 半字节交换指令 XCHD A,Ri ;A03 (Ri)03 SWAP A ;A47 A03 20 MOV A, #00H MOV R0, #2AH MOV R1,#2BH XCHD A, R0 SWAP A XCHD A,R1 XCH A, 20H 例3-3-3:将片内RAM 2AH和2BH单元中的 ASCII码转换成压缩式BCD码存入20H单元。 21 (四)堆栈操作指令 入栈指令:PUSH direct ;SPSP+1,(SP)(direct) 出栈指令:POP direct ;(direct)(SP), SPSP-1 例:设 ACC=02,B=56H,执行下列指令后 ,SP= ?,ACC= ? ,B= ? SP SP 02 SP 56H 02 56H 02H SP SP 56H 02 SP 56H 02 56H SP 02 02H ACC 00H02H00H02H02H SBR: MOV SP,#30H ;设栈 底 PUSH ACC PUSH B MOV ACC,#0 MOV B,#01 POP B POP ACC 思考:PUSH A ;对吗 22 (五) 查表指令 实现从程序存储器读取数据到A累加器,只能使用 变址间接寻址方式。 多用于查常数表程序,可直接求取常数表中的函数 值。 1DPTR为基址寄存器 MOVC A,A+DPTR ;A(A+DPTR) 查表范围为 64KB 程序存储器任意空间,称为远程查 表指令 。 2PC为基址寄存器 MOVC A,A+PC;A(A+PC) 常数表只能在查表指令后256B范围内。 23 例:查表法求Y=X2。设X(0X15)在片内RAM的20H 单元中,要求将查表求Y,存入片内RAM21H单元。 1) ORG 1000H SQU:MOV DPTR,#TAB ;确定表首地址(基地址) MOV A,20H;取X(偏移量 MOVC A,A+DPTR;查表求Y=X2 MOV 21H,A;保存Y RET;子程序结束 ;其它程序段 ORG 3000H;常数表格首地址 TAB:DB 00,01,04,09,225;平方表 24 2)指令地址 源程序 ORG 1000H ;程序起始地 址 1000H SQU: MOV A,20H;取X 1002H ADD A,#3 ;修正偏移量 1004H MOVC A,A+PC ;查表求Y=X2 1005H MOV 21H,A;存结果 1007H RET ;子程序结束 1008H TAB: DB 00,01,04 ;平方表 100BH DB 09,225 思考题:当0X255时,如何用查表法编程求Y=X2。 例:查表法求Y=X2。设X(0X15)在片内RAM的20H 单元中,要求将查表求Y,存入片内RAM21H单元。 25 练习题:找出指令错误并改正: 1MOV A,#1000H;A1000H 2MOVX A,1000H;A(1000H)片外RAM 3MOVC A,1000H;A(1000H)片外ROM 4MOVX 60H,A;片外RAM(60H)A 5. XCH R1,R2;R1R2 6. MOVX DPTR,#2000H;DPTR2000H 7. MOVX 60H,DPTR;片内RAM片外RAM 26 3-3-23-3-2算术运算指令算术运算指令 与数据传送指令不同,多数算术运 算指令会影响标志位的状态,即CPU执 行算术运算指令后,根据数据操作情况 自动设置标志位的状态。 27 3-3-2 算术运算指令 完成片内 RAM 和 A 中数据的加减乘除运算。 一加减指令 1.加法指令 1)不带进位加法:ADD A,源操作数 ADD A, Rn ; A (A)+(Rn) ADD A, direct ; A (A)+(direct) ADD A, Ri ; A (A)+(Ri) ADD A, #data ; A (A)+data 28 0011 1011 + 0011 1011 0111 0110 76H 0 0 1 1 例1:A=3BH,PSW=0,执行指令 ADD A,#3BH 求:A= ,Cy= ,OV= ,AC= ,P= , PSW= ? 01000001= 41H 29 2)带进位加法: ADDC A,源操作数 ADDC A, Rn ; A (A)+(Rn)+(Cy) ADDC A, direct ; A (A)+(direct) +(Cy) ADDC A, Ri ; A (A)+(Ri) +(Cy) ADDC A, #data ; A (A)+data +(Cy) 30 1001 1010 1110 0011 + 0 1 0111 1101 7DH 1 1 0 0 例2:A= 9AH,R2= E3H,PSW= 0,执行指令 ADDC A,R2 后求: A= ,Cy= ,OV= ,AC= ,P= , PSW= ? 10000100 = 84H 31 带进位加法指令带进位加法指令ADDCADDC用于多字节运算用于多字节运算 例:设双字节数 X 存在片内RAM 41H、40H单元,Y存在 42H、43H单元,编程求 Z=X+Y,并存入片内RAM单元44H 、45H、46H。 ADDS:MOV A,40H ADD A,42H MOV 44H,A MOV A,41H ADDC A,43H MOV 45H,A MOV A,#0 ADDC A,#0 MOV 46H,A RET ;取被加数低字节 ;加上加数低字节 ;保存和的低字节 ;取被加数高字节 ;加上加数高字节 ;保存和的高字节 ;求高字节进位 ;子程序结束 ;低字节相加 ;高字节相加 ;计算高字节进 位 ;子程序结束 32 十进制加法指令: ADD A,源操作数 DAA 带进位十进制加法指令: ADDC A,源操作数 DA A BCD调整指令: DAA; 对 A 中加法结果进行调整 ;A中是一个压缩BCD码 33 例(A)=56H, (R5)=67H,求BCD码之 和 ADD A, R5 DA A 结果:(A)=23H, cy=1 34 2减法指令 SUBB A,源操作数;带借位减法指令 SUBB A, Rn ; A (A)-(Rn)-(Cy) SUBB A, direct ; A (A)-(direct)-(Cy) SUBB A, Ri ; A (A)-(Ri)-(Cy) SUBB A, #data ; A (A)-data-(Cy) 35 00 0 0 0 0 思考:编程求双字节减法。设X、Y存在片内 RAM 60H 起始单元,计算 Z=X-Y 。 例:A= 5AH,R2= 5AH,Cy= 0,执行下列指令 SUBB A,R2 求:A= ,Cy= ,OV= ,P= ,AC= ? 36 3. 增量、减量指令 INC 单操作数 INC A ;A (A)+1 INC Rn ;Rn (Rn)+1 INC direct ; direct (direct)+1 INC Ri ;(Ri) (Ri)+1 INC DPTR ; DPTR (DPTR)+1 不影响标志位状态。 37 3. 增量、减量指令 DEC 单操作数 DEC A ;A (A)-1 DEC Rn ;Rn (Rn)-1 DEC direct ; direct (direct)-1 DEC Ri ;(Ri) (Ri)-1 不影响标志位状态。 注意:没有指令 DEC DPTR 可用指令 DEC DPL 代替 38 4.乘除指令 MUL AB;BAAB,Cy0, ;当积高字节B=0,OV0;B0,则OV1 例:A= 96(60H), B= 192(C0H),执行指令 MUL AB 后 , 求:A= ,B= ,Cy= ,OV= ,P= ? 解: 96 192 = 18432(4800H) 00H 48H 0 1 0 39 例:A= 156(F6H),B= 13(0DH),执行指令 DIV AB 后 求:A= ,B= ,Cy= ,OV= ,P= ? 解: 156 13 = 18(12H),余数= 12(0CH)。 12H 0CH 0 0 0 DIV AB ;AB,A商,B余数,Cy0, ;当除数B=0,OV1;B0,则OV0 40 3-3-23-3-2 逻辑运算及移位指令逻辑运算及移位指令 一.单操作数指令(A累加器为操作数)教材P.62 1. A清0指令: CLR A ;A0 2. A取反指令:CPL A ;A/A 3. 循环移位指令:教材P.63 1)8位循环指令: RL A ;A循环左移一位 RR A ;A循环右移一位 2)9位循环指令: RLC A;带Cy循环左移一位 RRC A;带Cy循环右移一位 41 例3-3-7:设 A= 11000101 ,Cy= 0,分别执行下列单 条指令:CPL A 求:A= ,Cy= RL A RLC A 用9位循环指令实现多字节移位 例:编程将寄存器 R6R5 中的双字节数X左移一位。 CLR C MOV A ,R5 RLC A MOV R5 ,A MOV A ,R6 RLC A MOV R6 ,A ;Cy=0, 设 R6= 55H ,R5= AAH ;R6=01010101,R5=10101010, Cy=0 ;R6=01010101,R5=01010100, Cy=1 ;R6=10101011,R5=01010100, Cy=0思考题:如何将寄存器R6R5中的双字节数X右移一位 。 42 (二)双操作数逻辑运算指令(对位逻辑运 算) ANL A, Rn ;A (A)(Rn) ANL A,direct ; A (A)(direct) ANL A, Ri ; A (A)(Ri) ANL A,#data ; A (A)data ANL direct , A ; direct (direct) (A) ANL direct ,#data ; direct (direct) data 1.逻辑与运算指令 教材 P.60 43 2.逻辑或运算指令 ORL A, Rn ;A (A)v(Rn) ORL A,direct ; A (A) v(direct) ORL A, Ri ; A (A) v(Ri) ORL A,#data ; A (A) v data ORL direct , A ; direct (direct) v(A) ORL direct ,#data ; direct (direct) v data 44 3.逻辑异或运算指令 XRL A, Rn ;A (A) (Rn) XRL A,direct ; A (A) (direct) XRL A, Ri ; A (A) (Ri) XRL A,#data ; A (A) data XRL direct , A ; direct (direct) (A) XRL direct ,#data ; direct (direct) data 45 思考: 如何将累加器A中的数据高4位清0,低位不变? 如何将寄存器R2中的数据奇数位取反,偶数位不变? 例: A=01B,表示随机状态,为1或0,执 行下述一组指令执行后A的值如何? XRL A,#0C0H ;将累加器A的内容D7、D6取反 ORL A,#03H;将累加器A的内容D1、D0置1 ANL A,#0E7H ;将累加器A的内容D4、D3清0 解 :执行上述指令后,A=100011B。 46 3-3-33-3-3 布尔变量操作指令布尔变量操作指令(教材教材P.70P.70) 对片内RAM中位寻址区操作。位累加器Cy和位地址 b。 一位传送 MOV C,bit ;Cy(bit) MOV bit,C ;bitCy 26H1 0 1 1 0 1 0 1 25H1 0 0 0 0 1 1 0 24H0 1 1 1 0 0 0 0 例:将位地址20H的一位数传送到位地址30H中: MOV C,20H MOV 30H,C 47 二位清0、置1、取反: CLR C ;Cy0, CLR bit ;bit 0 例: CLR 40H;(位地址40H) 0 SETB C ; Cy1 SETB bit ; bit 1 例: SETB 40H CPL C ; Cy (Cy) CPL bit ; bit (bit) 48 三位逻辑运算 ANL C, bit ;cy (cy)(bit) ANL C, /bit ; cy (cy)(bit) ORL C, bit ;cy (cy)V(bit) ORL C, /bit ; cy (cy)V(bit) 49 例:设 Cy=1,(位地址40H)=1,执行指令 ANL C,/40H 后, Cy= ? , (位地址40H)= ? 位地址表示法: 位地址 40H,位寄存器 F0,字节加位 ACC.0 0 习题:设累加器A中数据为 29H,Cy=0,执行指令 ORL C,0E3H 后,Cy= ? 1 50 3-3-43-3-4 转移指令转移指令 转移指令通过改写PC的当前值,从而改变CPU执 行程序的顺序,使程序发生跳转。 按转移条件分类: 1)无条件转移: 执行无条件转移指令,程序无条件转移到指定处。 2)条件转移: 指令中给出转移条件,执行指令时,先测试条件,若 满足条件,则程序发生转移,否则,仍顺序执行程序 。 51 一.无条件转移指令(教材P64) 1.长转移指令: LJMP addr16 ;PC addr16 指令机器码: 02 nnH nnL 指令转移范围:64KB 2.绝对转移指令: AJMP addr11 ;PCPC+2 ;PC100addr11 ;PC1511不变 指令机器码:addr108 00001,addr70 指令转移范围:2KB 转移时要求转移前后保持 PC1511不变。52 相对偏移量 e 的计算式: e = 目的指令地址 -(转移指令地址+指令字节数 ) = 目的地址 - PC当前值 3.短转移指令: SJMP rel ;PCPC+2,PCPC+rel 指令机器码: 80H,rel 相对偏移量 rel为8位补码。 指令转移范围:前128后127字节 编程时,用标号代替转移目的地址,转移指令的 操作数交给汇编程序计算。 LJMP NEXT AJMP NEXT SJMP NEXT NEXT: 53 例1:计算转移指令的相对偏移量 e ,并判断是否超 出转移范围。 例2:求原地踏步指令的指令代码 HERE: SJMP HERE 求出指令代码为:80 FE H 相对偏移量 = 2150H -(2130H+2)= 001EH, 只取低8位:e = 1EH 指令机器码:80 1E H 习题:计算程序中转移指令的相对偏移量 e , 并判断是否超出转移范围。 地址 源程序 2130H LOOP: 21B0H SJMP LOOP 指令地址源程序 2130H SJMP NEXT 2150HNEXT:MOV A,R2 54 4变址寻址转移指令(多分支转移指令) JMP A+DPTR. ;PCA+DPTR 指令机器码 73H,指令转移范围64KB。 KEY: MOV DPTR,#KTAB MOV A,40H RL A JMP A+DPTR KTAB: AJMP FUNC0 AJMP FUNC1 FUNC0: FUNC1: 应用:处理功能键。 要求不同功能键执行不同 程序段。设每个功能键对应 一个键值 X(0XFH)。 设X已存入片内RAM的 40H单元中。 若X=0,则执行程序段 FUNC0 若X=1,则执行程序段 FUNC1 。 55 二条件转移指令(教材P.67) 1. 判零转移指令 JZ rel ;PCPC+2, ;若A=00H,PCPC+rel(转移)

温馨提示

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

评论

0/150

提交评论