电气工程学院ElectricalEngineeringInstituteofNEDU2020年2月6日星期四第3章AT89S51的指令系统3.1指令格式3.2寻址方式3.3数据传送类指令(29条)3.4算术运算类指令(24条)3.5逻辑运算与循环类指令(24条)3.6控制转移类指令(17条)3.7位操作类指令(17条)3.8源程序的编辑与汇编电气工程学院ElectricalEngineeringInstituteofNEDU2020年2月6日星期四3.1指令格式及常用符号3.1.1符号指令的格式汇编语言:用指令助记符号表示一般格式为:操作码助记符[目的操作数][,源操作数][;注释]“[]”,包含的内容因指令的不同可有可无。机器语言:用二进制代码表示电气工程学院ElectricalEngineeringInstituteofNEDU2020年2月6日星期四3.389s51的寻址方式寻址方式:寻找操作数的方式。8051的寻址方式有七种。即:寄存器寻址、直接寻址、寄存器间接寻址、立即寻址、变址寻址、相对寻址和位寻址。对于两操作数指令,源操作数有寻址方式,目的操作数也有寻址方式。电气工程学院ElectricalEngineeringInstituteofNEDU2020年2月6日星期四操作数存放在寄存器中。指令中直接给出该寄存器名称。传送和运算速度快。寄存器可以是:R0-R7;A(ACC表示A属于直接寻址);B(以AB成对形式出现);DPTR、C。3.2.1寄存器寻址30H00HASFRR030HMOVA,R0E8HROMRAM如:MOVA,R0电气工程学院ElectricalEngineeringInstituteofNEDU2020年2月6日星期四指令操作码后是操作数的地址,从该地址取操作数。寻址空间:片内RAM低128字节(以地址形式表示);SFR(以地址或SFR的符号形式表示)例:MOVA,50H(MOV0E0H,50H;MOVACC,50H)3.2.2直接寻址3AH50HASFR3AHMOVA,50HE5HROMRAM50H电气工程学院ElectricalEngineeringInstituteofNEDU2020年2月6日星期四3.2.3寄存器间接寻址寄存器中的内容为地址,从该地址取操作数。寻址空间:片内RAM(@R0,@R1,SP)片外RAM(@R0,@R1,@DPTR)。例:MOV@R1,AMOVX@DPTR,A电气工程学院ElectricalEngineeringInstituteofNEDU2020年2月6日星期四如:MOVA,@R05AH30HASFR5AHMOVA,@R0E6HROMRAM30HR03.2.3寄存器间接寻址电气工程学院ElectricalEngineeringInstituteofNEDU2020年2月6日星期四指令编码中直接给出操作数。立即数可以为一个字节,也可以是两个字节,用符号“#”来标识。寻址空间为:ROM3.2.4立即寻址00HASFR50HMOVA,#50H74HROMRAM50H例:MOVA,#50H电气工程学院ElectricalEngineeringInstituteofNEDU2020年2月6日星期四一个基地址加上一个偏移量地址形成操作数地址。DPTR或PC作为基址寄存器,A作为偏移量寄存器。寻址空间为:ROM(@A+DPTR,@A+PC)3.2.5变址寻址例:MOVCA,@A+DPTR00HASFR0FHMOVCA,@A+DPTR93HROMRAMDPL00HDPH24H88H2400H+0FH=240FH240FH电气工程学院ElectricalEngineeringInstituteofNEDU2020年2月6日星期四以程序计数器PC的当前值为基准,加上指令中给出的相对偏移量rel形成目标地址。rel是8位补码。3.2.6相对寻址例:JCrel;rel=75H00HPSWSFR10000000ROMRAM1000H+02H=1002H1077HJCrel40H75H1000H1001H1002H1002H+75H=1077HPC值字节数当前PC值偏移量新PC值注意此例中CYPSW.7)为1电气工程学院ElectricalEngineeringInstituteofNEDU2020年2月6日星期四对位地址中的内容进行操作。指令中给出的是位地址。寻址空间:片内RAM的20H-2FH单元中的128可寻址位;SFR的可寻址位。位地址四种表示形式:直接位地址,如0D0H;位名称,如P;点操作符,PSW.0或0D0.0;(常用)用户定义名,JOBITP3.2.7位寻址电气工程学院ElectricalEngineeringInstituteofNEDU2020年2月6日星期四Rn(n=0-7)-----当前工作寄存器组中的R0-R7之一;Ri(i=0,1)----当前工作寄存器组中R0或R1;@-------------间址寄存器前缀;#data----------立即数;direct----------片内RAM单元地址及SFR地址(可用符号名称表示);3.2.8符号指令及其注释中常用的符号电气工程学院ElectricalEngineeringInstituteofNEDU2020年2月6日星期四addr11-----------11位目的地址;addr16-----------16位目的地址;rel--------------补码形式表示的8位地址偏移量;bit--------------片内RAM位地址、SFR的位地址(可用符号名称表示);/----------------位操作数的取反操作前缀;(×)-----------表示×地址单元或寄存器中的内容;((×))-------表示以×单元或寄存器内容为地址间接寻址单元的内容;3.2.8符号指令及其注释中常用的符号电气工程学院ElectricalEngineeringInstituteofNEDU2020年2月6日星期四3.3数据传送类指令(29条)这类指令一般不影响PSW。传送类指令可以分成两大类:采用MOV操作符,称为一般传送指令;采用非MOV操作符,称为特殊传送指令,如:MOVC、MOVX、PUSH、POP、XCH、XCHD及SWAP。电气工程学院ElectricalEngineeringInstituteofNEDU2020年2月6日星期四3.3.1一般传送指令一、16位传送MOVDPTR,#data例如:执行指令MOVDPTR,#1234H后(DPH)=12H,(DPL)=34H。电气工程学院ElectricalEngineeringInstituteofNEDU2020年2月6日星期四二、8位传送1.以A为目的MOVA,RnMOVA,directMOVA,@RiMOVA,#data例:若(R1)=20H,(20H)=55H,执行指令MOVA,@R1后,(A)=55H。3.3.1一般传送指令电气工程学院ElectricalEngineeringInstituteofNEDU2020年2月6日星期四2.以Rn为目的MOVRn,AMOVRn,directMOVRn,#data(目的字节为工作寄存器,源字节不能是寄存器及寄存器间址寻址)。例:若(50H)=40H,执行指令MOVR6,50H后,(R6)=40H。3.3.1一般传送指令电气工程学院ElectricalEngineeringInstituteofNEDU2020年2月6日星期四3.以direct为目的MOVdirect,AMOVdirect,RnMOVdirect,directMOVdirect,@RiMOVdirect,#data例:若(R1)=50H,(50H)=18H,执行指令MOV40H,@R1后,(40H)=18H。3.3.1一般传送指令电气工程学院ElectricalEngineeringInstituteofNEDU2020年2月6日星期四4.以@Ri为目的MOV@Ri,AMOV@Ri,directMOV@Ri,#data目的字节采用寄存器间接寻址,源字节不能是寄存器及寄存器间址寻址。例:若(R1)=30H,(A)=20H,执行指令MOV@R1,A后,(30H)=20H。3.3.1一般传送指令电气工程学院ElectricalEngineeringInstituteofNEDU2020年2月6日星期四3.3.2特殊传送指令特殊传送指令的操作符为:MOVC、MOVX、PUSH、POP、XCH、XCHD和SWAP。功能分别为:ROM查表、外部RAM读写、堆栈操作和交换指令电气工程学院ElectricalEngineeringInstituteofNEDU2020年2月6日星期四一、ROM查表1.DPTR内容为基址MOVCA,@A+DPTR;(A)←((A)+(DPTR))2.PC内容为基址MOVCA,@A+PC;(A)←((A)+(PC))3.3.2特殊传送指令电气工程学院ElectricalEngineeringInstituteofNEDU2020年2月6日星期四二、读写片外RAM1.读片外RAMMOVXA,@DPTR;(A)←((DPTR))MOVXA,@Ri;(A)←((Ri))第一条指令指令执行时,DPH中高8位地址由P2口输出。DPL中低8位地址由P0口输出,ALE信号锁存地址。第二条指令执行时,高位地址由P2口提供。低8位地址在Ri中由P0口输出,ALE信号锁存地址。引脚信号选通片外RAM单元,数据从P0口读入A中。RD3.3.2特殊传送指令电气工程学院ElectricalEngineeringInstituteofNEDU2020年2月6日星期四2.写片外RAMMOVX@DPTR,A;((DPTR))←(A)MOVX@Ri,A;((Ri))←(A)引脚信号有效,累加器A的内容从P0口输出并写入选通的相应片外RAM单元。WR3.3.2特殊传送指令电气工程学院ElectricalEngineeringInstituteofNEDU2020年2月6日星期四;例:数据块传送,内部部RAM20H传至外部;RAM1000H,30个字节ORG100HMOVDPTR,#1000HMOVR0,#20HMOVR2,#30LOOP:MOVA,@R0MOVX@DPTR,AINCDPTRINCR0DJNZR2,LOOPSJMP$END电气工程学院ElectricalEngineeringInstituteofNEDU2020年2月6日星期四三、堆栈操作堆栈是在内部RAM中按“后进先出”的规则组织的一片存储区。栈顶的位置(地址)由栈指针SP指示。系统复位时,SP的内容为07H。PUSHdirect;(SP)←(SP)+1,((SP))←(direct)POPdirect;(direct)←((SP)),(SP)←(SP)-1例:若(SP)=07H,(40H)=88H,执行指令PUSH40H后,(SP)=08H,(08H)=88H。3.3.2特殊传送指令电气工程学院ElectricalEngineeringInstituteofNEDU2020年2月6日星期四四、数据交换交换类指令完成的传送是双向的,是两字节间或两半字节间的双向交换。1.字节交换))(();()();()();(,RiA@RidirectAdirectRnARnAXCH例:若(R0)=80H,(A)=20H。执行指令XCHA,R0后,(A)=80H,(R0)=20H。3.3.2特殊传送指令电气工程学院ElectricalEngineeringInstituteofNEDU2020年2月6日星期四2.半字节交换XCHD指令间址操作数低半字节与A低半字节内容互换。SWAP指令是累加器高低4位互换。例:若(R0)=30H,(30H)=67H,(A)=20H。执行指令XCHDA,@R0指令后,结果(A)=27H,(30H)=60H。若(A)=30H,执行指令SWAPA后,结