第二章微型计算机的组成及微处理器的功能结构

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第二章指令系统内容提要寻址方式传送与交换指令算术运算、逻辑运算指令控制转移指令位操作指令计算机通过执行程序完成人们指定的任务,程序由一条一条指令构成,能为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~#0FFFFHaddr16:表示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内容为地址的外部RAM5、变址寻址以DPTR或PC寄存器内容为基地址,和A的内容为相加形成操作数的地址。其中累加器A内容是可变的。例如:MOVCA,@A+DPTR6、相对寻址相对寻址是将程序计数器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”异或值变反。逻辑指令常用于对数据位进行加工。000011111000011010001111000011111000011010001001例: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码56HMOVB,#17H;B存放BCD码17HADDA,B;A=6dHDAA;A=73HSJMP$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移位指令(

1 / 60
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功