您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > 第二章微型计算机的组成及微处理器的功能结构
第二章指令系统内容提要寻址方式传送与交换指令算术运算、逻辑运算指令控制转移指令位操作指令计算机通过执行程序完成人们指定的任务,程序由一条一条指令构成,能为CPU识别并执行的指令的集合就是该CPU的指令系统。MCS-51单片机汇编语言指令格式:操作符目的操作数,源操作数操作符指明该指令完成什么操作;操作数是指明该指令的操作对象。目的操作数是存放结果的。指令中操作数提供的方式称为寻址方式。指令中的常用符号Rn:n=(0~7),表示当前工作寄存器R0~R7中的一个。Ri:i=(0、1),代表R0和R1寄存器中的一个,用作间接寻址寄存器。dir:8位直接字节地址(片内RAM和SFR)#data:8位立即数,即8位常数。可以为2进制(B)、10进制、16进制(H)、字符(‘’)、data16:表示16位立即数,即16位常数,取值范围为#0000H~#0FFFFHaddr16:表示16位地址addr11:表示11位地址rel:相对偏移量(为一字节补码)用于相对转移指令中bit:位地址,在位地址空间中。$:表示当前指令的地址。2.1寻址方式1、立即寻址指令中直接给出操作数的寻址方式。在51系列单片机的指令系统中,立即数用一个前面加“#“号的8位数(#data,如#30H)或16位数(#data16,如#2052H)表示。立即寻址中的数,称为立即数。例如指令:MOVA,#30H2、直接寻址操作数的地址直接出现在指令中。寻址对象:①内部数据存贮器:使用它的地址。②特殊功能寄存器:既可使用它的地址,也可以直接使用寄存器名。41H78H40H56H41H78H40H78H例:MOVA,40H;A=56H机器码E540MOVP0,#45H;45H→P0,P0为直接寻址的SFR,其地址为80H,机器码为758045MOV40H,41H;机器码为854140内部RAM(41H)→(40H)(40H)=(41H)=78H3、寄存器寻址操作数存放在寄存器中。寻址对象:A,B,DPTR,R0~R7。B仅在乘除法指令中为寄存器寻址,在其他指令中为直接寻址。A可以寄存器寻址又可以直接寻址,直接寻址时写作ACC例如:MOVA,R0;R0→A,A、R0均为寄存器寻址,机器码E8MULAB;A*B→BA,A、B为寄存器寻址,机器码A4MOVB,R0;R0→B,R0为寄存器寻址,B为直接寻址机器码88F0,其中F0为B的字节地址(见表1-2)PUSHACC;A的内容压入堆栈机器码C0E04、寄存器间址操作数存放在以寄存器内容为地址的单元中。例如MOVR0,#20HMOV@R0,A;A→(20H)地址的内部RAMMOVXA,@R1;外部RAM(地址为P2R1)的内容→AMOVX@DPTR,A;A→以DPTR内容为地址的外部RAM5、变址寻址以DPTR或PC寄存器内容为基地址,和A的内容为相加形成操作数的地址。其中累加器A内容是可变的。例如:MOVCA,@A+DPTR6、相对寻址相对寻址是将程序计数器PC的当前值与指令第二字节给出的偏移量相加,从而形成转移的目标地址。例如:JZ61H7、位寻址对片内RAM中20H~2FH中的128个位地址及SFR中的可位寻址的位地址寻址。例如:MOVC,20H;20H位的内容送CY标志位,C称为位累加器。MOVA,20H;字节寻址,将内部RAM中20H单元中的内容送给累加器A。以上两条指令均为寻址,究竟是位寻址还是字节寻址,根据两操作数类型一致的原则,由另一个操作数决定。dir@RiRn#dataAMOVA,Rn#datadir@RiMOVdir,ARn,@Ri#datadirMOVRn,MOV@Ri,Adir#data一、内部RAM、SFR之间的传送MOV指令Adir#data例R1=20H,(20H)=55H,指令MOVA,@R1执行后,A=55H。例(40H)=30H,指令MOVR7,40H执行后,R7=30H。例MOVR7,#40H执行后,R7=40H。例判断下列指令的正误:MOV29H,R7MOV25H,P1MOV56H,#70HMOV34H,28HMOVR3,R7MOV@R3,R7MOVR3,#D2HMOV#34H,28HMOVA,#280HMOVP3,P1编程将R3的内容送R1。√√×√×√√××√MOVA,R3MOVR1,AA外部数据存储器程序存储器@Ri,A@DPTR,AA,@RiA,@DPTRMOVXMOVCA,@A+PCA,@A+DPTR2、外部存储器和A累加器之间的传送MOVXMOVCMOVX指令举例例:实现片外数据存储器数据传送(2000H)→(2100H)。MOVDPTR,#2000HMOVXA,@DPTRMOVDPTR,#2100HMOVX@DPTR,A片外RAM地址内容2000HX…DPTR→2100H;DPTR=2000H;DPTR=2100H;A←X片外RAM地址内容2000HX…DPTR→2100H;(2100H)←Xx片外数据存储器不能直接寻址。下列为非法指令:MOVXA,2000H×MOVX2100H,2000H×使用P2口和8位寄存器Ri间址:MOVP2,#20H;高位地址MOVR0,#00;低位地址MOVXA,@R0;读片外RAMMOVP2,#21H;改变高位地址MOVX@R0,A;写片外RAM查表指令MOVC注:①只能从程序存储器读取数据到A累加器。②只能使用变址间接寻址方式多用于查常数表程序,直接求取常数表中的函数值1)DPTR为基址寄存器MOVCA,@A+DPTR;A←(A+DPTR)查表范围为64KB程序存储器任意空间。2)PC为基址寄存器MOVCA,@A+PC;A←(A+PC)常数表只能在查表指令后256B范围内。例查表法求Y=X2。设X(0≤X≤15)在片内RAM20H单元,要求将查表求Y,存入片内RAM21H单元1)用DPTR作基址寄存器ORG0100HSQU:MOVDPTR,#TAB;确定表首地址MOVA,20H;取XMOVCA,@A+DPTR;查表求Y=X2MOV21H,A;保存YRET;子程序结束…;其它程序段ORG0200H;常数表格首地址TAB:DB00,01,04,09,…,225;平方表指令地址源程序ORG0100H;程序起始地址0100HSQU:MOVA,20H;取X0102HADDA,#3;修正偏移量0104HMOVCA,@A+PC;查表求Y=X20105HMOV21H,A;存结果0107HRET;子程序结束0108HTAB:DB00,01,04;平方表010BHDB09,…,225思考题当0≤X≤255时,如何用查表法编程求Y=X22)用PC作基址寄存器(四)堆栈操作指令入栈指令:PUSHdir;SP←SP+1,(SP)←(dir)例:设A=02,B=56H,执行下列指令序列后,SP=?A=?,B=?SBR:MOVSP,#30HPUSHAPUSHBMOVA,#0MOVB,#01…POPBPOPARET;设栈底;保护现场;恢复现场出栈指令:POPdir;(dir)←(SP),SP←SP-1×××SP→02×××SP→5602×××56SP→02×××5602SP→×片内RAM34H33H32H31H30H××××SP→×堆栈操作示意:(三)交换指令实现片内RAM区的数据双向传送1.字节交换指令XCHA,Rn;A←→RnXCHA,@Ri;A←→(Ri)XCHA,n;A←→(n)习题将片内RAM60H单元与61H单元的数据交换例设A=29H,(2AH)=38H执行指令XCHA,2AH后,A=?,(2AH)=?38H29HXCH60H,61H←对吗?dir@RiARn图2.8XCH交换指令示意图2.半字节交换指令XCHDA,@Ri;A0~3←(Ri)0~3SWAPA;A4~7←A0~3例3-4-3:将片内RAM2AH和2BH单元中的ASCII码转换成压缩式BCD码存入20H单元压缩式BCD码千位百位十位个位单字节BCD0000千位0000百位0000十位0000个位片内RAM地址内容2BH35H2AH38H…20H数字0~9的ASCII码30H~39H85H压缩的BCD码和非压缩的BCD码见图如1823压缩的BCD码为1823H非压缩的BCD码为01080203H非压缩BCD×◎◎×AA08例3-4-3将片内RAM2AH和2BH单元中的ASCII码转换成压缩式BCD码存入20H单元MOVA,#00H;A=00MOVR0,#2AH片内RAM地址内容2BH35H2AH38H…20H85HR1→R0→习题:交换片内RAM40H单元和41H单元的低半字节00MOVR1,#2BHXCHDA,@R0SWAPAXCHDA,@R1XCHA,20H;低4位交换A=08;A=80H;低4位交换;(20H)=85H3800A358085@R1@R03030dir@RiRn#dataAdir@RiRn#dataAADDADDCSUBBANLORLXRLA,Rn,@Ri#datadir加进位加借位减与或异或以A为目的操作数的算术、逻辑运算指令(24条)以dir为目的操作数逻辑运算指令(6条)A#datadir与ANL或ORL异或XRLdir,#dataA算术类指令的操作意义非常明确,不一一赘述,注意减指令只有带借位减,因此在多字节减法中,最低字节作减法时,注意先清CY。逻辑运算是按位进行的,两数运算的运算法则是:与:有“0”则“0”;或:有“1”则“1”异或:同为“0”,异为“1”;与“0”异或值不变:与“1”异或值变反。逻辑指令常用于对数据位进行加工。000011111000011010001111000011111000011010001001例:A=0FH,执行XRLA,#86H后A=06HH例:A=0FH,执行ORLA,#86H后A=8FH例:A=0FH,执行XRLA,#86H后A=89H+图2.13INC、DEC指令+-1+-1+-1RndirA+-1@Ri+1DPTR图2.14INCDPTRARn@RidirDPTRINC减1指令:DECARn@Ridir加1指令:提问:没有DECDPTR指令,怎么解决DPTR的减1?2.3.5十进制调整指令计算机完成二进制加法其和也为二进制,如果是十进制相加(即BCD码相加)想得到十进制的结果,就必须进行十进制调整(即BCD码调整)。调整指令:DAA;将A中二进制相加和调整成BCD码调整方法:和低4位大于9或有半进位则低4位加6;和的高4位大于9或有进位,则高4位加6。指令根据相加和及标志自行进行判断,因此该指令应紧跟在加指令之后,至少在加指令和该指令之间不能有影响标志的指令。DAA指令只对一个字节和调整,如为多字节相加必须进行多次调整。此指令不能对减法结果进行调整。例2-13完成56+17的编程。MOVA,#56H;A存放BCD码56HMOVB,#17H;B存放BCD码17HADDA,B;A=6dHDAA;A=73HSJMP$56H17H6dH673H++指令对标志位的影响有如下规律:1)凡是对A操作指令(包括传送指令)都将A中1个的奇偶反映到PSW的P标志位上。即A中奇数个“1”,P=1;偶数个“1”,P=0。2)传送指令、加1、减1指令、逻辑运算指令不影响Cy、OV、AC标志位。3)加减运算指令影响标志位,乘除指令使Cy=0,当乘积大于255,或除数为0时,OV置1。4)对进位位Cy(指令中用C表示)进行操作的指令和大环移指令,显然会影响Cy。具体指令对标志位的影响可参阅附录A。标志位的状态是控制转移指令的条件,因此指令对标志位的影响应该记住。例2:A=9AH,R2=E3H,PSW=0,执行指令ADDCA,R2后求:A=,Cy=,OV=,AC=,P=PSW=?1001101011100011+01011111017DH110010000100=84HCYACF0RS1RS0OV---P10000100CYCYRRARLARLCARRCA移位指令(
本文标题:第二章微型计算机的组成及微处理器的功能结构
链接地址:https://www.777doc.com/doc-3637591 .html