欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    第2章指令系统与汇编语言程序设计.ppt

    • 资源ID:6354557       资源大小:898.01KB        全文页数:53页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第2章指令系统与汇编语言程序设计.ppt

    第2章 指令系统与汇编语言程序设计,2-1 指令格式,2-2 指令寻址方式,2-3 状态标志,2-4 MCS-51指令系统,单片机指令系统概述,一、MCS-51指令分类 MCS-51单片机共有111条指令。1按指令所占的字节数分类 单字节指令49条 双字节指令46条 三字节指令16条 每条指令的平均字节数:,2按指令执行时间长短分 单周期指令65条 双周期指令44条 四周期指令2条 每条平均执行时间:,2-1 指令格式,一.汇编语言指令格式标号:操作码 操作数1,操作数2;注释换行表示一条指令结束。例:LOOP:MOV A,#40H;取参数1.标号:指令的符号地址2.操作码:指明指令功能。3.操作数:指令操作对象数据、地址、寄存器名及约定符号。4.注释行:说明指令在程序中的作用。操作码和操作数是指令主体。,MOV _move传送XCH _exchange交换ANL _and logic与逻辑运算XRL _exclusive or异或运算MUL _Multiply乘法RR _rotate right右循环SJMP _short jump短跳转RET _return 子程序返回,二.机器语言指令格式,操作码 操作数1 操作数2有单字节、双字节和三字节指令。汇编语言指令中操作码和操作数是指令主体,称为指令可执行部分,指令表中可查出对应指令代码。举例:汇编语言:机器语言:MOV A,R0E8HMOV R6,#32H7E 32HMOV 40H,#10075 40 64H,11101000,2-2 指令寻址方式,2-2-1 操作数类型位(b)位寻址区中的一位二进制数据字节(B)8位二进制数据字(W)16位双字节数据2-2-2 寻址方式一.立即寻址方式 指令中给出实际操作数据(立即数),一般用于为寄存器或存储器赋常数初值。举例:8位立即数:MOV A,#40H;A40H 16位立即数:MOV DPTR,#2100H;DPTR2100H,二.直接寻址方式,指令操作数是存储器单元地址,数据在存储器单元中。MOV A,40H;A(40H),直接寻址方式对数据操作时,地址是固定值,而地址所指定的单元内容为变量形式。,56H,例:设存储器两个单元的内容如图所示,执行指令 MOV A,40H后 A=?,思考题:直接寻址方式指令和立即寻址方式指令的形式有什么不同?,三.寄存器寻址方式指令操作数为寄存器名,数据在寄存器中。例:MOV A,R0;AR0设指令执行前 A=20H,R0=40H,执行指令后,A=?,R0=?,四.寄存器间接寻址方式 指令的操作数为寄存器名,寄存器中为数据地址。存放地址的寄存器称为间址寄存器或数据指针。例:MOV A,R0;A(R0)设指令执行前 A=20H,R0=40H,地址为40H存储器单元内容如图所示。执行指令后,A=?,R0=?,(40H)=?,34H,40H,34H,40H,40H,0100 0000,A,0010 0000,R0,0100 0000,R0,五.变址间接寻址方式 数据在存储器中,指令给出的寄存器中为数据的基地址和偏移量。数据地址=基地址+偏移量。,例:MOVC A,A+DPTR;A(A+DPTR)设指令执行前 A=09H,DPTR=2000H,存储器单元内容如图所示。执行指令后,A=?DPTR=?,12H,2000H,六.位寻址方式 指令给出位地址。一位数据在存储器位寻址区。例:MOV C,40H;Cy(位地址40H)设指令执行前 Cy=1,位地址40H存储器单元如图,执行指令后,Cy=?,0,2-4MCS-51指令系统分析,指令功能分类:数据传送、数据操作、布尔处理、程序控制。,2-4-1 数据传送指令实现寄存器、存储器之间的数据传送。一.内部传送指令:片内数据存储器数据传送。二.外部传送指令:片外数据存储器数据传送。三.交换指令:片内数据存储器数据传送。四.堆栈操作指令:片内数据存储器数据传送。五.查表指令:程序存储器数据传送。,(一)内部传送指令:实现片内数据存储器中数据传送。指令格式:MOV 目的操作数,源操作数 寻址方式:立即寻址、直接寻址、寄存器寻址、寄存器间址。,习题1:找出配对指令,实现反向传送。,指令机器码:11101rrr E8EF11100101 n E5 n1110011i E6、E7 01110100 d 74 d 10101rrr n 1010011i n 85 n1 n2 90 d1 d2,MOV A,Rn;ARn,Rn=R0R7 MOV A,n;A(n),MOV A,Ri;A(Ri),Ri=R0、R1 MOV A,#d;Ad,MOV Rn,n;Rn(n)MOV Ri,n;(Ri)(n)MOV n1,n2;(n1)(n2),MOV DPTR,#d1d2;DPTRd1d2,例2-4-1:顺序执行下列指令序列,求每一步执行结果。,MOV A,#30HMOV 4FH,AMOV R0,#20HMOV R0,4FHMOV 21H,20H,例:用两种寻址方式实现,将片内RAM 60H单元的数据传送给累加器A。,解1:MOV A,#60H?,解2:MOV R0,#60H MOV A,R0,;A=30H;(4FH)=30H;R0=20H;(20H)=30H;(21H)=30H,解2:MOV R0,60H?MOV A,R0,解1:MOV A,60H,说明:,只有指令表中的指令才有对应指令代码,计算机才 能执行。编程时,不能随意“创造发明”指令。,1.一条指令中不能同时出现两个工作寄存器:非法指令:MOV R1,R2MOV R2,R0,2.间址寄存器只能使用 R0、R1。非法指令:MOV A,R2,3.SFR区只能直接寻址,不能用寄存器间接寻址。非法指令:MOV R0,#80HMOV A,R0,4.指令表:B:指令字节数,M:机器周期数,(二)外部传送指令实现片外数据存储器和A累加器之间的数据传送。,指令格式:MOVX 目的操作数,源操作数寻址方式:片外数据存储器用寄存器间址方式。1.DPTR作16位数据指针,寻址64KB片外RAM空间MOVX A,DPTR;A(DPTR)MOVX DPTR,A;(DPTR)A2.Ri作8位数据指针,寻址256B片外RAM空间MOVXA,Ri;A(Ri)MOVXRi,A;(Ri)A,例2-4-2:实现片外数据存储器数据传送(2000H)(2100H)。,MOV DPTR,#2000HMOVX A,DPTRMOV DPTR,#2100HMOVX DPTR,A,习题3:将片外RAM 0000H单元的数据传送到片内RAM的60H单元。,;DPTR=2000H;A=X;DPTR=2100H;(2100H)=X,片外数据存储器不能直接寻址。下列为非法指令:MOVX A,2000H MOVX 2100H,2000H,思考题:为什么对DPTR的数据传送使用内部传送指令?,(三)交换指令 实现片内RAM区的数据双向传送。,1.字节交换指令XCH A,Rn;A RnXCH A,Ri;A(Ri)XCH A,n;A(n),习题4:将片内RAM60H单元与61H单元的数据交换。,例:设A=29H,执行指令 XCH A,2AH后,A=?(2AH)=?,38H,29H,XCH 60H,61H 对吗?,29 H,2.半字节交换指令,XCHD A,Ri;A03(Ri)03 SWAP A;A47 A03,例2-4-3:将片内RAM 2AH和2BH单元中的ASCII码转换成压缩式BCD码存入20H单元。,交换片内RAM 40H单元和 41H单元的低半字节。,(四)堆栈操作指令 入栈指令:PUSH n;SPSP+1,(SP)(n)出栈指令:POP n;(n)(SP),SPSP-1,例:设 A=02,B=56H,执行下列指令后,SP=?,A=?,B=?,SP,SP 02,SP 56H 02,02H,A,00H,02H,00H,02H,02H,SBR:MOV SP,#30H;设栈底 PUSH A PUSH B MOV A,#0 MOV B,#01 POP B POP A,SP 56H 02,SP 56H 02,56H SP 02,56H 02HSP,(五)查表指令 实现从程序存储器读取数据到A累加器,只能使用变址间接寻址方式。多用于查常数表程序,可直接求取常数表中的函数值。,1DPTR为基址寄存器MOVCA,A+DPTR;A(A+DPTR)查表范围为 64KB 程序存储器任意空间,称为远程查表指令。2PC为基址寄存器MOVCA,A+PC;A(A+PC)常数表只能在查表指令后256B范围内。,例:查表法求Y=X2。设X(0X15)在片内RAM的20H单元中,要求将查表求Y,存入片内RAM21H单元。,1)ORG 1000HSQU:MOV DPTR,#TAB;确定表首地址(基地址)MOV A,20H;取X(偏移量)MOVC A,A+DPTR;查表求Y=X2MOV 21H,A;保存YRET;子程序结束;其它程序段ORG 3000H;常数表格首地址TAB:DB 00,01,04,09,225;平方表,2)指令地址 源程序 ORG 1000H;程序起始地址 1000H SQU:MOV A,20H;取X 1002H ADD A,#3;修正偏移量 1004H MOVC A,A+PC;查表求Y=X2 1005H MOV 21H,A;存结果 1007H RET;子程序结束 1008H TAB:DB 00,01,04;平方表 100BH DB 09,225,思考题:当0X255时,如何用查表法编程求Y=X2。,例:查表法求Y=X2。设X(0X15)在片内RAM的20H单元中,要求将查表求Y,存入片内RAM21H单元。,习题:找出指令错误并改正:,1MOV A,#1000H;A1000H2MOVX A,1000H;A(1000H)片外RAM3MOVC A,1000H;A(1000H)片外ROM4MOVX 60H,A;片外RAM(60H)A5MOV R0,60H;片内RAM:(61H)(60H)MOV 61H,R06.XCH R1,R2;R1R27.MOVX DPTR,#2000H;DPTR2000H8.MOVX 60H,DPTR;片内RAM片外RAM,2-4-2算术运算指令,与数据传送指令不同,多数算术运算指令会影响标志位的状态,即CPU执行算术运算指令后,根据数据操作情况自动设置标志位的状态。,2-3 状态标志,MCS-51 的程序状态字寄存器 PSW 为标志寄存器。其格式如下:,1标志位(自动设置状态),1)Cy:进位标志位保存运算后最高位的进位/借位状态,当有进位/借位,Cy=1,否则Cy=0。2)AC:辅助进位标志位保存低半字节的进位/借位状态,当D3产生进位/借位,AC=1,否则AC=0。用于十进制调整。3)OV:溢出标志位OV=Cy7Cy6,补码运算产生溢出OV=1,否则OV=0。4)P:奇偶标志位反映累加器A中数据的奇偶性。当1的个数为奇数,P=1,否则P=0。,2用户选择位(编程设置状态),1)F0:用户自定义标志位。2)RS1、RS0:工作寄存器区选择位。复位时,PSW=00H,例:复位后,设置使用工作寄存器2区,其余标志位不变。,解:MOV PSW,#,18H,2-4-2 算术运算指令完成片内 RAM 和 A 中数据的加减乘除运算。,一加减指令1.加法指令,0011 1011+0011 1011 0111 0110,76H 0 0 1 1,1)不带进位加法:ADD A,源操作数ADD A,R2;AA+R2,影响Cy、OV、AC、P 例1:A=3BH,PSW=0,执行指令 ADD A,#3BH求:A=,Cy=,OV=,AC=,P=,PSW=?,01000001=41H,1001 1010 1110 0011+0 1 0111 1101,2)带进位加法:ADDC A,源操作数ADDC A,R2;AA+R2+Cy,影响Cy、OV、AC、P,7DH 1 1 0 0,例2:A=9AH,R2=E3H,PSW=0,执行指令ADDC A,R2 后求:A=,Cy=,OV=,AC=,P=,PSW=?,10000100=84H,带进位加法指令ADDC用于多字节运算,例:设双字节数 X 存在片内RAM 41H、40H单元,Y存在42H、43H单元,编程求 Z=X+Y,并存入片内RAM单元44H、45H、46H。,ADDS:MOV A,40HADD A,42HMOV 44H,AMOV A,41HADDC A,43HMOV 45H,AMOV A,#0ADDC A,#0MOV 46H,ARET,;取被加数低字节;加上加数低字节;保存和的低字节;取被加数高字节;加上加数高字节;保存和的高字节;求高字节进位;子程序结束,;低字节相加;高字节相加;计算高字节进位;子程序结束,十进制加法指令:ADD A,源操作数DA A带进位十进制加法指令:ADDC A,源操作数DA A十进制加1运算:ADD A,#01 DA A,作业:BCD码加法编程。设X、Y为4位压缩BCD码,求 Z=X+Y。,BCD调整指令:DAA;对 A 中加法结果进行调整,2减法指令SUBB A,源操作数;带借位减法指令,SUBB A,R2;AA-R2-Cy,;影响Cy、OV、AC、P,00 0 0 0 0,习题:编程求双字节减法。设X、Y存在片内 RAM 60H起始单元,计算 Z=X-Y。,例:A=5AH,R2=5AH,Cy=0,执行下列指令SUBB A,R2求:A=,Cy=,OV=,P=,AC=?,3.增量、减量指令,INC 单操作数如:INC R2;R2R2+1DEC 单操作数 如:DEC R2;R2R2-1 INC DPTR;DPTRDPTR+1 不影响标志位状态。,注意:没有指令 DEC DPTR 可用指令 DEC DPL 代替 企图十进制加:INC A DA;非法 十进制加:ADD A,#01;合法 DA A,4.乘除指令,MUL AB;BAAB,Cy0,;当积高字节B=0,OV0;B0,则OV1,例:A=96(60H),B=192(C0H),执行指令 MUL AB 后,求:A=,B=,Cy=,OV=,P=?解:96 192=18432(4800H),00H 48H 0 1 0,思考题:如何实现多字节数据的乘除运算。,DIV AB;AB,A商,B余数,Cy0,;当除数B=0,OV1;B0,则OV0,例:A=156(F6H),B=13(0DH),执行指令 DIV AB 后求:A=,B=,Cy=,OV=,P=?解:156 13=18(12H),余数=12(0CH)。,12H 0CH 0 0 0,2-4-2 逻辑运算指令,一.单操作数指令(A累加器为操作数)1.A清0指令:CLR A;A02.A取反指令:CPL A;A/A,3.循环移位指令:1)8位循环指令:RL A;A循环左移一位RR A;A循环右移一位,2)9位循环指令:RLC A;带Cy循环左移一位RRC A;带Cy循环右移一位,例2-4-7:设 A=11000101,Cy=0,分别执行下列单条指令:CPL A 求:A=,Cy=RL ARLC A,00111010 0,10001011 0,10001010 1,用9位循环指令实现多字节移位例:编程将寄存器 R6R5 中的双字节数X左移一位。,CLR CMOV A,R5RLC AMOV R5,AMOV A,R6RLC AMOV R6,A,;Cy=0,设 R6=55H,R5=AAH,;R6=01010101,R5=10101010,Cy=0,;R6=01010101,R5=01010100,Cy=1,;R6=10101011,R5=01010100,Cy=0,思考题:如何将寄存器R6R5中的双字节数X右移一位。,(二)双操作数逻辑运算指令(对位逻辑运算):ANL、ORL、XRL,习题1:如何将累加器A中的数据高4位清0,低位不变?习题2:如何将寄存器R2中的数据奇数位取反,偶数位不变?,例3-5-8 A=01B,表示随机状态,为1或0,执行下述一组指令执行后A的值如何?XRL A,#0C0H;将累加器A的内容D7、D6取反 ORL A,#03H;将累加器A的内容D1、D0置1ANL A,#0E7H;将累加器A的内容D4、D3清0 解:执行上述指令后,A=100011B。,2-4-4 布尔变量操作指令 对片内RAM中位寻址区操作。位累加器Cy和位地址b。,一位传送MOV C,b;Cy(b)MOV b,C;(b)Cy,例:将位地址20H的一位数传送到位地址30H中:MOV C,20H MOV 30H,C二位清0、置1、取反:CLR、SETB、CPL:CLR C;Cy0,CLR 40H;(位地址40H)0,三逻辑运算:ANL、ORL:ANL C,40H;CC(40H)ANL C,/40H;CC/(40H),例:设 Cy=1,(位地址40H)=1,执行指令 ANL C,/40H 后,Cy=?,(位地址40H)=?,位地址表示法:位地址 40H,位寄存器 F0,字节加位 ACC.0,0,习题:设累加器A中数据为 29H,Cy=0,执行指令 ORL C,0E3H 后,Cy=?,1,2-4-5 转移指令 转移指令通过改写PC的当前值,从而改变CPU执行程序的顺序,使程序发生跳转。,按转移条件分类:1)无条件转移:执行无条件转移指令,程序无条件转移到指定处。2)条件转移:指令中给出转移条件,执行指令时,先测试条件,若满足条件,则程序发生转移,否则,仍顺序执行程序。,按转移方式分类:,1)绝对转移:指令给出转移目的的绝对地址 nn,执行指令后,PCnn。,2)相对转移:指令给出转移目的与转移指令的相对偏移量e,执行指令后,PCPC+e。,例:地址源程序1000H LJMP 2000H1003H 2000H;转移目的指令,例:地址 源程序1000H SJMP 02 1004H;转移目的指令,一.无条件转移指令 1.长转移指令:LJMP nn;PC nn 指令机器码:02 nnH nnL指令转移范围:64KB,2.绝对转移指令:AJMP pn;PCPC+2;PC100pn100;PC1511不变 指令机器码:pn108 00001,pn70 指令转移范围:2KB(祥见P65)转移时要求转移前后保持 PC1511不变。,相对偏移量 e 的计算式:e=目的指令地址-(转移指令地址+指令字节数)=目的地址-PC当前值,3.短转移指令:SJMP e;PCPC+2,PCPC+e指令机器码:80H,e 相对偏移量 e为8位补码。指令转移范围:向前128向后127字节,编程时,用标号代替转移目的地址,转移指令的操作数交给汇编程序计算。LJMP NEXT;也可AJMP NEXT;或SJMP NEXT NEXT:NOP,例1:计算转移指令的相对偏移量 e,并判断是否超 出转移范围。,例2:求原地踏步指令的指令代码HERE:SJMP HERE,求出指令代码为:80 FE H,相对偏移量=2150H-(2130H+2)=001EH,只取低8位:e=1EH 指令机器码:80 1E H,指令地址源程序2130H SJMP NEXT 2150HNEXT:MOV A,R2,习题:计算程序中转移指令的相对偏移量 e,并判断是否超出转移范围。地址 源程序2130H LOOP:21B0H SJMP LOOP,4间接转移指令(多分支转移指令-散转)JMP A+DPTR.;PCA+DPTR指令机器码 73H,指令转移范围64KB。,KEY:MOV DPTR,#KTAB MOV A,40H ADD A,A JMP A+DPTRKTAB:AJMP FUNC0 AJMP FUNC1 FUNC0:FUNC1:,应用:处理功能键。要求不同功能键执行不同程序段。设每个功能键对应一个键值 X(0XFH)。设X已存入片内RAM的40H单元中。若X=0,则执行程序段FUNC0若X=1,则执行程序段FUNC1。,二条件转移指令,1.判零转移指令JZ e;PCPC+2,;若A=00H,PCPC+e(转移),;若A00H,PC不变(不转移),条件转移指令形成程序的分支,赋予计算机判断决策能力转移条件:1)标志位的状态 2)位地址中的状态,JNZ e;PCPC+2,若A00H,;PCPC+e(转移);若A=00H,PC不变(不转移),2.判Cy转移指令JC e;Cy=1则转移,Cy=0不转移 JNC e;Cy=0则转移,Cy=1不转移,3.判位转移指令JB b,e;(b)=1转移,否则不转移JNB b,e;(b)=0转移,否则不转移,4.判位清0转移指令:JBC b,e;(b)=1转移,且(b)0,否则不转移,5.比较不相等转移指令:CJNE 操作数1,操作数2,e,CJNE A,n,e;PCPC+3;若A(n),则PCPC+e;且当A(n),Cy=0,当A(n),Cy=1;若A=(n),PC不变,且Cy=0。,相当于两个操作数相减,仅影响标志状态,不保存结果,6循环转移指令:DJNZ 操作数,e DJNZ R2,e;PCPC+2,R2R2-1;若R20,PCPC+e,;若R2=0,顺序执行。,例:用于循环结构程序。设要求程序循环执行100次MOV R2,#100;设循环计数器初值LOOP:;多次循环程序段 DJNZ R2,LOOP;循环控制;循环结束,思考:当循环计数器初值为0,循环次数是多少?,2-4-6 子程序,定义:具有完整功能的程序片段,供主程序调用。功能:供主程序在需要时调用。子程序可以在程序中反复多次使用,以简化源程序的书写。特点:子程序可以嵌套,有利于模块化程序设计。,2-4-6,一长调用指令(3字节)LCALL nn;PCPC+3,;SPSP+1,(SP)PCL,SPSP+1,(SP)PCH;PCnnnn为子程序起始地址,编程时可用标号代替。指令机器码:12 nnH nnL 指令调用范围:64KB,子程序调用过程:,与转移指令不同:转移时,先用堆栈自动保存当前地址(断点),二绝对调用指令(2字节)ACALL pn;PCPC+2;SPSP+1,(SP)PCL,SPSP+1,(SP)PCH;PC100pn100;PC1511不变pn为子程序首地址指令机器码:pn10810001,pn70 指令调用范围 2KB。,三子程序返回指令RET;PCH(SP),SPSP-1,PCL(SP),PSP-1指令机器码:22HRET指令从堆栈中自动弹出原先保存的PC断点地址,实现子程序返回。,20H 92H,21H 53H,SP,PC,2000H,208FH,2092H,2100H,2150H,2153H,2200H,2250H,2251H,2153H,2092H,21FFH,2200H,SP,SP,SP,SP,SP,SP,MAIN:MOV SP,#30H;设置栈底 LCALL SUB;调用子程序 SUB:;子程序段 RET;返回主程序,例:子程序嵌套,SP,SP,SP,注意:1.子程序起始指令要使用标号,用作子程序名。2.执行返回指令RET之前,保证栈顶内容为主程序返回地址,以便正确返回主程序。,常用格式:MAIN:;主程序LCALL SUBR;调用SUBRSUBR:;子程序首地址RET;子程序返回,注意:1.子程序起始指令要使用标号,用作子程序名。2.执行返回指令RET之前,保证栈顶内容为主程序返回地址,以便正确返回主程序。,常用格式:MAIN:;主程序LCALL SUBR;调用SUBRSUBR:;子程序首地址RET;子程序返回,

    注意事项

    本文(第2章指令系统与汇编语言程序设计.ppt)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开