《《计算机指令系统》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《计算机指令系统》PPT课件.ppt(48页珍藏版)》请在金锄头文库上搜索。
1、第三章第三章 计算机指令系统计算机指令系统3-13-1 指令格式指令格式3-23-2 指令寻址方式指令寻址方式3-33-3 状态标志状态标志3-43-4 MCS-51指令系统指令系统一一一一. . . . 汇编语言指令格式汇编语言指令格式汇编语言指令格式汇编语言指令格式 标号:标号: 操作码操作码 操作数操作数1 1,操作数,操作数22;注释;注释 换行表示一条指令结束。换行表示一条指令结束。 例:例: LOOPLOOP: MOV A MOV A,#40H #40H ;取参数取参数1.1.标号:标号:指令的符号地址指令的符号地址2.2.操作码:操作码:指明指令功能。指明指令功能。3.3.操作数
2、:操作数:指令操作对象指令操作对象数据、地址、寄存器名及约定数据、地址、寄存器名及约定符号。符号。4.4.注释行:注释行:说明指令在程序中说明指令在程序中的作用。的作用。 操作码和操作数操作码和操作数是指令主体。是指令主体。MOV_move传送传送XCH_exchange交换交换ANL_and logic与逻辑运算与逻辑运算XRL_exclusive or异或运算异或运算MUL_Multiply乘法乘法RR_rotate right右循环右循环SJMP_short jump短跳转短跳转RET_return 子程序返回子程序返回3-13-1 指令格式指令格式二二二二. . . . 机器语言指令格
3、式机器语言指令格式机器语言指令格式机器语言指令格式操作码操作码 操作数操作数1 1 操作数操作数22有单字节、双字节和三字节指令。有单字节、双字节和三字节指令。汇编语言指令中操作码和操作数是指令主体,称为指汇编语言指令中操作码和操作数是指令主体,称为指令可执行部分,指令表中可查出对应指令代码。令可执行部分,指令表中可查出对应指令代码。举例:举例:汇编语言:汇编语言:机器语言:机器语言:MOV AMOV A,R0R0E8HE8HMOV R6MOV R6,#32H#32H7E 32H7E 32HMOV 40HMOV 40H,#100H#100H75 40 64H75 40 64H111010000
4、1111110001100100111010101000000011001003-2 3-2 指令寻址方式指令寻址方式3-2-13-2-13-2-13-2-1 操作数类型操作数类型操作数类型操作数类型位位( (b) b) 位寻址区中的一位二进制数据位寻址区中的一位二进制数据字节字节( (B) 8B) 8位二进制数据位二进制数据字字( (W) 16W) 16位双字节数据位双字节数据3-2-2 3-2-2 3-2-2 3-2-2 寻址方式寻址方式寻址方式寻址方式一一. .立即寻址方式立即寻址方式指令中给出实际操作数据指令中给出实际操作数据( (立即数立即数) ),一般用于为,一般用于为寄存器或存储
5、器赋常数初值。寄存器或存储器赋常数初值。举例:举例: 8 8位立即数:位立即数: MOV AMOV A,#40H#40H ;A A 40H40H 1616位立即数:位立即数: MOV DPTRMOV DPTR,#2100H #2100H ;DPTRDPTR 2100H2100H二二. .直接寻址方式直接寻址方式指令操作数是存储器单元地址,数据在存储器单元中。指令操作数是存储器单元地址,数据在存储器单元中。 MOV AMOV A,40H40H;A A (40H)(40H)直接寻址方式对数据操作时,地址是直接寻址方式对数据操作时,地址是固定值,而地址所指定的单元内容为固定值,而地址所指定的单元内容
6、为变量形式。变量形式。41H 78H40H 56H56H 例:例:设存储器两个单元的内容如图所示,设存储器两个单元的内容如图所示,执行指令执行指令 MOV AMOV A,40H40H后后 A = A = ?思考题:思考题:直接寻址方式指令和立即寻址方式指令的形直接寻址方式指令和立即寻址方式指令的形式有什么不同?式有什么不同?三三. .寄存器寻址方式寄存器寻址方式指令操作数为寄存器名,数据在寄存器中。指令操作数为寄存器名,数据在寄存器中。例例: :MOV AMOV A,R0R0;A A R0R0设指令执行前设指令执行前 A=20HA=20H,R0=40HR0=40H,执行指令后,执行指令后,A=
7、 A= ?,?,R0= R0= ?四四. .寄存器间接寻址方式寄存器间接寻址方式 指令的操作数为寄存器名,寄存器中为数据地址。指令的操作数为寄存器名,寄存器中为数据地址。 存放地址的寄存器称为间址寄存器或数据指针。存放地址的寄存器称为间址寄存器或数据指针。例例: :MOV AMOV A,R0R0;A A (R0)(R0) 设指令执行前设指令执行前 A=20HA=20H,R0=40HR0=40H,地址为地址为4040H H存储器存储器单元内容如图所示单元内容如图所示。执行指令后,执行指令后,A= A= ? ,R0 = ,R0 = ? , (40H)= , (40H)= ? 41H 67H 40H
8、 34H34H40H34H40H40H0100 0000A0010 0000R00100 0000R0五五. .变址间接寻址方式变址间接寻址方式数据在存储器中,指令给出的寄存器中为数据数据在存储器中,指令给出的寄存器中为数据的基地址和偏移量。的基地址和偏移量。数据地址数据地址 = = 基地址基地址 + + 偏移量。偏移量。例:例: MOVC AMOVC A,A+DPTRA+DPTR ;A A (A+DPTR)(A+DPTR) 设指令执行前设指令执行前 A=09HA=09H,DPTR=2000HDPTR=2000H,存储器单元内容存储器单元内容如图所示。执行指令后,如图所示。执行指令后,A= A
9、= ? DPTR= DPTR= ? (2009H)= ? 12H12H2008H 89H2009H 12H2000H3-43-43-43-4MCS-51MCS-51指令系统分析指令系统分析指令功能分类:指令功能分类:数据传送、数据操作、布尔处理、程序控制。数据传送、数据操作、布尔处理、程序控制。3-4-13-4-1 数据传送指令数据传送指令实现寄存器、存储器之间的数据传送。实现寄存器、存储器之间的数据传送。一一. . 内部传送指令内部传送指令: 片内数据存储器数据传送。片内数据存储器数据传送。 二二. . 外部传送指令外部传送指令: 片外数据存储器数据传送。片外数据存储器数据传送。三三. .
10、交换指令交换指令: 片内数据存储器数据传送。片内数据存储器数据传送。 四四. . 堆栈操作指令堆栈操作指令: 片内数据存储器数据传送。片内数据存储器数据传送。 五五. . 查表指令查表指令: 程序存储器数据传送。程序存储器数据传送。( (一一) )内部传送指令内部传送指令:实现片内数据存储器中数据传送。:实现片内数据存储器中数据传送。指令格式指令格式: MOVMOV 目的目的操作数,操作数,源源操作数操作数 寻址方式寻址方式:立即寻址、直接寻址、寄存器寻址、寄存器间址。立即寻址、直接寻址、寄存器寻址、寄存器间址。指令机器码:指令机器码:1110111101rrrrrr E8E8EFEF1110
11、0101 n 11100101 n E5E5 n n1110011i 1110011i E6E6、E7E7 01110100 01110100 d d 74 74 d d 10101rrr n10101rrr n 1010011i n 1010011i n 85 n1 n2 85 n1 n2 90 90 d1 d2d1 d2MOV MOV A A,RnRn ;ARnARn,RnRn=R=R0 0R R7 7 MOV AMOV A,n n ;A(n)A(n),MOV MOV A A,RiRi ;A(Ri)A(Ri),RiRi=R=R0 0、R R1 1 MOV AMOV A,#d #d ;AdA
12、d,MOV MOV Rn,nRn,n ;Rn(nRn(n) )MOV MOV Ri,nRi,n ;( (Ri)(nRi)(n) ) MOV n1MOV n1,n2 n2 ;(n1)(n2)(n1)(n2) MOV DPTR MOV DPTR,#d1d2 #d1d2 ;DPTRd1d2 DPTRd1d2 例例3-4-13-4-1:顺序执行下列指令序列,求每一步执行结果顺序执行下列指令序列,求每一步执行结果。MOV AMOV A,#30H#30HMOV 4FHMOV 4FH,A AMOV R0MOV R0,#20H#20HMOV R0MOV R0,4FH4FHMOV 21HMOV 21H,20H2
13、0H习题习题:用两种寻址方式实现,将片内用两种寻址方式实现,将片内RAM RAM 6060H H单元的数单元的数据传送给累加器据传送给累加器A A。;A= 30HA= 30H;(4FH)= 30H(4FH)= 30H;R0= 20HR0= 20H;(20H)= 30H(20H)= 30H;(21H)= 30H(21H)= 30HMOV R0MOV R0,60H 60H MOV AMOV A,R0R0解:解: MOV A,60HMOV A,60H说明:说明: 只有指令表中的指令才有对应指令代码,计算机才只有指令表中的指令才有对应指令代码,计算机才能执行。编程时,不能随意创造发明指令。能执行。编程
14、时,不能随意创造发明指令。1. 一条指令中不能同时出现两个工作寄存器:一条指令中不能同时出现两个工作寄存器:非法非法指令:指令:MOV R1MOV R1,R2R2MOV R2MOV R2,R0R02. 间址寄存器只能使用间址寄存器只能使用 R0R0、R1R1。 非法非法指令:指令:MOV AMOV A,R2R23. SFRSFR区只能直接寻址,不能用寄存器间接寻址。区只能直接寻址,不能用寄存器间接寻址。非法非法指令:指令:MOV R0MOV R0,#80H#80HMOV AMOV A,R0R04. 指令表:指令表:B B:指令字节数,指令字节数,M M:机器周期数机器周期数(二)(二) 外部传
15、送指令外部传送指令实现片外数据存储器和实现片外数据存储器和A A累加器之间的数据传送。累加器之间的数据传送。 指令格式:指令格式:MOVXMOVX 目的目的操作数,操作数,源源操作数操作数寻址方式:片外数据存储器用寄存器间址方式。寻址方式:片外数据存储器用寄存器间址方式。1. 1. DPTRDPTR作作1616位数据指针,寻址位数据指针,寻址6464KBKB片外片外RAMRAM空间空间MOVX AMOVX A,DPTRDPTR ;A(DPTR)A(DPTR)MOVX DPTRMOVX DPTR,A A ;(DPTR)A(DPTR)A2. 2. RiRi作作8 8位数据指针,寻址位数据指针,寻址
16、256256B B片外片外RAMRAM空间空间MOVXMOVX A A,RiRi;A(RiA(Ri) ) MOVXMOVX RiRi,A A ;( (Ri)ARi)A例例3-4-23-4-2:实现片外数据存储器数据传送实现片外数据存储器数据传送(2000(2000H)H) (2100H)(2100H)。MOV DPTRMOV DPTR,#2000H#2000HMOVX AMOVX A,DPTRDPTRMOV DPTRMOV DPTR,#2100H#2100HMOVX DPTRMOVX DPTR,A A; DPTR= 2000HDPTR= 2000H; A= X A= X; DPTR= 2100
17、H DPTR= 2100H;(2100H)= X(2100H)= X片外数据存储器不能直接片外数据存储器不能直接寻址。下列为寻址。下列为非法非法指令:指令: MOVX AMOVX A,2000H 2000H MOVX 2100H MOVX 2100H,2000H2000H思考题:思考题:为什么对为什么对DPTRDPTR的数据传送使用内部传送指令?的数据传送使用内部传送指令?(三)(三) 交换指令交换指令 实现片内实现片内RAMRAM区的数据双向传送。区的数据双向传送。1. 1. 字节交换指令字节交换指令XCH XCH A A,RnRn ;A A RnRnXCH XCH A A,RiRi;A A
18、 ( (RiRi) ) XCH AXCH A,n n ;A A (n)(n)习题习题4 4:将片内将片内RAMRAM6060H H单元与单元与6161H H单元的数据交换。单元的数据交换。例:例:设设A= 29HA= 29H,执行指令执行指令 XCH AXCH A,2AH2AH后,后,A= A= ?(2AH)= (2AH)= ?38H29HXCH 60HXCH 60H,61H 61H 对吗?对吗?29 H2. 2. 半字节交换指令半字节交换指令XCHD XCHD A A,RiRi ;A A0 03 3 (Ri)(Ri)0 03 3SWAP ASWAP A;A A4 47 7 A A0 03 3
19、例例3-4-33-4-3:将片内将片内RAM RAM 2 2AHAH和和2 2BHBH单元中的单元中的ASCIIASCII码转换成压缩式码转换成压缩式BCDBCD码存入码存入2020H H单元。单元。A0000000000H00001000100000001000010108H80H85HMOV A,#0MOV R0,#2AHMOV R1,#2BHXCHD A,R0SWAP AXCHD A,R1XCH A,20H0000000000H0000000000H85HR1R0习题:习题:交换片内交换片内RAM RAM 4040H H单元和单元和 41 41H H单元的低半字节。单元的低半字节。(四)
20、堆栈操作指令(四)堆栈操作指令 入栈指令:入栈指令:PUSH n PUSH n ;SPSP SP+1SP+1,(SP)(SP) (n)(n) 出栈指令:出栈指令:POPPOP n n ;(n)(n) (SP)(SP),SPSP SP-1SP-1例例:设设 A=02A=02,B=56HB=56H,执执行行下下列列指指令令后后,SP= SP= ?,?,A= A= ? ,B= ?B= ? SPSP SP 02 SP 56H 02 56H 02HSP SP 56H 02 SP 56H 02 56H SP 02 02HA00H02H00H02H02HSBRSBR: MOV SP MOV SP,#30H
21、#30H ;设栈底;设栈底 PUSH APUSH A PUSH B PUSH B MOV A MOV A,#0#0 MOV MOV B B,#01#01 POP POP B B POP A POP A ( (五五) ) 查表指令查表指令 实现从程序存储器读取数据到实现从程序存储器读取数据到A A累加器累加器,只能使用变只能使用变址间接寻址方式址间接寻址方式。 多用于查常数表程序,可直接求取常数表中的函数值。多用于查常数表程序,可直接求取常数表中的函数值。1 1DPTRDPTR为基址寄存器为基址寄存器MOVCMOVC A A,A+DPTR A+DPTR ;A A (A+DPTR) (A+DPTR
22、) 查表范围为查表范围为 64 64KB KB 程序存储器任意空间,称为远程查程序存储器任意空间,称为远程查表指令表指令 。2 2PCPC为基址寄存器为基址寄存器MOVCMOVC A A,A+PCA+PC;A A (A+PC)(A+PC)常数表只能在查表指令后常数表只能在查表指令后256256B B范围内。范围内。例:查表法求例:查表法求Y=XY=X2 2。设设X(0X15)X(0X15)在片内在片内RAMRAM的的2020H H单单元中,要求将查表求元中,要求将查表求Y Y,存入片内存入片内RAMRAM2121H H单元。单元。1 1)ORG 1000HORG 1000HSQU:SQU: M
23、OV DPTRMOV DPTR,#TAB#TAB ;确定表首地址(基地址);确定表首地址(基地址)MOV AMOV A,20H20H;取取X X(偏移量偏移量MOVC AMOVC A,A+DPTRA+DPTR ;查表求查表求Y=XY=X2 2MOV 21HMOV 21H,A A;保存保存Y YRETRET;子程序结束子程序结束;其它程序段;其它程序段ORG 3000HORG 3000H;常数表格首地址常数表格首地址TAB:TAB: DB 00DB 00,0101,0404,0909,225225;平方表平方表2 2)指令地址指令地址 源程序源程序 ORG 1000HORG 1000H ;程序起
24、始地址程序起始地址 1000 1000H H SQU: SQU: MOV A MOV A,20H20H;取取X X 1002H 1002H ADD A ADD A,#3#3 ;修正偏移量修正偏移量 1004 1004H H MOVC AMOVC A,A+PCA+PC ;查查表表求求Y=XY=X2 2 1005H 1005H MOV 21H MOV 21H,A A;存存结结果果 1007 1007H H RET RET ;子子程程序结束序结束 1008 1008H H TAB: TAB: DB 00 DB 00,0101,04 04 ;平平方方表表 100 100BHBH DB DB 0909,
25、225 225 思考题:思考题:当当00X255X255时,如何用查表法编程求时,如何用查表法编程求Y=XY=X2 2。例:例:查表法求查表法求Y=XY=X2 2。设设X(0X15)X(0X15)在片内在片内RAMRAM的的2020H H单单元中,要求将查表求元中,要求将查表求Y Y,存入片内存入片内RAMRAM2121H H单元。单元。习题:习题:找出指令错误并改正:找出指令错误并改正:1 1MOV AMOV A,#1000H#1000H;A1000HA1000H2 2MOVX AMOVX A,1000H1000H;A(1000H)A(1000H)片外片外RAM3 3MOVC AMOVC A
26、,1000H1000H;A(1000H)A(1000H)片外片外ROM4 4MOVX 60HMOVX 60H,A A;片外片外RAM(60H)ARAM(60H)A5 5MOV R0MOV R0,60H60H;片内片内RAMRAM:(61H)(60H)(61H)(60H) MOV 61H MOV 61H,R0R06.6. XCH R1 XCH R1,R2R2;R1R2R1R27.7. MOVX DPTR MOVX DPTR,#2000H#2000H;DPTR2000HDPTR2000H8.8. MOVX 60H MOVX 60H,DPTRDPTR ;片内片内RAMRAM片外片外RAMRAM3-3
27、 3-3 状态标志状态标志MCS-51 MCS-51 的程序状态字寄存器的程序状态字寄存器 PSW PSW 为标志寄为标志寄存器。其格式如下:存器。其格式如下:1 1标志位标志位( (自动设置状态自动设置状态) )1 1)CyCy:进位标志位:进位标志位保存运算后最高位的进位保存运算后最高位的进位/ /借位状态,当有进位借位状态,当有进位/ /借位,借位,Cy=1Cy=1,否则否则Cy=0Cy=0。2 2)ACAC:辅助进位标志位:辅助进位标志位保存低半字节的进位保存低半字节的进位/ /借位状态,当借位状态,当D D3 3产生进位产生进位/ /借位,借位,AC=1AC=1,否则否则AC=0AC
28、=0。用于十进制调整。用于十进制调整。3 3)OVOV:溢出标志位:溢出标志位OV=CyOV=Cy7 7 CyCy6 6,补码运算产生溢出补码运算产生溢出OV=1OV=1,否则否则OV=0OV=0。4 4)P P:奇偶标志位:奇偶标志位反映累加器反映累加器A A中数据的奇偶性。当中数据的奇偶性。当1 1的个数为奇数,的个数为奇数,P=1P=1,否否则则P=0P=0。2 2用户选择位用户选择位( (编程设置状态编程设置状态) )1 1)F0F0:用户自定义标志位。:用户自定义标志位。2 2)RS1RS1、RS0RS0: 工作寄存器区选择位。工作寄存器区选择位。复位时,复位时,PSW=00HPSW
29、=00H例:例:复位后,设置使用工作复位后,设置使用工作寄存器寄存器3 3区,其余标志位不区,其余标志位不变。变。解:解: MOV PSWMOV PSW,#18H#18HRS1 RS0 RS1 RS0 工作寄存器工作寄存器 0 0 0 0 0 0区区 0 1 1 0 1 1区区 1 0 2 1 0 2区区 1 1 3 1 1 3区区3-4-23-4-2算术运算指令算术运算指令与数据传送指令不同,多数算术运算指与数据传送指令不同,多数算术运算指令会影响标志位的状态,即令会影响标志位的状态,即CPUCPU执行算术运执行算术运算指令后,根据数据操作情况自动设置标算指令后,根据数据操作情况自动设置标志
30、位的状态。志位的状态。 3-4-2 3-4-2 算术运算指令算术运算指令完成片内完成片内 RAM RAM 和和 A A 中数据的加减乘除运算中数据的加减乘除运算。一一加减指令加减指令1.加法指令加法指令 0011 10110011 1011 + + 0011 10110011 1011 0111 01100111 01107676H 0 0 1 1H 0 0 1 11 1)不带进位加法:)不带进位加法:ADDADD A A,源源操作数操作数ADD AADD A,R2 R2 ;AA+R2AA+R2,影响影响CyCy、OVOV、ACAC、P P 例例1 1:A=3BHA=3BH,PSW=0PSW=
31、0,执行指令执行指令 ADD AADD A,#3BH#3BH求:求:A= A= ,Cy= Cy= ,OV= OV= ,AC= AC= ,P= P= ,PSW= PSW= ? 01000001= 41H 1001 10101001 1010 1110 00111110 0011 + + 0 0 1 1 0111 11010111 11012 2)带进位加法:带进位加法: ADDC AADDC A,源源操作数操作数ADDC AADDC A,R2 R2 ;AA+R2+CyAA+R2+Cy,影响影响CyCy、OVOV、ACAC、P P7 7DH 1 1 0 0DH 1 1 0 0例例2 2:A= 9A
32、HA= 9AH,R2= E3HR2= E3H,PSW= 0PSW= 0,执行指令执行指令ADDC AADDC A,R2R2 后求:后求:A= A= ,Cy= Cy= ,OV= OV= ,AC= AC= ,P= P= ,PSW= PSW= ?10000100 = 84H带进位加法指令带进位加法指令带进位加法指令带进位加法指令ADDCADDCADDCADDC用于多字节运算用于多字节运算用于多字节运算用于多字节运算例:例:设双字节数设双字节数 X X 存在片内存在片内RAMRAM 4141H H、40H40H单元,单元,Y Y存在存在4242H H、43H43H单元,编程求单元,编程求 Z=X+YZ
33、=X+Y,并存入片内并存入片内RAMRAM单元单元4444H H、45H45H、46H46H。ADDSADDS:MOV AMOV A,40H40HADD AADD A,42H42HMOV 44HMOV 44H,A AMOV AMOV A,41H41HADDC AADDC A,43H43HMOV 45HMOV 45H,A AMOV AMOV A,#0#0ADDC AADDC A,#0#0MOV 46HMOV 46H,A ARETRET;取被加数低字节取被加数低字节;加上加数低字节;加上加数低字节;保存和的低字节;保存和的低字节;取被加数高字节;取被加数高字节;加上加数高字节;加上加数高字节;保存
34、和的高字节;保存和的高字节;求高字节进位;求高字节进位;子程序结束;子程序结束;低字节相加;低字节相加;高字节相加;高字节相加;计算高字节进位;计算高字节进位;子程序结束;子程序结束2减法指令减法指令SUBB ASUBB A,源源操作数操作数;带借位减法指令;带借位减法指令SUBB ASUBB A,R2R2;AA-R2-CyAA-R2-Cy,;影响影响CyCy、OVOV、ACAC、P P00 0 0 0 000 0 0 0 0例:例:A= 5AHA= 5AH,R2= 5AHR2= 5AH,Cy= 0Cy= 0,执行下列指令执行下列指令SUBB ASUBB A,R2R2求:求: A= A= ,C
35、y= Cy= ,OV= OV= ,P= P= ,AC= AC= ?3. 增量、减量指令增量、减量指令INCINC 单操作数单操作数如:如: INC R2 INC R2 ;R2R2+1R2R2+1DECDEC 单操作数单操作数 如:如: DEC R2 DEC R2 ;R2R2-1R2R2-1 INC INC DPTRDPTR ;DPTRDPTR+1DPTRDPTR+1 不影响标志位状态不影响标志位状态。注意:注意:没有指令没有指令 DEC DPTR DEC DPTR 可用指令可用指令 DEC DPL DEC DPL 代替代替4.4.乘除指令乘除指令MUL ABMUL AB ;BAABBAAB,C
36、y0Cy0,;当积高字节当积高字节B=0B=0,OV0OV0;B0B0,则则OV1OV1例例:A= A= 96(60H), 96(60H), B= B= 192(C0H)192(C0H),执执行行指指令令 MUL MUL AB AB 后后,求:求:A= A= ,B= B= ,Cy= Cy= ,OV= OV= ,P= P= ?解:解: 96 192 = 18432(480096 192 = 18432(4800H)H)0000H 48H 0 1 0H 48H 0 1 01212H 0CH 0 0 0H 0CH 0 0 0例例:A= A= 156(F6H)156(F6H),B= B= 13(0DH
37、)13(0DH),执执行行指指令令 DIV DIV AB AB 后求:后求:A= A= ,B= B= ,Cy= Cy= ,OV= OV= ,P= P= ?解:解: 156 13 = 18(12156 13 = 18(12H)H),余数余数= = 12(12(0 0CH)CH)。DIV AB DIV AB ;ABAB,AA商,商,BB余数,余数,Cy0Cy0,;当除数当除数B=0B=0,OV1OV1;B0B0,则则OV0OV03-4-3-4-3-4-3-4-3 3 3 3 逻辑运算指令逻辑运算指令一一. .单操作数指令(单操作数指令(A A累加器为操作数)累加器为操作数)1. A A清清0 0指
38、令:指令: CLR A CLR A ;A0A02. A A取反指令:取反指令:CPL A CPL A ;AA 3. 循环移位指令:循环移位指令:1)8 8位循环指令:位循环指令:RL ARL A ;A A循环左移一位循环左移一位RR ARR A ;A A循环右移一位循环右移一位2)9 9位循环指令:位循环指令:RLC ARLC A;带带CyCy循环左移一位循环左移一位RRC ARRC A;带带CyCy循环右移一位循环右移一位例例3-4-73-4-7:设设 A= 11000101 A= 11000101 ,Cy= 0Cy= 0,分别执行下列单条分别执行下列单条指令:指令:CPL ACPL A 求
39、:求:A= A= ,Cy= Cy= RL ARL ARLC ARLC A 00111010 000111010 010001011 010001011 010001010 110001010 1 用用9 9位循环指令实现多字节移位位循环指令实现多字节移位例:例:编程将寄存器编程将寄存器 R6R5 R6R5 中的双字节数中的双字节数X X左移一位。左移一位。CLR CMOV A,R5RLC AMOV R5,AMOV A,R6RLC AMOV R6,A0CyR6R5Cy;Cy=0Cy=0, 设设 R6= 55H R6= 55H ,R5= AAHR5= AAH;R6=01010101R6=01010
40、101,R5=10101010R5=10101010,Cy=0Cy=0;R6=01010101R6=01010101,R5=01010100R5=01010100,Cy=1Cy=1;R6=10101011R6=10101011,R5=01010100R5=01010100,Cy=0Cy=0(二二)双操作数逻辑运算指令双操作数逻辑运算指令( (对位逻辑运算对位逻辑运算) ):ANLANL、ORLORL、XRLXRL例例3-5-8 A=01B,表示随机状态,为表示随机状态,为1或或0,执行下述一组指令执行后执行下述一组指令执行后A的值如何的值如何? XRL A,#0C0H ;将累加器将累加器A的内
41、容的内容D7、D6取反取反 ORL A,#03H;将累加器将累加器A的内容的内容D1、D0置置1ANL A,#0E7H ;将累加器将累加器A的内容的内容D4、D3清清0 解解 :执行上述指令后,执行上述指令后,A=100011B。3-4-43-4-43-4-43-4-4 布尔变量操作指令布尔变量操作指令布尔变量操作指令布尔变量操作指令 对片内对片内RAMRAM中位寻址区操作。位累加器中位寻址区操作。位累加器CyCy和位地址和位地址b b。一位传送位传送MOVMOV C C,b b ;CyCy (b)(b)MOV MOV b b,C C ;(b)(b) CyCy例:将位地址例:将位地址2020H
42、 H的一位数传送到位地址的一位数传送到位地址3030H H中:中:MOV CMOV C,20H20H MOV 30HMOV 30H,C C二位清二位清0 0、置、置1 1、取反:、取反:CLRCLR、SETBSETB、CPLCPL: CLR C CLR C ;CyCy0 0, CLR 40HCLR 40H;( (位地址位地址4040H)H) 0 0三逻辑运算:三逻辑运算:ANLANL、ORLORL: ANL CANL C,40H 40H ;CC(40H)CC(40H)ANL CANL C, ;CCCC例:设例:设 Cy=1Cy=1,( (位地址位地址4040H)=1H)=1,执行指令执行指令
43、ANL CANL C, 后,后, Cy= Cy= ? , ( (位地址位地址4040H)= H)= ?位地址表示法位地址表示法:位地址位地址 4040H H,位寄存器位寄存器 F0F0,字节加位字节加位 ACC.0ACC.001 3-5-13-5-13-5-13-5-1 转移指令转移指令转移指令通过改写转移指令通过改写PCPC的当前值,从而改变的当前值,从而改变CPUCPU执执行程序的顺序,使程序发生跳转。行程序的顺序,使程序发生跳转。按转移条件分类:按转移条件分类:1)1)无条件转移无条件转移:执行无条件转移指令,程序无条件转移到指定处。执行无条件转移指令,程序无条件转移到指定处。2)2)条
44、件转移条件转移:指指令令中中给给出出转转移移条条件件,执执行行指指令令时时,先先测测试试条条件件,若若满满足足条条件件,则则程程序序发发生生转转移移,否否则则,仍仍顺顺序序执执行行程序。程序。按转移方式分类:按转移方式分类:1 1)绝对转移绝对转移:指令给出转移目的的绝对地址:指令给出转移目的的绝对地址 nnnn,执行指令后,执行指令后,PCPC nnnn。2)相对转移相对转移:指令给出转移目的与转移指令的相对偏:指令给出转移目的与转移指令的相对偏移量移量e e,执行指令后,执行指令后,PCPC PCPC + + e e 。 例:例: 地址地址源程序源程序10001000H H LJMP 20
45、00HLJMP 2000H1003H1003H 2000H2000H ;转移目的指令转移目的指令例:例: 地址地址 源程序源程序10001000H SJMP 02 H SJMP 02 1004H1004H ;转移目的指令转移目的指令一一. .无条件转移指令无条件转移指令 1. 1.长转移指令:长转移指令:LJMPLJMP nnnn ;PC PC nnnn 指令机器码:指令机器码: 02 02 nnnnH H nnnnL L指令转移范围:指令转移范围:6464KBKB 2.2.绝对转移指令:绝对转移指令:AJMPAJMP pnpn;PCPC PC+2PC+2;PCPC10100 0 pnpn10
46、100 0;PCPC15151111不变不变指令机器码:指令机器码:pnpn10108 8 0000100001,pnpn7 70 0 指令转移范围:指令转移范围:2 2KBKB转移时要求转移前后保持转移时要求转移前后保持 PCPC15151111不变。不变。相对偏移量相对偏移量 e e 的计算式的计算式: e = e = 目的指令地址目的指令地址 -( -(转移指令地址转移指令地址+ +指令字节数指令字节数) ) = = 目的地址目的地址 - - PCPC当前值当前值 3.3.短转移指令:短转移指令: SJMPSJMP e e ;PCPC PC+2PC+2,PCPC PC+ePC+e指令机器
47、码:指令机器码: 8080H H,e e 相对偏移量相对偏移量 e e为为8 8位补码。位补码。 指令转移范围:前指令转移范围:前128128后后127127字节字节 编程时,用标号代替转移目的地址,转移指令的操作编程时,用标号代替转移目的地址,转移指令的操作数交给汇编程序计算。数交给汇编程序计算。LJMP NEXT LJMP NEXT AJMP NEXTAJMP NEXT SJMP NEXTSJMP NEXT NEXT NEXT: 例例1 1:计算转移指令的相对偏移量计算转移指令的相对偏移量 e e ,并判断是否超并判断是否超出转移范围。出转移范围。相对偏移量相对偏移量 = 2150 = 2
48、150H -(2130H+2)= 001EHH -(2130H+2)= 001EH,只取低只取低8 8位:位:e = 1EH e = 1EH 指令机器码:指令机器码:80 180 1E HE H指令地址指令地址源程序源程序21302130H H SJMP NEXT SJMP NEXT 21502150H HNEXTNEXT:MOV AMOV A,R2R2 4间接转移指令间接转移指令( (多分支转移指令多分支转移指令) ) JMP A+DPTR. JMP A+DPTR. ;PCPC A+DPTRA+DPTR指令机器码指令机器码 7373H H,指令转移范围指令转移范围6464KBKB。KEY:K
49、EY: MOV DPTR,#KTAB MOV DPTR,#KTAB MOV A,40H MOV A,40H ADD A,A ADD A,A JMP A+DPTRJMP A+DPTRKTAB:KTAB: AJMP FUNC0 AJMP FUNC0 AJMP FUNC1AJMP FUNC1 FUNC0: FUNC0: FUNC1: FUNC1: 应用:应用:处理功能键。处理功能键。要求不同功能键执行不同程要求不同功能键执行不同程序段。设每个功能键对应一序段。设每个功能键对应一个键值个键值 X(0XFH)X(0XFH)。 设设X X已存入片内已存入片内RAMRAM的的4040H H单元中。单元中。若
50、若X=0X=0,则执行程序段则执行程序段FUNC0FUNC0若若X=1X=1,则执行程序段则执行程序段FUNC1FUNC1。 二条件转移指令二条件转移指令1. 1. 判零转移指令判零转移指令JZ e JZ e ;PCPC+2PCPC+2,;若若A=00HA=00H,PCPC+e(PCPC+e(转移转移) ),;若;若A00HA00H,PCPC不变不变( (不转移不转移) ) 条件转移指令形成程序的分支,赋予计算机判断决策能力条件转移指令形成程序的分支,赋予计算机判断决策能力转移条件:转移条件:1)1)标志位的状态标志位的状态 2) 2)位地址中的状态位地址中的状态 JNZ eJNZ e ;PC
51、PC+2PCPC+2,若若A00HA00H,;PCPC+ e(PCPC+ e(转移转移) ) ;若;若A=00HA=00H,PCPC不变不变( (不转移不转移) ) 2.2.判判CyCy转移指令转移指令JC e JC e ;Cy=1Cy=1则转移,则转移,Cy=0Cy=0不转移不转移JNC eJNC e;Cy=0Cy=0则转移,则转移,Cy=1Cy=1不转移不转移3.3.判位转移指令判位转移指令JB bJB b,e e ;(b)=1(b)=1转移,否则不转移转移,否则不转移JNB bJNB b,e e ;(b)=0(b)=0转移,否则不转移转移,否则不转移4. 4. 判位清判位清0 0转移指令
52、:转移指令:JBC bJBC b,e e ;(b)=1(b)=1转移转移, ,且且( (b)b) 0 0,否则不转移,否则不转移5. 5. 比较不相等转移指令:比较不相等转移指令: CJNECJNE 操作数操作数1 1,操作数,操作数2 2,e e CJNE ACJNE A,n n,e e ;PCPC+3PCPC+3;若若A(n)A(n),则则PCPC+ePCPC+e ;且当;且当A(n)A(n),Cy=0Cy=0,当当A(n)A(n),Cy=1Cy=1; ;若;若A =(n)A =(n),PCPC不变,且不变,且Cy=0Cy=0。 相当于两个操作数相减,仅影响标志状态,不保存结果相当于两个操
53、作数相减,仅影响标志状态,不保存结果6 6循环转移指令:循环转移指令:DJNZ DJNZ 操作数,操作数,e e DJNZ R2DJNZ R2,e e ;PCPC+2PCPC+2,R2R2-1R2R2-1 ;若;若R20R20,PCPC+ePCPC+e, ;若若R2=0R2=0,PCPC不变。不变。例:用于循环结构程序。设要求程序循环执行例:用于循环结构程序。设要求程序循环执行100100次次MOV R2MOV R2,#100 #100 ;设循环计数器初值设循环计数器初值LOOPLOOP: ;多次循环程序段多次循环程序段 DJNZ R2DJNZ R2,LOOPLOOP;循环控制循环控制 ;循环
54、结束;循环结束思考:当循环计数器初值为当循环计数器初值为0 0,循环次数有多少?,循环次数有多少?3-6-13-6-13-6-13-6-1 子程序调用和返回指令子程序调用和返回指令子程序调用和返回指令也使程序发生转移。子程序调用和返回指令也使程序发生转移。一长调用指令一长调用指令LCALL LCALL nnnn ;SPSP SP+1SP+1,(SP)(SP) PCPCL L,SPSP SP+1SP+1,(SP)(SP) PCPCH H;PCPC nnnnnnnn为子程序起始地址,编程时可用标号代替。为子程序起始地址,编程时可用标号代替。指令调用范围:指令调用范围:6464KBKB子程序调用过程
55、:子程序调用过程:与转移指令不同与转移指令不同, ,转移时,转移时,先用堆栈保存当前地址先用堆栈保存当前地址二绝对调用指令二绝对调用指令ACALL ACALL pnpn ;SPSP SP+1SP+1,(SP)(SP) PCPCL L,SPSP SP+1SP+1,(SP)(SP) PCPCH H ;PCPC10100 0 pnpn10100 0 ;PCPC15151111不变不变pnpn为为子程序首地址子程序首地址指令调用范围指令调用范围 2 2KBKB。三子程序返回指令三子程序返回指令RETRET ;PCPCH H (SP)(SP),SPSP SP-1SP-1,PCPCL L (SP)(SP)
56、,SPSP SP-1SP-1RETRET指令从堆栈弹出保存的指令从堆栈弹出保存的PCPC地址,实现子程序返回。地址,实现子程序返回。 2020H H 92H92H2121H H 53H53H SPSP SPSP SPSP SPSP SPSP PCPC 2000H 208FH 2092H 2100H 2150H 2153H 2200H 2250H 2251H 2153H 2092H 21FFH 2200H SPSP SPSP SPSP SPSP SPSP SPSP SPSP SPSP MAINMAIN:MOV SPMOV SP,#30H#30H;设置栈底设置栈底 LCALL SUBLCALL SUB ;调用子程序调用子程序 SUB: SUB: ;子程序段子程序段 RETRET ;返回主程序返回主程序例:子程序嵌套例:子程序嵌套注意:注意:1.子程序起始指令要使用标号,用作子程序名。子程序起始指令要使用标号,用作子程序名。 2. 执行返回指令执行返回指令RET之前,保证栈顶内容为主之前,保证栈顶内容为主程序返回地址,以便正确返回主程序。程序返回地址,以便正确返回主程序。常用格式常用格式:MAINMAIN:;主程序主程序LCALLLCALL SUBR SUBR;调用调用SUBRSUBRSUBRSUBR:;子程序首地址子程序首地址RETRET;子程序返回子程序返回