欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PPT文档下载
     

    第03章整理ppt.ppt

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

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

    第03章整理ppt.ppt

    第3章 MCS-51的指令系统,本章介绍MCS-51汇编语言的指令系统。,3.1 指令系统概述,MCS-51的基本指令共111条,按指令在程序存储器所占的字节来分,其中: (1)单字节指令49条; (2)双字节指令45条; (3)三字节指令17条。,按指令的执行时间来分,其中: (1)1个机器周期(12个时钟振荡周期)的指令64条; (2)2个机器周期(24个时钟振荡周期)的指令45条; (3)只有乘、除两条指令的执行时间为4个机器周期(48个时钟振荡周期); 在12MHz晶振的条件下,每个机器周期为1s。 有一个位变量的指令子集,在进行位变量处理的程序设计时十分有效、方便。,指令格式就是指令的表示方法,一条指令由两部分组成,即操作码和操作数。 操作码用来规定指令进行什么操作, 操作数则是指令操作的对象,3.2 指令格式,51系列指令系统中,有单字节指令、双字节指令、三字节不同长度的指令,指令长度不同,格式也就不同。 (1)单字节指令:指令只有一个字节,操作码和操作数同在一个字节中; (2)双字节指令:一个字节为操作码,另一个字节是操作数; (3)三字节指令:操作码占一个字节,操作数占二个字节。其中操作数既可能是数据,也可能是地址,3.3 指令系统的寻址方式,寻址方式就是在指令中说明操作数所在地址的方法。 51单片机共有7种寻址方式。 1寄存器寻址方式: 寄存器寻址方式的操作数在寄存器中,因此指定了寄存器就可以得到操作数。 MOV A,Rn ;(Rn)A,n=07 表示把寄存器Rn的内容传送给累加器A。,寄存器寻址的范围,(1)4组通用工作寄存区共32个工作寄存器。寻址不同工作区的Rn,要通过RS1、RS0转换; (2)部分特殊功能寄存器,例如A、B 以及数据指针寄存器DPTR。,2直接寻址方式: 在指令寻址方式中,操作数直接以单元地址的形式给出,单元地址中的内容就是操作数。 MOV A,40H 表示把内部RAM 40H单元的内容传送给累加器A。,直接寻址方式的寻址范围,(1)内部RAM的128个单元; (2)特殊功能寄存器。特殊功能寄存器除了以单元地址的形式给出外,还可以用寄存器符号的形式给出。 例如: MOV A,80H 与 MOV A,P0是等价的。 * 直接寻址方式是访问除A、B、DPTR以外的SFR的唯一寻址方式。,3. 寄存器间接寻址方式: 寄存器间接寻址方式就是寄存器中存放的是操作数的地址,使用的寄存器是R0与R1,为了区别于寄存器寻址方式,在寄存器的名称前面加前缀标志“” 。 访问内部RAM或外部RAM的低256个字节时,可以(片内只能)采用R0或R1作为间址寄存器。例如: 片内: MOV A,Ri ;i=0或1 片外: MOVX A,Ri ;i=0或1 假如,其中Ri中的内容为40H,操作的结果是把内部RAM中40H单元的内容送到A。 访问外部RAM时,可以(外部RAM的低256B以外的字节,只能)采用DPTR作为间址寄存器。例如: MOVX A,DPTR 假如,其中DPTR中的内容为0140H,操作的结果是把外部RAM中0140H单元的内容送到A。,寻址范围: (1)访问内部RAM低128个单元,其通用形式为: MOV A,Ri ;i=0或1 (2)对片外RAM的64K字节的间接寻址,可以使用下面的形式: MOVX A,DPTR (3)片外RAM的低256字节,除可以使用DPTR外,还可以使用R0、R1。 例如:MOVX A,Ri ;i=0或1 (4)堆栈区:堆栈操作指令有:PUSH(压栈)和POP(出栈),使用堆栈指针(SP)作间址寄存器可以对堆栈区进行间接寻址。,4立即寻址方式:,立即寻址方式就是操作数在指令中直接给出。为了区别于直接寻址方式,需在操作数前面加前缀标志“#”。例如: MOV A,#40H 操作的结果是把立即数40H(常数)送给累加器A。,5基址寄存器加变址寄存器间址寻址方式: 这种寻址方式用于读取ROM中的数据并送给A。本寻址方式是以DPTR或PC作基址寄存器,以累加器A作为变址寄存器,并以两者内容相加形成的16位地址作为操作数的地址,以达到访问数据表格的目的。 例如:指令 MOVC A,A+DPTR 其中A的原有内容为05H,DPTR的内容为0400H,该指令执行的结果是把程序存储器0405H单元的内容传送给A。,说明: (1)本寻址方式只能对ROM进行寻址,或者说它是专门针对ROM的寻址方式,寻址范围可达到64KB。 (2)本寻址方式的指令只有3条: MOVC A,A+DPTR MOVC A,A+PC JMP A+DPTR,6位寻址方式: MCS-51有位处理功能,可以对数据位进行操作,因此就有相应的位寻址方式。位寻址指令中可以直接使用位地址。例如: MOV C,40H ;作用是把位40H的值送到进位位C。,位寻址方式的寻址范围,(1)内部RAM中的位寻址区: 单元地址为20H2FH,共16个单元,位地址是00HFFH,对这128个位的寻址使用直接地址表示。 位寻址区中的位有两种表示方法, a. 直接使用位地址。 例如:40H。 b. 单元地址加位数的表示方法。 例如,28H.0,指的是28H单元中的最低位。 位40H 与 28H.0 是同一个位,它们是等价的。,(2)特殊功能寄存器中的可寻址位: 可供寻址的特殊功能寄存器有11个,共有88个位,其中5个位没有定义,所以有可寻址位83个。 这些寻址位在指令中有如下4种表示方法: a.直接使用位地址。例如PSW.5的位地址为0D5H。 b.位名称的表示方法。例如PSW.5是F0标志位,可使用 F0表示该位。 c.单元地址加位数的表示方法。例如0D0H单元(即PSW寄存器)的第5位,表示为:0D0H.5。 d.特殊功能寄存器符号加位数的表示方法。例如PSW寄存器的位5表示为:PSW.5。,7相对寻址方式: 相对寻址方式是为解决程序转移而专门设置的,为转移指令所采用。 在相对寻址的转移指令中,给出了地址偏移量,以“rel”表示,即把PC的当前值加上偏移量就构成了程序转移的目的地址: 目的地址=转移指令所在的地址+转移指令的字节数+rel,在实际编程中,“rel” 通常用标号代替 例:SJMP LOOP1,例:2000H:SJMP 08H ; 原PC值为2000H;执行这条指令后的当前PC值为2002H,rel为08H。2002H+08H=200AH,转移目的地址为200AH,程序就跳转至200AH去执行了。,右图为SJMP 08H相对寻址示意图。,偏移量rel是一个带符号的8位二进制数补码数,范围是:128+127。因此相对转移是以转移指令所在地址为基点,向地址增加方向最大可转移(127+转移指令字节)个单元地址,向地址减少方向最大可转移(128-转移指令字节)个单元地址。,MCS-51指令系统的7种寻址方式及寻址空间 ,概括起来如下表(表3-1 P43):,3.4 MCS-51指令系统分类介绍,111条指令,按功能分类,可分为下面5大类: (1)数据传送类(28条) (2)算术操作类(24条 (3)逻辑运算类(25条) (4)控制转移类(17条) (5)位操作类(17条),描述指令的一些符号,Rn 当前寄存器区的8个工作寄存器 R0R7(n=07)。 Ri 当前选中的寄存器区中可作间接寻址 寄存器的2个寄存器R0、R1(i=0,1)。 direct 直接地址,即8位的内部数据存储器单 元或特殊功能寄存器的地址。 #data 包含在指令中的8位立即数。,#data16 包含在指令中的16位立即数。 rel 相对转移指令中的偏移量,为8位 的带符号补码数 DPTR 数据指针,可用作16位的地址寄 存器。 bit 内部RAM或特殊功能寄存器中的直 接寻址位。 C 或Cy 进位标志位或位处理机中的累加 器。,addr11 11位目的地址 addr16 16位目的地址 间接寻址寄存器前缀 (X) X中的内容。 (X) 由X寻址的单元中的内容。 箭头右边的内容被箭头左边的内容 所取代。,3.4.1 数据传送类指令 数据传送类指令是编程时使用最频繁的一类指令。一般情况下的通用格式及助记符如下: MOV , 执行的结果是把源操作数传送给目的操作数,属“复制”性质,而不是“搬家”。如果需要不丢失目的操作数,一般使用传送类指令中的交换型指令。 数据传送类指令不影响标志位中的进位标志位Cy、辅助进位标志位Ac和溢出标志位OV,影响奇偶标志位P。,1、以累加器A为目的操作数的指令(4条): MOV A,Rn ;(Rn)A,n=07 MOV A,Ri ;(Ri)A,i=0,1 MOV A,direct ;(direct)A MOV A,#data ;#dataA 操作:将源操作数的内容送入累加器A。例如: MOV A,R6 ;(R6)A,属寄存器寻址 MOV A,R0 ;(R0)A,属间接寻址 MOV A,70H ;(70H)A,属直接寻址 MOV A,#78H ;78HA,属立即寻址,【例】 若R0=40H,(30H)=60H,(40H)=50H MOV A,R0 ;将工作寄存器R0中的数据传送 至A中,A=40H MOV A,R0 ;将以R0中内容为地址的存储单 元中的数据送至A中 A=50H MOV A,30H ;将直接地址30H存储单元中 的数据传送至A中,A=60H MOV A,#30H ;将立即数#30H送入A中, A=30H,2、以Rn为目的操作数的指令: MOV Rn,A ;(A)Rn, n=07 MOV Rn,direct ;(direct)Rn, n=07 MOV Rn,#data ;#dataRn, n=07 操作:将源操作数的内容送入当前一组工作寄存器区的R0R7中的某一个寄存器。,【例】:当(A)=30H时, 执行 MOV R6,A ;(A)R6 结果: (R6)=30H 【例】:当(70H)=10H时, 执行 MOV R6,70H ;(70H)R6 结果: (R6)=10H 【例】:执行 MOV R6,#78H ;78HR6 结果: (R6)=78H,3、以直接地址direct为目的操作数的指令: MOV direct,A ;(A)direct MOV direct,Rn ;(Rn)direct, n=07 MOV direct1,direct2;(direct2)direct1 MOV direct,Ri ;(Ri)direct,i=0,1 MOV direct,#data ;#datadirect 操作:将源操作数送入直接地址指出的存储单元。direct指的是内部RAM或SFR的地址。,【例】 当(A)=30H时, 执行 MOV 55H,A ;(A)55H 结果:(55H)=30H,4、以寄存器间接地址为目的操作数的指令: MOV Ri,A ;(A)(Ri),i=0,1 MOV Ri,direct ;(direct)(Ri) MOV Ri,#data ;#data(Ri) 操作:将源操作数的内容送入R0或R1指出的存储单元内。,【例】:当(A)=30H时,(R0)=44H 执行 MOV R0,A ;(A)(R0) 结果:(44H)=30H 【例2】:当(R0)=33H 执行 MOV R0,#22H ;22H(R0) 结果:(33H)=22H,5、16位数传送指令: MOV DPTR,#data16 ;#data16DPTR 操作:将16位常数送入DPTR。 这是指令系统中唯一的一条16位数据的传送指令,用来设置地址指针DPTR。DPTR由DPH与DPL组成,立即数的高8位送入DPH,立即数的低8位送入DPL。,【例】: 执行 MOV DPTR,#1234H ;1234HDPTR 结果: (DPTR)=1234H 其中:DPH=12H,DPL=34H,6、堆栈操作指令: 在MCS-51内部RAM中可以设定一个“后进先出”的区域称作堆栈。 堆栈指针SP指出堆栈的栈顶位置。 (1)进栈指令: PUSH direct 操作:先将栈指针SP加1,然后把direct中的内容送到栈指针SP指示的内部RAM单元中。,【例】 PUSH 30H;(30H)=2BH,操作过程如图,(2)出栈指令 POP direct 操作:SP指示的栈顶(内部RAM单元)内容送入direct字节单元中,栈指针SP减1。,【例】 POP A;(A)=2BH,操作过程如图,7、累加器A与外部数据存储器传送指令: MOVX A,DPTR ;(DPTR)A,读外部RAM或I/O MOVX A,Ri ;(Ri)A,读外部RAM或I/O MOVX DPTR,A;(A)(DPTR),写外部RAM或I/O MOVX Ri,A ;(A)(Ri),写外部RAM或I/O 操作:读外部RAM存储器或I/O中的一个字节的数据到累加器A中,或从累加器A中的一个字节的数据写到外部RAM存储器或I/O中。,采用16位的DPTR作间接寻址,可寻址64KB片外RAM,高8位地址(DPH)由P2口输出,低8位地址(DPL)由P0口输出。 采用Ri(i=0,1)作间接寻址,可寻址片外低256个单元的RAM。8位地址和数据均由P0口输出,可选用其它任何输出口线来输出高于8位的地址(一般选用P2口输出高8位的地址)。 MOV的后面 “X”表示单片机访问的是片外RAM或I/O。,【例】:(DPTR)=1F62H,(1F62H)=70H,执行下列指令: MOVX A,DPTR ;(DPTR)A 结果:(A)=70H 【例】:(R0)=6FH,(A)=05H,执行下列指令: MOVX Ri,A ;(A)(R0) 结果:(6FH)=05H 问题:地址为6FH的存储单元属于片内还是片外?,8、查表指令: 共两条指令,用于读ROM中的数据表格的指令,均采用基址寄存器加变址寄存器间接寻址方式。 (1) MOVC A,A+PC 操作:以PC作基址寄存器,A的内容作为无符号整数和PC中的内容(下一条指令的起始地址)相加后得到一个16位的地址,把该地址指出的程序存储单元的内容送到累加器A。,【例】: (A)=30H,执行地址1000H处的指令 1000H: MOVC A,A+PC 本指令占用一个字节,下一条指令的地址为1001H,(PC)=1001H再加上A中的30H,得1031H,结果将程序存储器中1031H的内容送入A。,该指令的优点是不改变SFR及PC的状态,根据A的内容就可以取出表格中的常数。缺点是表格只能存放在该条查表指令后面的256个单元之内,表格的大小受到限制,而且表格只能被一段程序所利用。,(2) MOVC A,A+DPTR 操作过程:以DPTR作为基址寄存器,A的内容作为无符号数和DPTR的内容相加得到一个16位的地址,把由该地址指出的程序存储器单元的内容送到累加器A。,【例】:(DPTR)=8100H (A)=40H 执行指令 MOVC A,A+DPTR 结果将程序存储器中8140H单元内容送入累加器A中。,这条查表指令的执行结果只和指针DPTR及累加器A的内容有关,与该指令存放的地址及常数表格存放的地址无关,因此表格的大小和位置可以在64K的ROM中任意安排,一个表格可以为各个程序块公用。,9、字节交换指令: XCH A,Rn ; (A)(Rn),n=07 XCH A,direct ; (A)(direct) XCH A,Ri ; (A)(Ri)),i=0,1 操作:将累加器A的内容和源操作数的内容相互交换。 源操作数有寄存器寻址、直接寻址、寄存器间接寻址等方式。 问题:本指令是否可以采用立即寻址方式。 例如:XCH A,#88H 结论:不行,【例】: (A)=80H,(R7)=08H,(40H)=F0H (R0)=30H,(30H)=OFH 执行下列指令: XCH A,R7 ;(A)(R7),结果:(A)=08H,(R7)=80H XCH A,40H ;(A)(40H) 结果:(A)=F0H,(40H)=08H XCH A,R0 ;(A)(R0) 结果:(A)=0FH, (30H)=F0H 最终执行结果: (A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H,10、半字节交换指令: XCHD A,Ri ;(A)(Ri),i=0,1 操作:累加器A数据的低4位与内部RAM单元内数据的低4位交换。 【例】 (R0)=60H,(60H)=3EH,(A)=59H 执行下列指令: XCHD A,RO ;(A)(R0) 则:,(A)=5EH,(60H)=39H。,【例】设内部RAM中30H单元的内容为50H,试分析如下程序。,MOV 60H,#30H MOV R0,#60H MOV A,R0 MOV R1,A MOV 40H,R1 MOV 60H,30H,;立即数30H送60H单元,即:30H60H ;立即数60H送R0,即:60HR0 ;间址,60H单元内容送A,即:30HA ;A的内容送R1,即:30HR1 ;间址,30H单元内容送40H,即:50H40H ;30H单元内容送60H单元,即:50H60H,程序执行结果:(A)=30H,(R0)=60H,(R1)=30H, (60H)=50H,(40H)=50H, (30H)=50H内容不变,【例】 按下列要求传送数据:设ROM(2000H)=ABH (1)ROM 2000H单元数据送内RAM 10H单元; (2)R0M 2000H单元数据送外RAM 80H单元; (3)ROM 2000H单元数据送外RAM 1000H单元; 解(1):MOV DPTR,#2000H ;置基址2000H,DPTR=2000H MOV A,#00H ;置变址0,A=00H MOVC A,A+DPTR ;读ROM 2000H,A=ABH MOV 10H,A ;存内RAM 10H单元,(10H)=ABH 解(2):MOV DPTR,#1FFFH ;置基址1FFFH,DPTR=1FFFH MOV A,#01H ;置变址01H,A=01H MOVC A,A+DPTR ;读ROM 2000H,A=ABH MOV R0,#80H ;置外RAN间址,R0=80H MOVX R0,A ;写外RAM 80H,外RAM(80H)=ABH 解(3):MOV DPTR,#2000H ;置基址2000H,DPTR=2000H MOV A,#00H ;置变址0,A=00H MOVC A,A+DPTR ;读ROM 2000H,A=ABH MOV DPH,1OH ;修改外RAN地址,DPTR=1000H MOVX DPTR,A ;写外RAM 1000H,外RAM(1000H)=ABH,【例】 已知ROM中存有09的平方表,首地址为2000H,试根据累加器A中的数值查找对应的平方值,存入内RAM 30H。(设A=3) 解:若用DPTR作为基址寄存器,可编程如下: 1000H:MOV DPTR,#2000H ;置ROM平方表首地址 MOVC A,A+DPTR ;A+2000H=2003H(设A=3), ;A=(2003H)=09H MOV 30H,A ;平方值存入内RAM 30H中 2000H:00H ;平方表:02=0 2001H:01H ; 12=1 2002H:04H ; 22=4 2003H:09H ; 32=9 2004H:10H ; 42=16,16=10H 2009H:51H ; 92=81,81=51H,3.4.2 算术操作类指令 算术运算指令都是(有:加、减、乘、除法指令)针对8位二进制无符号数。 执行的结果将影响使PSW中的进位(Cy),辅助进位(Ac),溢出(OV)以及奇偶校验位(P)标志位。但是增1和减1指令例外。,1加法指令: 共有4条加法运算指令: ADD A,Rn ;(A)+(Rn)A,n=07 ADD A,direct ; (A)+(direct)A ADD A,Ri ; (A)+(Ri)A,i=0,1 ADD A,#data ; (A)+#dataA,这4条8位二进制数加法指令的一个加数总是来自累加器A,而另一个加数可由寄存器寻址、直接寻址、寄存器间接寻址和立即寻址等不同的寻址方式得到。其相加的结果总是放在累加器A中。 使用加法指令时,要注意累加器A中的运算结果对各个标志位的影响: (1)如果位7有进位,则置“1”进位标志Cy,否则清“0”Cy; (2)如果位3有进位,置“1”辅助进位标志Ac,否则清“0”Ac; (3)如果位6有进位,而位7没有进位,或者位7有进位,而位6没有,则溢出标志位OV置“1”,否则清“0”OV;,溢出标志位OV的状态,只有在带符号数加法运算时才有意义。当两个带符号数相加时,OV=1,表示加法运算超出了累加器A所能表示的带符号数的有效范围(-128+127),即产生了溢出,因此运算结果是错误的,否则运算结果是正确的。,例:(A)=53H,(R0)=FCH, 执行指令: ADD A,R0 运算式为: 0101 0011 B +)1111 1100 B 1 0100 1111 B,结果为:(A)=4FH,Cy=1,Ac=0,OV=0,P=1 注意:上面的运算中,由于位6和位7同时有进位,所以标志位OV=0。,【例】 (A)= 85H,(R0)=20H,(20H)=AFH, 执行指令: ADD A,R0 运算式为: 1000 0101 B +)1010 1111 B 1 00110100 B,结果为:(A)=34H,Cy=1,Ac=1,OV=1,P=1 注意:由于位7有进位,而位6无进位,所以标志位OV=1,2带进位加法指令: 该加法的特点:进位标志位Cy参加运算,因此是三个数相加,对标志位的影响与ADD指令相同。 共4条: ADDC A,Rn ;(A)+(Rn)+CA,n=07 ADDC A,direct ;(A)+(direct)+CA ADDC A,Ri ;(A)+(Ri)+CA,i=0,1 ADDC A,#data ;(A)+#data+CA,例:(A)=85H,(20H)=FFH,Cy=1,执行指令:ADDC A,20H 运算式为: 1000 0101 B +)1111 1111 B +) 1 B 110000101 B,结果为:(A)=85H,Cy=1,Ac=1,OV=0,P=1(A中1的位数为奇数),【例】 试编写计算6655H+11FFH的程序,结果送51H (高)、50H(低): MOV A,#55H ADD A,#0FFH MOV 50H,A MOV A,#66H ADDC A,#11H MOV 51H,A,3增1指令 : 5条增1指令: INC A INC Rn ;n=07 INC direct INC Ri ;i=0,1 INC DPTR,若变量原来为FFH,加1后将溢出为00H(指前4条指令)。INC A 仅影响P标志,其他指令不影响PSW中的任何标志。 第5条指令INC DPTR,是16位数增1指令。指令首先对低8位指针DPL的内容执行加1的操作,当产生溢出时,就对DPH的内容进行加1操作,不影响标志Cy的状态。,4十进制调整指令: 作用: 用于对BCD码十进制数加法运算结果的内容修正。 指令格式: DA A 两个BCD码按二进制相加之后,必须经本指令的调整才能得到正确的压缩BCD码的和数。,(1)十进制调整问题:二进制数的加法运算原则并不能适用于十进制数的加法运算,有时会产生错误结果。例如: (a)3+6=9 0011+0101=1001 运算结果正确 (b)7+8=15 0111+1000=1111 运算结果不正确 (c)9+8=17 1001+1000=10001 运算结果不正确 结论:二进制数加法指令不能完全适用于BCD码十进制数的加法运算,要对结果作有条件的修正十进制调整。,(2)出错原因和调整方法: 出错原因:BCD码只用到了4位数的二进制编码中的10个,有6个编码没用到。这6个没用到的编码(1010,1011,1100,1101,1110,1111)为无效码。在BCD码的加法运算中,凡结果进入(运算结果大于9)或者跳过(运算结果有进位)无效码编码区时,其结果就是错误的,就需要调整。调整的方法是把结果加6调整,即所谓十进制调整修正。,具体修正方法是: (a)累加器低4位大于9或辅助进位位Ac=1,则进行低4位加6修正; (b)累加器高4位大于9或进位位Cy=1,则进行高4位加6修正; (c)累加器高4位为9,低4位大于9,则高4位和低4位分别加6修正; 具体是通过执行指令: DA A 来自动实现的。,【例】(A)=56H,(R5)=67H,把它们看作为两个压缩的BCD数,进行BCD数的加法。执行指令: ADD A,R5 DA A 由于高、低4位分别大于9,所以要分别加6进行十进制调整对结果进行修正。 0101 0110 B +)0110 0111 B 1011 1101 B +)0110 0110 B 1 0010 0011 B 结果为: (A)=23H,Cy=1 可见,56+67=123,结果是正确的。,【例】2个4位BCD码,分别存入内部RAM的50H(低)、51H(高)单元,与60H(低)、61H(高)单元,试编写求这两个数之和的程序,结果存入40H(低)、41H(高)单元。 MOV A,50H ADD A,60H DA A MOV 40H,A MOV A,51H ADDC A,61H DA A MOV 41H,A,5带借位的减法指令: 4条指令: SUBB A,Rn ;(A)-(Rn)-CyA,n=07 SUBB A,direct ;(A)-(direct)-CyA SUBB A,Ri ;(A)-(Ri)-CyA,i=0,1 SUBB A,#data ;(A)-#data-CyA 操作:从累加器A中的内容减去指定的变量和进位标志位Cy的值,结果存在累加器A中。 如果位7需借位则置“1” Cy,否则清“0”Cy; 如果位3需借位则置“1”Ac,否则清“0”Ac; 如果位6需借位而位7不需要借位,或者位7需借位,位6不需借位,则置“1”溢出标志位OV,否则清“0”OV。,例 (A)=C9H ,(R2)=54H,Cy=1,执行指令: SUBB A,R2 1100 1001 B -)0101 0100 B -) 1 B 0111 0100 B 结果:(A)=74H,Cy=0,Ac=0,OV=1(位6向位7借位),试编写计算EE33H-A0E0H的程序,结果送51H(高)、50H(低): CLR C MOV A,#33H SUBB A,#0E0H MOV 50H,A MOV A,#0EEH SUBB A,#0A0H MOV 51H,A,6减1指令: 4条指令: DEC A ;(A)-1A DEC Rn ;(Rn)-1Rn,n=07 DEC direct ;(direct)-1direct DEC Ri ;(Ri)-1(Ri),i=0,1 DEC A 操作影响P标志,其他操作不影响标志位。,【例】(A)=0FH,(R7)=19H,(30H)=00H,(R1)=40H,(40H)=0FFH 执行指令: DEC A ;(A)-1A DEC R7 ;(R7)-1R7 DEC 30H ;(30H)-130H DEC R1 ;(R1)-1(R1) 结果:(A)=0EH,(R7)=18H,(30H)=0FFH,(40H)=0FEH,P=1。,7乘法指令: MUL AB ;A×BBA(高8位字节B,低8位字节A) 操作:把A与B中的无符号8位整数相乘。如果积大于255,则置“1”溢出标志位OV,否则清0。进位标志位C总是清零。 8除法指令: DIV AB ;A/B(商A,余数B) 操作:把A中的无符号8位整数(被除数)除以B中的无符号8位整数(除数)。清零C位与OV位。如果B的内容为“0”(即除数为“0”),则存放结果的A、B中的内容不定,并置“1”溢出标志位OV。 例如:(A)=FBH,(B)=12H 执行 DIV AB 结果为:(A)=0DH,(B)=11H,C=0,OV=0,3.4.3 逻辑运算指令 1.简单逻辑操作指令: (1) CLR A 功能:累加器A清“0”。不影响Cy、Ac、OV标志,影响P标志。 (2) CPL A 功能:将累加器A的内容按位逻辑取反,不影响标志。,2左环移指令: RL A 功能:累加器A的8位向左循环移位, Acc.7循环移入Acc.0,不影响标志。 移位顺序:an+1(an)(n=06) a0(a7),3带进位左环移指令: RLC A 功能:将累加器A的内容和进位标志位Cy一起向左环移一位,Acc.7移入进位位Cy,Cy移入Acc.0,影响P、C标志,不影响其它标志。 移位顺序:an+1(an)(n=06) a0(C),C(a7),4右环移指令: RR A 功能:累加器A的内容向右环移一位,Acc. 移入Acc.7,不影响标志。 移位顺序: an(an+1)(n=17) a7(a0),5带进位右环移指令: RRC A 功能:累加器A的内容和进位标志Cy一起向右环移一位,Acc.0进入Cy,Cy移入Acc.7。影响P、C标志,不影响其它标志。 移位顺序: an(an+1)(n=17) a7(C),C(a0),6累加器半字节交换指令: SWAP A 功能:将累加器A的高半字节(Acc.7Acc.4)和低半字节(Acc.3Acc.0)互换。 【例】 (A)=0C5H,执行指令: SWAP A,结果:(A)=5CH,7逻辑与指令: 操作:在指出的变量之间以位为基础进行逻辑与操作,结果存入目的变量所在的寄存器或存储器中。 ANL A,Rn ; (A)(Rn)A,n=07 ANL A,direct ; (A)(direct)A ANL A,#data ; (A)#dataA ANL A,Ri ; (A)((Ri))A,i=01 ANL direct,A ; (direct)(A)direct ANL direct,#data ; (direct)#datadirect,【例】:(A)=07H,(R0)=0FDH 执行指令: ANL A,R0 运算式:0000 0111 1111 1101 0000 0101 结果:(A)=05H 【例】:(A)=07H,(R0)=31H,(31H)=0FDH 执行指令: ANL A,R0 运算式:0000 0111 1111 1101 0000 0101 结果:(A)=05H,8.逻辑或指令: 操作:在指出的变量之间以位为基础进行逻辑或操作,结果存入目的变量所在的寄存器或存储器中。 ORL A,Rn ;(A)(Rn)A ,n=07 ORL A,direct ;(A)(direct)A ORL A,#data ;(A) dataA ORL A,Ri ;(A)(Ri)A,i=0,1 ORL direct,A ;(direct)(A)direct ORL direct,#data ;(direct)#datadirect 例:(P1)=05H,(A)=33H,执行指令 ORL P1,A 结果:(P1)=37H,9逻辑异或指令: 操作:在指出的变量之间以位为基础进行逻辑或操作,结果存入目的变量所在的寄存器或存储器中。 XRL A,Rn ;(A)(Rn)A XRL A,direct ;(A)(direct)A XRL A,Ri ;(A)(Ri)A ,i=0,1 XRL A,#data ;(A)#dataA XRL direct,A ;(direct)(A)direct XRL direct,#data;(direct)#datadirect 例 (A)=90H,(R3)=73H 执行指令: XRL A,R3 结果:(A)=0E3H,3.4.4 控制转移类指令 1无条件转移指令: AJMP addrll 是2K字节范围内的无条件跳转指令,64K程序存储器空间分为32个区,每区2K字节,目标地址必须与AJMP下一条指令的第一个字节在同一2K个字节区范围内(即转移的目标地址必须与AJMP下一条指令的地址的高5位地址码A15A11相同)。 执行指令时,先PC加2,然后把addle11送入PC.10PC.0,PC.15PC.11保持不变,程序转移到目标地址。在编写程序时,直接写上要转向的目标地址标号就可以。 本指令是为能与MCS-48的JMP指令兼容而设的。,2相对转移指令: SJMP rel 是无条件转移指令(rel为相对偏移量,是一个单字节的带符号的8位二进制的补码数),实现的程序转移是双向的。Rel为正时,向地址增大方向转移;rel为负时,向地址减小方向转移。执行指令时,先PC加2,然后把偏移量rel加到PC上,并计算出目标地址。 在编写程序时,直接写上要转向的目标地址标号就可以。例如: LOOP: MOV A,R6 SJMP LOOP 程序在汇编时,由汇编程序自动计算和填入偏移量。手工汇编时,偏移量rel的值则需程序设计人员自己计算(略)。,3长跳转指令: LJMP addr16 是64K字节范围内的无条件跳转指令,指令执行时把指令的第二和第三字节分别装入PC的高位和低位字节中,无条件地转向addr16指出的目标地址。目标地址可以在64K程序存储器地址空间的任何位置。在编写程序时,直接写上要转向的目标地址标号就可以。 4间接跳转指令: JMP A+DPTR 是一条单字节的无条件跳转指令,由A中8位无符号数与DPTR的16位数内容之和来确定。以DPTR内容作为基址,A的内容作变址。给A赋予不同的值,即可实现程序的多分支转移。 本指令不改变A与DPTR的内容,也不影响标志。,5条件转移指令: 程序的转移是有条件的。规定的条件满足,则进行转移,条件不满足则顺序执行下一条指令。 当条件满足时,把PC装入下一条指令的第一个字节地址,再把带符号的相对偏移量rel加到PC上,计算出目标地址。在编写程序时,直接写上要转向的目标地址标号就可以。 JZ rel ;如果累加器A为“0”,则转移 JNZ rel ;如果累加器A非“0”,则转移,6比较不相等转移指令: CJNE A,direct,rel CJNE A,#data,rel CJNE Rn,#data,rel CJNE Ri,#data,rel 比较前面两个操作数的大小,如果它们的值不相等则转移,把PC装入下一条指令的第一个字节地址,再把带符号的相对偏移量rel加到PC上,计算出目标地址;相等则继续执行程序。 如果第一操作数(无符号整数)小于第二操作数(无符号整数),则置进位标志位Cy,否则清“0”Cy。

    注意事项

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

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




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开