2020/2/181第三章MCS-51指令系统与汇编语言程序设计基础范能胜2020/2/182主要内容:基本概念和MCS-51指令系统简介寻址方式(第一章)指令系统汇编程序设计的方法2020/2/183基本概念:指令:能完成特定功能的命令;指令系统:CPU的各种指令的集合;2020/2/184MCS-51指令系统简介MCS-51的指令系统共7种寻址方式、111条基本指令、42种助记符来表达33种功能。MCS-51指令系统按指令功能分为5大类:数据传送类:29条算术运算类:24条逻辑运算类:24条控制转移类:17条位操作类:17条2020/2/185MCS-51指令系统按指令执行时间分为3大类:MCS-51指令系统按指令字节数分为3大类:单字节指令:49条双字节指令:45条三字节指令:17条单周期指令:64条双周期指令:45条四周期指令:2条2020/2/186指令中使用的描述符号:Rn(n=0~7):表示工作寄存器组R0~R7中的某一寄存器。@Ri(i=0~1):以寄存器R0或R1作为间接寻址,表示操作数地址在寄存器R0或R1中,“@”是间接寻址标识符。@DPTR:以数据指针DPTR(16位)作为间接寻址,操作数在外部存储器中,“@”也是间接寻址标识符。2020/2/187#data:8位立即数,其中“#”是立即数标识符。#data16:16位立即数,其中“#”也是立即数标识符,用于初始化数据指针DPTR。2020/2/188direct:表示直接寻址的地址,即8位内部数据存储器RAM的单元地址或特殊功能寄存器SFR的地址。bit:内部数据存储器RAM和特殊功能寄存器SFR中的可直接寻址位地址。/:位求反后参与操作,不影响该位。2020/2/189rel:相对地址,以补码形式表示的地址偏移量,范围为-128~+127。addr11:11位目的地址,目的地址应与下条指令处于相同的2KB程序存储器地址空间范围内。addr16:16位目的地址,目的地址可在全部程序存储器的64KB空间范围内。2020/2/1810累加器不同写法代表的寻址方式:1、写作“A”:寄存器寻址;2、写作“Acc”:直接寻址;注意:对于既能够用寄存器寻址,又能够用直接寻址的指令,两种写法都可以;但对于只能使用其中一种寻址方式的指令,则必须严格区分累加器的写法。2020/2/1811X:表示X中的内容。(X):表示由X寻址的单元中的内容,即(X)作地址。,符号:表示指令操作流程,将箭头一方的内容,送入箭头另一方的单元中去。2020/2/1812§1.2寻址方式1、计算机寻址方式的定义?2、不同类型指令的寻址方式?1)只有操作码的指令不存在寻址方式;2)双操作数指令中两个操作数都有自己的寻址方式。3、指令中操作数的限定:寄存器、存储单元、I/O端口号、立即数。2020/2/1813MCS-51MOVP1,#80HMOVR7,#0F5HMOVDPTR,#1245H一、立即寻址(ImmediateAddressing)操作数在指令代码中,位于操作码之后,称为立即数,用“#”表示;属双字节指令。8086/8088MOVAL,80HMOVAL,0F5HMOVBX,1245H2020/2/18147423……PCPC+12000H2001H2002H23例:MOVA,#23HA注:立即数必须小于或等于目标操作数2020/2/1815MCS-51MOVA,80HMOV30H,40H二、直接寻址(DirectAddressing)使用操作数作为某一单元的地址编码。属双字节指令。8086/8088MOVAL,[2000H]操作数在SFR、内部RAM低128B。2020/2/1816E523…PCPC+12000H2001H2002H55PC+2550023HAMOVA,23H…2020/2/1817三、寄存器寻址(RegisterAddressing)对选定的寄存器中的数进行操作。MCS-51如:MOVA,R0MOVR0,A8086/8088MOVAL,BLMOVSI,AX操作数在寄存器R0~R7、A、B、DPTR中2020/2/1818解答:这两条指令执行的结果是完全相同的,都是将00H单元中的内容送到A中去,执行时间都是1个机器周期,但指令的长度不同,第一条指令变成最终的目标码要两个字节(E5H00H),而第二条则只要一个字节(E8H)就可以了。问题:如果选择工作寄存器组0,则R0就是RAM的00H单元,则MOVA,00H和MOVA,R0是否有区别?2020/2/1819四、寄存器间接寻址(RegisterIndirectAddressing)把地址放在另外一个寄存器中,根据这个寄存器中的地址决定该到哪个单元中取数据。MCS-51如:MOVA,@R0MOVXA,@R0MOVXA,@DPTR8086/8088MOVAL,[BX]MOVAX,[SI]操作数在片内和片外RAM区,地址存放在间址寄存器(R0、R1、DPTR)里R0,R1——8位地址,片内外128B(256B)DPTR——16位,片外64KB2020/2/1820例:MOVR0,#23HMOVA,@R0E6…PCPC+12000H2001H2002H55PC+2550023HA……2020/2/1821以DPTR或PC为基址寄存器,累加器A为变址寄存器。把两者内容相加,结果作为操作数的地址;常用于查表操作。MCS-51如:MOVCA,@A+DPTR;(A+DPTR)→AMOVCA,@A+PC;PC+1→PC,(A+PC)→A五、变址寻址(基址+变址)(Base-Register-plus-Index-Register-IndirectAddressing)8086/8088MOVAL,[BX+SI]MOVAX,[BP+DI]2020/2/1822E0A程序存储区2040H9320E0H472041H………DPH20DPL00ALU例:MOVCA,@A+DPTR设DPTR=2000H,A=E0H20E0H47指令代码2020/2/1823E0A程序存储区ALUMOVCA,@A+PC设A=E0H2121H452040H832121H452041H………2120H47当前PC指令代码操作数在程序存储器ROM中例:2020/2/1824六、相对寻址(RelativeAddressing)以程序计数器PC的当前值加上指令中给出的相对地址rel作为程序计数器的值,偏移量为-127~128;常用于跳转指令。MCS-51如:JZ23H若C=0,不跳转;C=1,跳转。PC=PC+2+238086/8088JCX1JNZX2直接寻址方式短转移2020/2/1825程序存储区ALU例:JZ23H2025H2000H602025H452001H23……2024H472002H3023H2002H指令代码当前PC操作数在程序存储器ROM中2020/2/1826对片内RAM的位寻址区和某些可位寻址的特殊功能寄存器进行位操作时的寻址方式。MCS-51如:SETB3DH;将27H.5位置1CLRC;Cy位清0七、位寻址(BitAddressing)8086/8088无此寻址方式操作数在片内RAM的可位寻址区或SFR某些位中2020/2/1827寻址方式与相关存储器空间寻址方式寻址空间(利用的变量)立即寻址程序存储器直接寻址片内RAM低128字节、SFR(direct、SFR)寄存器寻址片内存储器(R0~R7、A、B、DPTR)寄存器间接寻址片内RAM(@R0,@R1,@SP)片外RAM与I/O口(@R0,@R1,@DPTR)变址寻址程序存储器(@A+PC,@A+DPTR)相对寻址程序存储器256字节范围内(rel)位寻址片内RAM的位寻址区(20H~2FH字节地址)某些可位寻址的SFR(bit)2020/2/1828指出下列指令操作数的寻址方式MOVA,20HMOVA,#20HMOVA,@R0MOVDPTR,#1234HMOVA,@A+DPTRMOV23H,CMOVP1.0,CINCP0INCAMOVP1,32HJCNEXTPUSHAcc2020/2/1829§3.2指令系统一、数据传送指令:助记符:MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP源操作数寻址方式(5种):立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址。2020/2/1830目的操作数寻址方式(3种):直接寻址、寄存器寻址、寄存器间接寻址。除了目的操作数为A的指令影响奇偶标志P和Z外,一般不影响标志位Cy、AC、OV。2020/2/1831MCS-51传送指令示意图2020/2/1832①以累加器为目的操作数的指令(4条)MOVA,Rn;ARnMOVA,direct;A(direct)MOVA,@Ri;A(Ri)MOVA,#data;Adata②以寄存器Rn为目的操作数的指令(3条)MOVRn,A;ARnMOVRn,direct;Rn(direct)MOVRn,#data;Rndata(一)片内RAM之间以及片内RAM与寄存器之间数据传送指令有没有MOVRn,Rn指令?2020/2/1833③以直接地址为目的操作数的指令(5条)MOVdirect,A;(direct)AMOVdirect,Rn;(direct)RnMOVdirect1,direct2;(direct1)(direct2)MOVdirect,@Ri;(direct)(Ri)MOVdirect,#data;(direct)data例:MOV20H,AMOV0A0H,#34HMOVP2,#34H2020/2/1834④以Ri间接地址为目的操作数的指令(3条)MOV@Ri,A;(Ri)AMOV@Ri,direct;(Ri)(direct)MOV@Ri,#data;(Ri)data⑤十六位立即数的传递指令(1条)MOVDPTR,#data16;DPH#data15~8,DPL#data7~08051是一种8位机,这是唯一的一条16位立即数传递指令。2020/2/1835表3-1的一些说明:低128B内部RAM各单元之间以及特殊功能寄存器之间可以直接传送,如:MOV32H,90HMOV32H,43H(特别注意此处与8086的不同)SFR只能用直接寻址访问,高128B内部RAM只能用寄存器间接寻址,如:MOV32H,90H————90H表示SFRMOVR0,#90HMOVB,@R0,——90H表示一个RAM单元2020/2/1836低128B内部RAM既可以直接访问也可以间接访问,如:MOV32H,#23HMOVR0,#32HMOV@R0,#23H对于SFR既可以用寄存器名表示也可以直接用地址表示,如:MOVP1,#23HMOV90H,#23H2020/2/1837MOVB,A中的目的操作数B属于直接寻址方式。一条指令中只允许其中一个操作数采用间接寻址方式,如:MOVR0,#82HMOVA,@R0MOVR0,#83HMOVR1,#84HMOV@R0,@R1书例3.1P77~78√×2020/2/1838例3.1在仿真机上,用单步方式执行下列指令,并观察指令执行前后,内部RAM有关单元内容和程序状态字寄存器PSW中Cy、AC、OV、P等标志位的变化,了解数据传送指令对标志位的影响。MOV30H,#01HMOVA,30HMOVA,#03HMOV30H,#07H2020/2/1839(二)外部RAM及I/O与A之间的数据传递指令MOVXA,@DPTR;A(DPTR)MOVX@DPTR,A;(DPTR)AMOVXA,@Ri;A(Ri)MOVX@Ri,A;(Ri)A说明:1)在前两条指令中,地址是被直接放在DPTR中的;而后两条指令,由于Ri(即R0或R1)只是8位的寄存器,所以只提供低8位地址,高8位地址由P2口来提供。2020/2/