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

    MCS-51单片机指令系统.ppt

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

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

    MCS-51单片机指令系统.ppt

    第3章 单片机的指令系统,本章学习 指令是控制计算机进行各种运算和操作的命令。一台计算机所能执行的全部指令的集合称为指令系统。一般来说,一台计算机的指令越丰富,寻址方式越多,指令的执行速度越快,则它的总体功能也就越强。不同种类的单片机指令系统一般是不同的。本章将以80C51为例,详细介绍MCS-51单片机的指令系统的寻址方式、指令的格式及功能。,3.1汇编指令与格式 3.1.1 指令格式和常用符号,1.指令格式(1)汇编语言指令格式标号:操作码 第一操作数,第二操作数,第三操作数;注释其中方括号括起来的部分为可选项。例如:AM1:MOV A,#78H;向A传输立即数78H,标号 标号是指令的符号地址。程序汇编时,汇编程序将指令首地址(即指令第一个字节所存单元的地址)赋值给标号,有了标号,程序中的其他语句操作就能寻找到该语句。标号由16个英文字母或数字组成,且第一个必须为英文字母;本汇编语言中已经有确切定义的符号不能作为标号,如指令助记符、伪指令、寄存器名、条件标志等;同一标号在一个程序中只能定义一次;标号后面必须跟以冒号。操作码 用来规定指令进行何种操作,是指令中不能空缺的部分。一般采用具有相关含义的英语单词或缩写表示。操作数 表示参与指令操作的数或数所在的地址。在一条指令中操作数的个数可以是一个、二个或三个,也可以没有操作数。操作码与操作数之间以空格分隔,操作数与操作数之间用逗号“,”分隔。指令中有两个操作数时,一般将前面的操作数称为目的操作数,后面的操作数称为源操作数,格式为:操作码 目的操作数,源操作数 注释 注释是为了便于阅读程序,对语句所作的解释说明,不产生目标代码。注释必须用分号“;”开头。当注释内容一行写不完时,可以换行继续写,但是新的一行必须同样以“;”号开头。,(2)机器码指令格式 机器码指令也包括操作码和操作数两个基本部分。在MCS-51单片机指令系统中,指令根据其机器码的长度分为单字节、双字节和三字节三种指令。单字节指令 单字节指令只有一个字节的操作码,无操作数,在程序存储器中占一个存储单元。例如指令:RET 机器码为:00100010,十六进制代码为:22H。例如指令:MOV A,R0 其机器码为:11101000,十六进制代码为:E8H。,双字节指令 双字节指令含有两个字节,第一个字节为操作码,第二个字节为操作数,在程序存储器中要占两个存储单元。例如指令:MOV A,55H 机器码为:01110100 01010101B,十六进制代码为:7455H;其中74H为操作码,55H为操作数,累加器A的信息隐含在了操作码中。三字节指令 这类指令中,第一个字节为操作码,第二和第三字节均为操作数。在程序存储器中要占3个存储单元。例如指令:MOV 20H,#79H 机器码为:01110101 00100000 01111001B,十六进制代码为:752079H,其中75H为操作码,20H为操作数1,79H为操作数2。,2.指令系统中有关符号说明 在MCS-51指令系统中,描述指令格式时要用到一些符号,这些符号的约定含义是:Rn当前工作寄存器区中的工作寄存器R0R7(n=0、1、2.7)。Ri 当前工作寄存器区中的工作寄存器R0和R1(i=0或1)。Direct8位直接字节地址。既可以是内部RAM的低128个单元的地址,也可以是特殊功能寄存器的单元地址(或寄存器符号)。#data8位常数,也称立即数。#为立即数前缀符号。#data1616位立即数。,addr1616位目的地址,用于LCALL和LJMP指令中。Addrll11位目的地址,用于ACALL和AJMP指令中。rel 相对偏移量,用8位带符号数的补码表示,在相对转移指令中作地址偏移量,其对应的十进制值范围为-128+127。Bit 位地址。/位操作指令中操作数的前缀,表示将该操作数的内容取反。(X)某寄存器或某单元的内容。(X)表示以X中的内容为地址的单元中的内容。数据传送的方向。$当前指令的起始存放地址。,3.1.2 伪指令 伪指令由程序设计人员在源程序中写出,是对汇编程序进行汇编是下达的指示。例如,指定程序存放的地址,定义符号,指定暂存数据的存储区等。伪指令并不生成目标代码,仅仅在汇编过程中起作用,故又称他为汇编命令或汇编程序控制命令。不同的单片机开发系统,其汇编程序的伪指令并不完全相同,下面介绍一些常用的伪指令。,ORG(指定程序或数据起点)指令格式:ORG nn其中nn是16位二进制数或十进制数表示的地址值。指令功能:指明随后语句从nn单元开始存放。汇编时,第一条指令或数据首字节存入nn单元。以后程序顺序往下存放。此语句总是出现在每段源程序的前面。当程序中有多条ORG指令时,要求各条ORG指令的操作数(16位地址)由小到大顺序安排,空间不允许重叠。,ORG 0000H LJMP MAIN;上电转向主程序 ORG 0023H;串行口中断入口地址 LJMP SERVE1;转中断服务程序 ORG 2000H;主程序 MAIN:MOV TMOD,#20H;设T1作方式2 MOV TH1,#0F3H;赋计数初值 MOV TL1,0F3H SETB TR1;启动T1,2.END(汇编结束)指令格式:END或END标号指令功能:源程序的结束标志,表明程序结束。汇编程序对该指令后面的内容将不再处理。如果源程序是一段子程序,END后不写标号;如果是主程序,则必须写标号,所写标号是该主程序第一条指令的符号地址。一个程序中要有而且只能有一条END指令。,3.EQU(赋值)指令格式:字符名称 EQU 赋值项指令功能:用于给字符名称赋予一个特定值。赋值以后,其值在整个程序中有效,同一字符名称只能赋值一次。其中,赋值项可以是常数、地址或标号,其值可为8位或16位二进制数,赋值以后的字符名称既可以作地址使用也可以作立即数使用。例如:AA EQU R1 A10 EQU 10H ORG 0500H MOV R0,A10;R0(10H)MOV A,AA;A(R1),4.DB(定义字节)指令格式:标号:DB 项或项表指令功能:用于定义字节的内容。项或项表指所定义的一个字节或用逗号分开的字节串,汇编程序将把DB指令中项或项表所指字节的内容(数据或ASCII码)依次存人从标号开始的存储器单元。例如:ORG 1000HFIRST:DB 73,01,01,90,38,00,01,00SECOND:DB 02,34,00,89,67,45,15,26,又例如:ORG 0600HSTART:MOV A,#0B4HTAB:DB 45H,73,01011010B,5,A,-4H上述程序中,通过DB伪指令实现将项表中的5个字节数依次存放在以TAB标号为起始地址的各存储单元中,即TAB单元存入45H,TAB1单元存入49H(即73的十六进制数),TAB2单元存入5AH(即01011010B),TAB3单元存入35H(5的ASCll码),TAB4单元存入41H(A的ASCll码)。TAB5单元存入FCH(-4H的补码)。,DW指令(定义字)指令格式:标号:DW 项或项表指令功能:用于定义字的内容。项或项表指所定义的一个字(两个字节)或用逗号分开的字节串。每个字低8位先放,高8位后放,低字节放在低地址,高字节放在高地址。,DS(定义数据单元)指令格式:标号:DS 数字指令功能:用于保留待存放的一定数量的存贮单元,定义应保留的存贮器单元数。说明自标号所在的地址起共有指令中数字指明的存贮单元数保留可供存入数据。例如:ORG 1800HDATE:DS 05H上面DS指令表示,从1800H地址开始,保留5个连续的地址单元作为备用。注意:对MCS-51单片机来说,DB、DW、DS伪指令只能对程序存储器使用,不能对数据存储器使用。,BIT(定义位)指令格式:标号 BIT 项指令功能:用于定义某特定位的标号。项指的是所定义的位。经定义后,便可用指令中队左面的标号来代替BIT面项所指出的位。例如:FLG BIT F0经BIT伪指令定义后,可以在指令中用FLG来代替位地址F0。这就是直接寻址位的第四种表示方式,,3.2 寻址方式 计算机绝大多数指令执行时都需要使用操作数,因此,指令中就需要给出这些操作数或者给出寻找操作数的地址。指令中给出操作数的地址的方式,叫做寻址方式。根据指令操作的需要,计算机总是提供多种寻址方式。寻址方式越多,计算机的寻址能力就越强,单片机的功能也就越强。MCS5l单片机共有七种寻址方式,下面分别介绍。,1立即寻址 指令中直接给出参与操作的常数(称为立即数),这种寻址方式称为立即寻址。【例3-1】MOV A,60H 机器码为“74H 60H”【例3-2】MOV DPTR,1808H 机器码是“90H 18H 08H”,2直接寻址 指令中直接给出操作数所在存储单元的地址,这种寻址方式称为直接寻址。(1)内部数据存储区(00H7FH)【例3-3】MOV A,40H 机器码是“E5H 40H”,(2)特殊功能寄存器区(80HFFH)特殊功能寄存器SFR只能用直接寻址方式访问。当直接寻址某个SFR时,直接地址可以用它的单元地址,也可以使用它的寄存器符号。以上两种表示方式,对应的机器码是唯一的。使用后者可以增强程序的可读性。【例3-4】MOV A,0F0H MOV A,B 以上两条指令功能完全相同,都是将寄存器B的内容送到累加器A中,前一条指令中第二个操作数采用B寄存器的单元地址表示;后一条指令中是直接用B寄存器的名称来表示。但汇编后的机器码是完全一样的,两个字节:“E5H F0H”。,3寄存器寻址 指令中指定将某个寄存器的内容作为操作数,这种寻址方式称为寄存器寻址。这类寄存器包括工作寄存器R0R7、A、DPTR等。【例3-5】INC R2 机器码是“0AH”,4寄存器间接寻址 指令中指定将某一寄存器的内容作为操作数的地址,这种寻址方式称为寄存器间接寻址。特别要注意的是,存放在寄存器中的内容不是操作数,而是操作数所在的存储单元的地址。利用寄存器间接寻址可访问片内RAM和片外RAM单元中的内容。访问片内RAM中的数据时,只能使用寄存器R0、R1间接寻址;而访问片外RAM中的数据时,可使用R0、R1或DPTR间接寻址。此时,这些寄存器被用作地址指针,前面要加前缀符“”。规定用MOV指令访问片内RAM,用MOVX指令访问片外RAM单元。,【例3-6】MOV A,R0;A(R0)机器码为“E6H”,5变址寻址 以16位寄存器(PC或DPTR)的内容作为基址,以累加器A的内容作为偏移量,将两者进行相加得到的和作为操作数地址,这种寻址方式称为变址寻址。变址寻址只能对程序存储器进行寻址,它可以分为两类:(1)以PC的当前值为基址例如指令:MOVC A,A+PC;(PC)(PC)+1,A(A)+(PC)单字节指令,源操作数为变址寻址。PC的当前值是从程序存储器中取出该条指令后的PC值,它等于该条指令首字节地址加指令的字节数,上述指令的功能是:先使PC加1,然后与累加器的内容相加,形成操作数的地址。,(2)以DPTR的内容为基址例如指令:MOVC A,A+DPTR;A(A)+(DPTR)下面这段程序是将程序存储器ROM中1065H单元的内容读入累加器A中:MOV DPTR,#1060H;DPTR#1060HMOV A,#05H;A#05HMOVC A,A+DPTR;A(1065H),6.相对寻址 相对寻址方式主要用于转移指令,它是把指令中给出的相对地址偏移量rel与PC当前值相加,得到程序转移的目标地址。即:目标地址=PC当前值+relrel是一个带符号的8位二进制补码,其取值范围为128+127。指令中含有操作数rel的转移指令均为相对转移指令,采用的都是相对寻址方式例如:在地址1068H处有一条相对转移指令:1068H SJMP 30H;PC(PC)+2+rel 指令为双字节指令,操作码为“80H 30H”。PC的当前值=1068H+2=106AH,把它与偏移量30H相加,就形成了程序转移的目标地址109AH(向后跳转)。相对寻址方式只适合对程序存储器的访问。,7.位寻址指令中直接给出位操作数的地址,这种寻址方式称为位寻址。例如指令:MOV C,37H;CY(37H),3.3 指令类型 MCS-51单片机指令系统共有111条指令。这些指令可按不同方法进行分类:1.按字节数分 单字节指令(49条)、双字节指令(46条)、三字节指令(16条)。2.按指令的执行时间分 单机器周期指令(64条)、双机器周期指令(45条)、四机器周期指令(2条)。3.按指令的功能分 数据传送指令(28条)、算术运算指令(24条)、逻辑运算指令(25条)、控制转移指令(17条)、位操作指令(17条)。,3.4数据传送类指令3.4.1.内部数据传送指令指令格式:MOV(目的字节),(源字节)说明:将源字节指定的源操作数传送到目的字节指定的存储单元中,而源字节不变。,1.以累加器A为目的地址指令 操作 机器码MOV A,Rn;A(Rn)11101rrrMOV A,direct;A(direct)11100101 directMOV A,Ri;A(Ri)1110011iMOV A,#data;A#data 01110100 data 这组指令的功能是把源操作数送入累加器A中。源操作数的寻址方式分别为寄存器寻址、直接寻址、寄存器间接寻址和立即寻址方式。机器码中i 的值取决于Ri的下标(i=0或1)。,2.以Rn为目的地址指令 操作 机器码MOV Rn,A;Rn(A)11111rrrMOV Rn,direct;Rn(direct)10101rrr directMOV Rn,#data;Rn#data 01111rrr data 这组指令的功能是把源操作数送入工作寄存器中。源操作数的寻址方式分别为寄存器寻址、直接寻址和立即寻址方式。【例3-7】设(32H)=10H,执行指令:MOV R0,#32HMOV A,R0执行结果是:(R0)=32H,(A)=10H,(32H)=10H,3.以直接地址为目的地址指令 操作 机器码MOV direct,A;direct(A)11110101 directMOV direct,Rn;direct(Rn)10001rrr directMOV direct,Ri;direct(Ri)1000011i directMOV direct1,direct2;direct1(direct2)10000101 direct2 direct1MOV direct,#data;direct#data 01110101 direct data 这组指令的功能是将源操作数送入直接地址所指的存储单元中。源操作数的寻址方式分别为寄存器寻址、寄存器间接寻址、直接寻址和立即寻址方式。,4.以寄存器间接地址为目的地址指令 操作 机器码MOV Ri,A;(Ri)(A)1111011iMOV Ri,direct;(Ri)(direct)1010011i directMOV Ri,#data;(Ri)data 0111011i data 这组指令的功能是把源操作数送入R0或R1指针间接寻址的片内RAM单元中。源操作数的寻址方式分别为寄存器寻址、直接寻址和立即寻址方式。该组指令中目的操作数是寄存器间接寻址方式,可在片内RAM的00H7FH范围内寻址,寄存器间接寻址是不能对SFR区进行访问的,这是对8051、8031、8751等芯片而言的。对增强型单片机芯片如8052、8032和8752等具有与SFR区地址重叠的高128个单元(80FFH)的片内RAM,该高128个单元只能采用寄存器间接寻址方式进行读写操作。,5.以DPTR为目的地址的16位指令指令 操作 机器码MOV DPTR,#data16;DPTR#data16 10010000(data)高8位(data)低8位 这条指令的功能是把一个16位立即数送入DPTR寄存器。立即数的高8位送DPH,立即数的低8位送DPL。【例3-8】MOV DPTR,2200H;DPTR#2200H指令的执行结果是:(DPTR)=2200H,其中(DPH)=22H,(DPL)=00H。,【例3-9】设(30H)=40H,(40H)=10H,(P1)=0CAH,试判断下列程序执行后的结果。MOV R0,#30H;R0#30HMOV A,R0;A(30H),(A)=40HMOV R1,A;R1(A),(R1)=40HMOV B,R1;B(40H),(B)=10HMOV R1,P1;(R1)(P1),(40H)=0CAHMOV P2,P1;P2(P1),(P2)=0CAH结果是:(A)=40H,(B)=10H,(40H)=0CAH,(P2)=0CAH,3.4.2.片外数据传送指令 此类指令实际上是片外RAM与累加器A之间的传送指令。片外RAM单元只能采用寄存器间接寻址的方式来访问,R0、R1或 DPTR可作间接寻址的寄存器。1.用DPTR间接寻址的指令指令 操作 机器码MOVX A,DPTR;A(DPTR)11100000MOVX DPTR,A;(DPTR)(A)11110000 使用以上两条指令时,先将要访问的片外RAM单元的地址送入DPTR,然后再用上述指令来实现数据的传送。,【例3-10】将片外RAM 1000H单元中的内容送到2000H单元。MOV DPTR,#1000H;DPTR#1000HMOVX A,DPTR;A(DPTR)MOV DPTR,#2000H;DPTR#2000HMOVX DPTR,A;(DPTR)(A)在两个片外RAM单元之间是不能直接进行数据的传送的,必须经过片内的累加器A来间接地传送。由于DPTR是16位的地址指针,因此可寻址64KB的外部RAM。,2.用R0和R1间接寻址的指令指令 操作 机器码MOVX A,Ri;A(Ri)1110001i;A(P2Ri)MOVX Ri,A;(Ri)(A)1111001i;(P2Ri)(A)使用以上指令时,要先将外部RAM的单元地址送入Ri(R0或R1),由于Ri只能存入8位地址,因此用它对外部RAM间接寻址只能限于256个单元。由 P2口输出外部RAM的高8位地址(也称页地址),而由Ri提供低8位地址(进行页内寻址,每256个单元为1页),则可共同寻址64KB范围。【例3-11】将累加器A的内容送外部RAM的2060H单元中。MOV P2,#20H;P2#20H,得到页地址MOV R0,#60H;R0#60H,得到页内地址MOVX R0,A;2060H(A),3.4.3 访问程序存储器的传送指令此类指令只有两条,格式如下;指令 操作 机器码MOVC A,A+PC;PC(PC)+1 10000011;A(A)+(PC)MOVC A,A+DPTR;A(A)+(DPTR)10010011 其功能是把程序存储器中源操作数的内容送入累加器A。程序存储器中除了存放程序之外,还会放一些表格数据,这组指令用于到程序存储器中查表格数据,并将它送入累加器A,所以也称它们为查表指令。,【例3-12】用数据传送指令实现下列要求的数据传送。将片内RAM 60H单元内容送外部RAM 1030H单元,将ROM 1000H单元内容送内部RAM 70H单元。程序 MOV P2,#10H MOV R0,#30H MOV A,60H MOVX R0,A程序 MOV A,#00H MOV DPTR,#1000H MOVC A,A+DPTR MOV 70H,A,3.4.4.数据交换指令 数据交换是在内部RAM单元与累加器A之间进行,有字节和半字节交换两种。1.字节交换指令指令 操作 机器码XCH A,Rn;(A)(Rn)11001rrrXCH A,direct;(A)(direct)11000101 directXCH A,Ri;(A)(Ri)1100011i 这组指令的功能是将累加器A的内容与源操作数相互交换。源操作数的寻址方式分别为寄存器寻址,直接寻址和寄存器间接寻址方式。2.半字节交换指令指令 操作 机器码XCHD A,Ri;(A)30(Ri)30 1101011i 指令的功能是将累加器A的低4位与Ri间接寻址单元内容的低4位相互交换,各自的高4位维持不变。,3.4.5.堆栈操作指令 在MCS-51单片机的片内RAM中,可设置一个后进先出的堆栈区,主要用于保护和恢复CPU的工作现场,也可实现内部RAM单元之间的数据传送和交换。堆栈操作时,堆栈指针SP始终指向栈顶位置。一般在初始化时应对SP进行设定,通常将堆栈设在内部RAM的30H7FH范围内。堆栈操作有进栈和出栈两种。1.进栈指令 指令 操作 机器码PUSH direct;SP(SP)+1 11000000 direct;(SP)(direct)是一条双字节指令,操作数只能采用直接寻址的方式访问。指令的功能是先将堆栈指针SP的内容加1(指针上移一个单元),然后将直接寻址的单元内容送到SP指针所指的堆栈单元中(栈顶)。,【例3-13】设(SP)=09H,(DPTR)=0123H,试分析下列指令的执行结果:PUSH DPL 行第一条指令:(SP)+1=0AH SP;(DPL)=23H(0AH)PUSH DPH 执行第二条指令:(SP)+1=0BH SP;(DPH)=01H(0BH)执行结果是:(0AH)=23H,(0BH)=01H,(SP)=0BH,2.出栈指令指令 操作 机器码POP direct;direct(SP)11010000 direct;SP(SP)1 指令的功能是将堆栈指针SP所指的单元(栈顶)内容弹出,并送入直接寻址的(direct)单元中,然后SP的内容减1(指针下移一个单元)。【例3-14】设(SP)=32H,(31H)=23H,(32H)=01H,试分析下列指令的执行结果。POP DPH;(SP)=(32H)=01H DPH;(SP)-1=32H 1=31H SP POP DPL;(SP)=(31H)=23H DPL;(SP)-1=31H 1=30H SP执行结果为(DPTR)=0123H,(SP)=30H。,3.5 算术运算类指令3.5.1 加法指令1.不带进位的加法指令 指令 操作 机器码ADD A,Rn;A(A)+(Rn)00101rrrADD A,direct;A(A)+(direct)00100101 directADD A,Ri;A(A)+((Ri))0010011iADD A,#data;A(A)+data 00100100 data 这组加法指令的功能是将源操作数和累加器A中的操作数相加,其结果存放到A中。源操作数分别为寄存器寻址、直接寻址、寄存器间接寻址和立即寻址。,【例3-15】设有两个无符号数放在A和R2中,设(A)=0C6H(198),(R2)=68H(104),执行指令:ADD A,R2 试分析运算结果及对标志位的影响。解:写成竖式(A)11000110 198(R2)+01101000+104(A)100101110 302 结果是:(A)=2EH,CY=1,AC=0,OV=0。两个无符号数相加,要根据CY来判断,由CY=1可知本次运算结果发生了溢出,结果超出了255,结果应该是包括CY在内的9位二进制数(即302)。,2.带进位加法指令ADDC指令 操作 机器码ADDC A,Rn;A(A)+(Rn)+(CY)00111rrrADDC A,direct;A(A)+(direct)+(CY)00110101 directADDC A,Ri;A(A)+((Ri))+(CY)0011011iADDC A,#data;A(A)+data+(CY)00110100 data 这组指令的功能是将累加器A的内容、指令中的源操作数、和CY的值相加,并把相加结果存放到A中。ADDC指令对PSW标志位的影响与ADD指令相同。这组指令常用于多字节加法运算中的高字节相加,考虑到了低字节相加时产生向高字节的进位情况。,3.加1指令指令 操作 机器码INC A;A(A)+1 00000100INC Rn;Rn(Rn)+1 00001rrrINC direct;direct(direct)+1 00000101 directINC Ri;(Ri)(Ri)+1 0000011iINC DPTR;DPTR(DPTR)+1 10100011 这组指令的功能是使源地址所指的RAM单元中的内容加 1。操作数可采用寄存器寻址、直接寻址、寄存器间接寻址方式。除INC A指令对奇偶标志位(P)有影响外,其余指令执行时均不会对PSW的任何标志位产生影响。,【例3-16】设有两个16位无符号数,被加数存放在内部RAM的30H(低位字节)和31H(高位字节)中,加数存放在40H(低位字节)和41H(高位字节)中。试写出求两数之和,并把结果存放在30H和31H单元中的程序。解:参考程序为MOV R0,#30H;地址指针R0赋值MOV R1,#40H;地址指针R1赋值MOV A,R0;被加数的低8位送AADD A,R1;被加数与加数的低8位相加,和送A,并影响CY标志MOV R0,A;和的低8位存30H单元INC R0;修改地址指针R0INC R1;修改地址指针R1MOV A,R0;被加数的高8位送AADDC A,R1;被加数和加数的高8位与Cy相加,和送AMOV R0,A;和的高8位存31H单元,3.5.2 减法指令带借位减法指令指令 操作 机器码SUBB A,Rn;A(A)(Rn)(Cy)10011rrrSUBB A,direct;A(A)(direct)(Cy)10010101 directSUBB A,Ri;A(A)(Ri)(Cy)1001011iSUBB A,#data;A(A)data(Cy)10010100 data 该组指令的功能是从累加器A减去源操作数及标志位CY,其结果再送累加器A。即被减数在累加器A中,减数分别采用寄存器寻址、直接寻址、寄存器间接寻址和立即寻址方式,还有一个减数为PSW中的CY位。CY位在减法运算中是作借位标志。,【例3-17】设(A)=98H,(R3)=6AH,CY=1,执行指令:SUBB A,R3 分析执行结果及对标志位的影响解:(A)10011000 98H(R3)01101010 6AH CY 1 1(A)00101101 2DH 结果是:(A)=2DH,CY=0,AC=1,OV=1 若看成无符号数相减,因CY=0,表示无借位,152 106 1=45。若看成带符号数相减,因OV=1,表示溢出,结果出错,(104)(+106)1=+45。,2.减1指令指令 操作 机器码DEC A;A(A)-1 00010100DEC Rn;Rn(Rn)-1 00011rrrDEC direct;direct(direct)-1 00010101 directDEC Ri;(Ri)(Ri)-1 0001011i 这组指令的功能是使源地址所指的RAM单元中的内容减1。操作数可采用寄存器寻址、直接寻址和寄存器间接寻址方式。除DEC A指令影响P标志位外,其余减1指令均不影响任何标志。,3.5.3 十进制调整指令指令 机器码DA A 11010100 指令用于实现BCD码的加法运算,其功能是将累加器A中按二进制相加后的结果调整成BCD码相加的结果。【例3-18】设(A)=(01110101)BCD=75,(R3)=(01101001)BCD=69,CY=0,执行:ADD A,R3 DA A执行过程为:(A)01110101(R3)+01101001(A)11011110 得到二进制加法的结果+110 低4位 9,加6修正 11100100+110 高4位 9,加6修正 1 01000100 得到BCD码加法的正确结果 进位执行后(A)=(01000100)BCD=44,(CY)=1。运算结果为144。,3.5.4 乘法指令指令 操作 机器码MUL AB;BA(A)(B)10100100 指令的功能是把累加器A和寄存器B中两个8位无符号整数相乘,并把乘积的高8位存于寄存器B中,低8位存于累加器A中。乘法运算指令执行时会对标志位产生影响:CY标志总是被清0,即CY=0;OV标志则反映乘积的位数,若OV=1,表示乘积为16位数;若OV=0,表示乘积为8位数。【例3-19】设(A)=64H(100),(B)=3CH(60),执行指令:MUL AB结果是:(A)(B)=1770H(6000),(A)=70H,(B)=17H,CY=0,OV=1。,3.5.5 除法指令指令 操作 机器码DIV AB;A商,B余(A)(B)10000100 指令的功能是把累加器A和寄存器B中的两个8位无符号整数相除,所得商的整数部分存于累加器A中,余数存于B中。除法指令执行过程对标志位的影响:CY位总是被清0,OV标志位的状态反映寄存器B中的除数情况,若除数为0,则OV=1,表示本次运算无意义,否则,OV=0。【例3-20】设(A)=0F0H(240),(B)=20H(32),执行指令:DIV AB结果是:(A)=07H(商7),(B)=10H(余数16),Cy=0,OV=0。,3.6 逻辑运算类指令3.6.1 累加器A的逻辑操作指令1.累加器A清0 CLR A;A00H 111001002.累加器A取反CPL A;A()111101003.累加器A循环左移RL A 00100011=11001010 变成 10010101考虑实验一:(A)=#FEH=11111110B 变成 11111101B,【例3-21】执行下列指令后,A中的内容如何变化?MOV A,#11H;(A)=11H(17)RL A;(A)=22H(34)RL A;(A)=44H(68)RL A;(A)=88H(136)RL A;(A)=11H(17)00010001左环移一次:00100010左环移两次:01000100左环移三次:10001000利用左移指令,可实现对A中的无符号数乘2的目的。,4.累加器A带进位循环左移RLC A 001100110 10001101 变成 1 000110105.累加器A循环右移RR A 0000001101000100B(44H)变成 00100010B(22H)对累加器A进行的循环右移,可实现对A中无符号数的除2运算。,6.累加器A带进位循环右移RRC A 000100110 10001101B 变成 1 01000110 7.累加器A半字节交换D7D4 D3D0SWAP A 1100010000101100B 变成 11000010B功能是将累加器A中内容的高4位与低4位互换。,3.6.2 逻辑与指令ANL A,Rn;A(A)(Rn)01011rrrANL A,direct;A(A)(direct)01010101 directANL A,Ri;A(A)(Ri)0101011iANL A,#data;A(A)#data 01010100 dataANL direct,A;direct(direct)(A)01010010 directANL direct,#data;direct(direct)#data 01010011 direct data 前4条指令均以累加器A为目的操作数,其功能是将累加器A的内容和源操作数按位进行逻辑与操作,结果送累加器A。源操作数可采用寄存器寻址、直接寻址、寄存器间接寻址或立即寻址方式。指令执行时将影响奇偶标志位P。在程序设计中,逻辑与指令主要用于对目的操作数中的某些位进行屏蔽(清0)。方法是:将需屏蔽的位与“0”相与,其余位与“1”相与即可。,【例3-22】分析下列两条指令的执行结果。ANL 30H,#0FHANL A,#80H 第一条指令执行后,将30H单元内容的高4位屏蔽(清0),只保留了低4位。可用于将09的ASCII码转换为BCD码。设(30H)=35H(5的ASCII码),执行指令后变为:(30H)=05H(5的BCD码)。第二条指令执行后,只保留了最高位,而其余各位均被屏蔽掉。可用于对累加器A中的带符号数的正负判断。若A中为负数,则执行该指令后(A)00H;若A中为正数,则结果为(A)=00H。,3.6.3 逻辑或指令ORL A,Rn;A(A)(Rn)01001rrrORL A,direct;A(A)(direct)01000101 directORL A,Ri;A(A)(Ri)0100011iORL A,#data;A(A)#data 01000100 dataORL direct,A;direct(direct)(A)01000010 directORL direct,#data;direct(direct)#data 01000011 direct data 这组指令的功能是对两个操作数按位进行逻辑或操作,源操作数及目的操作数的寻址方式和ANL指令类似。前4条指令将影响P标志位。逻辑或指令可对目的操作数的某些位进行置位。方法是:将需置位的位与“1”相或,其余位与“0”相或即可,常用于组合数据。,【例3-23】将工作寄存器R2中数据的高4位和R3中的低4位拼成一个数,并将该数存入30H。MOV R0,#30H;R0作地址指针MOV A,R2ANL A,#0F0H;屏蔽低4位MOV B,A;中间结果存B寄存器MOV A,R3ANL A,#0FH;屏蔽高4位ORL A,B;组合数据MOV R0,A;结果存30H单元。,3.6.4 逻辑异或指令XRL A,Rn;A(A)(Rn)01101rrrXRL A,direct;A(A)(direct)01100101 directXRL A,Ri;A(A)(Ri)0110011iXRL A,#data;A(A)#data 01100100 dataXRL direct,A;direct(direct)(A)01100010 directXRL direct,#data;direct(direct)#data 01100011 direct data 表示当两个输入中只有一个为1时,输出为1;否则为0。异或运算的逻辑表达式为:A反 B+A B反 逻辑异或指令可用于对目的操作数的某些位取反,而其余位不变。方法是:将要取反的这些位和“1”异或,其余位则和“0”异或即可。,【例3-24】分析下列程序的执行结果。MOV A,#77H;(A)=77HXRL A,#0FFH;(A)=77HFFH=88HANL A,#0FH;(A)=88H 0FH=08HMOV P1,#64H;(P1)=64HANL P1,#0F0H;(P1)=64HF0H=60HORL A,P1;(A)=08H60H=68H01110111B 11111111B=10001000B10001000B 00001111B=00001000B01100100B 11110000B=01100000B00001000BH 01100000B=01101000B,3.7 控制转移类指令3.7.1 无条件转移指令 无条件转移指令是使程序无条件转移到指定的地址去执行。它分为长转移指令、短转移指令、相对转移指令和间接转移指令4条。该类指令不影响标志位。长转移指令 LJMP addr16;PCaddr16 00000010 a15 a8 a7 a0例如:LJMP 1000H;(PC)1000H,程序转向1000H地址处执行 LJMP ABD;(PC)ABD,程序转向ABD地址处执行 在后一条指令中,使用了符号地址ABD,这在程序中是常见到的,符号地址是某条指令前的标号。,2.短转移指令AJMP addr11;PC(PC)+2 a10 a9 a8 00001 a7 a0;PC100addr11 指令的功能是先使程序计数器PC值加2(完成取指并指向下一条指令的地址),然后将指令提供的addrll作为转移目的地址的低11位,和PC当前值的高5位形成16位的目标地址,程序随即转移到该地址处执行。这是一条2字节指令。addrll可表示的地址是从00000000000 11111111111,范围为2KB。转移地址的高5位是PC当前值中的内容,也就是

    注意事项

    本文(MCS-51单片机指令系统.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开