下载

1下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 80c51指令系统

80c51指令系统.ppt

80c51指令系统

jones
2010-07-04 0人阅读 举报 0 0 暂无简介

简介:本文档为《80c51指令系统ppt》,可适用于工程科技领域

第三章C单片微机的指令系统第三章C单片微机的指令系统C指令系统概述C指令系统概述C指令系统专用于C系列单片微机是一个具有种操作码(H至FFH除AH外)的集合。用汇编语言表达操作代码时只要熟记种助记符。种助记符代表了种功能因为有的功能如数据传送可以有几种助记符如MOV、MOVC、MOVX。而指令功能助记符与操作数各种寻址方式的结合共构造出种指令同一种指令所对应的操作码可以多至八种(如指令中Rn对应寄存器RR)。寻址方式 寻址方式就是在指令中给出的寻找操作数或操作数所在地址的方法。执行任何一条指令都需要使用操作数。Cl系列单片微机指令系统中共有以下种寻址方式。⒈立即寻址立即寻址是指在指令中直接给出操作数出现在指令中的操作数称为立即数因此就将这种寻址方式称为立即寻址。为了与直接寻址指令中的直接地址相区别在立即数前面必需加上前缀“#”。例如:指令MOVDPTR#H其中H就是立即数指令功能是把位立即数H送入数据指针DPTR中如图–所示。寻址方式.直接寻址直接寻址是指在指令中直接给出操作数单元的地址。例如:指令MOVAAH其功能是把片内RAM中AH单元内的数据传送给累加器A如图–所示。直接寻址方式只能给出位地址因此这种寻址方式的寻址范围只限于片内RAM。具体地说:⑴低单元在指令中直接以单元地址形式给出。⑵特殊功能寄存器这时除可以单元地址形式给出外还可以寄存器符号形式给出。虽然特殊功能寄存器可以使用符号标志但在指令代码中还是按地址进行编码的。应当说明的是直接寻址是访问特殊功能寄存器的唯一方法。 .寄存器寻址寄存器寻址是指在指令中将指定寄存器的内容作为操作数。因此指定了寄存器就能得到操作数。寄存器寻址方式中用符号名称来表示寄存器。例如:指令INCR其功能是把寄存器R的内容加再送回R中。由于操作数在R中指定了R也就得到了操作数如图–所示。寄存器寻址方式的寻址范围包括:()四个寄存器组共个通用寄存器。但在指令中只能使用当前寄存器组。因此在使用前要通过指定PSW中的RS、RS以选择使用的当前寄存器组。()部分特殊功能寄存器。例如累加器A、AB寄存器对以及数据指针DPTR。.寄存器间接寻址寄存器间接寻址是指在指令中给出的寄存器内容是操作数的地址从该地址中取出的才是操作数。寄存器间接寻址也需以寄存器符号名称的形式表示。为了区别寄存器寻址和寄存器间接寻址在寄存器间接寻址中应在寄存器的名称前面加前缀“@”。假定R寄存器的内容是H则指令ANLAR的功能是以R寄存器的内容H为地址将H地址单元的内容与累加器A中的数相“与”其结果仍存放在A中、其功能示意请参见图–。寄存器间接寻址的寻址范围:⑴片内RAM的低单元只能采用R或R为间址寄存器其形式为Ri(i=)。⑵片外RAM的KB单元使用DPTR作为间址寄存器其形式为@DPTR例如MOVXA@DPTR其功能是把DPTR指定的片外RAM单元的内容送累加器A。⑶片外RAM低单元除了可使用DPTR作为间址寄存器外也可使用R或R作间址寄存器。例如:MOVXA@R.即把R指定的片外RAM单元的内容送累加器A。⑷堆栈区:堆栈操作指令(PUSH和POP)也应算作是寄存器间接寻址即以堆栈指针(SP)作间址寄存器的间接寻址方式。⒌相对寻址相对寻址是指在指令中给出的操作数为程序转移的偏移量。在相对转移指令中给出地址偏移量(在C系列单片微机的指令系统中以“rel”表示)把PC的当前值加上偏移量就构成了程序转移的目的地址。转移的目的地址可用如下公式表示:目的地址=转移指令所在地址+转移指令字节数+rel在系列单片微机的指令系统中有许多条相对转移指令这些指令多数均为两字节指令.只有个别的是三字节的指令。偏移量rel是一个带符号的位二进制补码数所能表示的数的范围是一~+。因此以相对转移指令的所在地址为基点向前最大可转移(十转移指令字节数)个单元地址向后最大可转移(一转移指令字节数)个单元地址。例如:指令JCH表示若进位位C为则程序计数器PC中的内容不变即不转移若进位位C为则以程序计数器PC中当前值为基地址加上偏移量H后所得结果作为该转移指令的目的地址其执行示意图如图–所示。指令的操作码存在H单元偏移量存在H单元。执行该指令后程序计数器PC指向H(即当前值)。这里H即–故H与–(H)相加(补码运算)后得到转移地址FH。.变址寻址变址寻址是指以DPTR或PC作基址寄存器累加器A作变址寄存器以两者内容相加。形成的位程序存储器地址作为操作数地址。又称基址寄存器+变址寄存器间接寻址。例如:指令MOVCA@A+DPTR其功能是把DPTR和A的内容相加所得到的程序存储器地址单元的内容送A。假定指令执行前(A)=H(DPTR)=H则该指令的操作示意请参见图–。变址寻址形成的操作数地址为H+H=AAH若AAH单元的内容为H则该指令执行的结果是A的内容为H。C指令系统中的变址寻址指令有如下特点:⑴变址寻址方式只能对程序存储器进行寻址或者说是专门针对程序存储器的寻址方式。⑵变址寻址指令只有三条MOVCAA+DPTRMOVCA@A+PCJMPA+DPTR其中前两条是程序存储器读指令后一条是无条件转移指令。⑶这三条指令却都是单字节指令。⑷变址寻址方式用于查表操作。.位寻址C有位处理功能可以对数据位进行操作因此就有相应的位寻址方式。位寻址的寻址范围:()片内RAM中的位寻址区片内RAM中的单元地址H~FH共个单元位为位寻址区位地址是H~FH。对这个位的寻址使用直接位地址表示。例如MOVCBH指令的功能是把位寻址区的BH位状态送累加位C。()可位寻址的特殊功能寄存器位可供位寻址的特殊功能寄存器共有个有寻址位位。这些寻址位在指令中有以下种表示方法:•直接使用位地址表示方法。•单元地址加位的表示方法。例如H单元的位则表示为H。•特殊功能寄存器符号加位的表示方法、例如PSW寄存器的位可表示为:为PSW。•位名称表示方法特殊功能寄存器中的一些寻址位是有名称的例如PSW寄存器位为F标志位则可使用F表示该位。对于指令中的操作数因为指令操作常伴有从右向左传送数据的内容所以常把左边操作数称为目的操作数而右边操作数称为源操作数。C指令系统的种寻址方式概括起来如表–所列。l指令格式指令的表示方法称之为指令格式其内容包括指令的长度和指令内部信息的安排等。一条指令通常由操作码和操作数两部分组成。操作码是用来规定指令所完成的操作的而操作数则表示操作的对象。操作数可能是一个具体的数据也可能是指出取得数据的地址或符号。在C系列单片微机的指令系统中有单字节、双字节和三字节等不同长度的指令。⑴单字节指令:指令只有一个字节操作码和操作数同在一个字节中。在C系列的指令系统中共有条单字节指令。操作码地址码如MOVARn指令机器码为单字节rrr其中rrr可表示为分别代表RRl指令格式⑵双字节指令:双字节指令包括两个字节。其中一个字节为操作码另一个字节是操作数。在C系列的指令系统中共有条双字节指令。操作码地址码数据或地址码如MOVA#data位立即数data需占一个字节操作码不能省却也需一个字节。⑶三字节指令:在三字节指令中操作码占一个字节操作数占两个字节。其中操作数既可能是数据也可能是地址。在C系列的指令系统中共有条三字节指令。操作码数据或地址码数据或地址码如ANLdirect#data指令需三个字节第一字节为操作码第二字节为位直接地址direct第三字节为位立即数data。从指令执行时间来看单机器周期指令有种双机器周期指令有种只有乘法、除法指令的执行时间为个机器周期。在MHz晶振条件下C单片微机的指令执行时间分别为μS、μS、μS。可见C的指令系统在存储空间和时间的利用效率上都是比较高的。指令分类 C的指令系统共有条指令按其功能可分为五大类:⑴数据传送类指令(条)⑵算术运算类指令(条)⑶逻辑运算类指令(条)⑷控制转移类指令(条)⑸布尔操作(位)类指令(条)。本章将分类介绍这五类指令并在书后以附录形式逐条列出。指令分类指令系统中使用符号说明在说明和使用C系列的指令时经常使用一些符号。下面将所使用的一些符号的意义作一简单说明。Rnn=~表示当前寄存器组的个通用寄存器R~R中的一个。Rii=l可用作间接寻址的寄存器只能是R、R两个寄存器中的一个。direct内部的位地址既可以指片内RAM的低个单元地址也可以指特殊功能寄存器的地址或符号名称因此direct表示直接寻址方式。#data指令中所含的位立即数。#data指令中所含的位立即数。指令系统中使用符号说明addr位目的地址,只限于在LCALL和LJMP指令中使用。addr位目的地址只限于在ACALL和AJMP指令中使用。rel相对转移指令中的偏移量为位带符号数。为SJMP和所有条件转移指令所用。转移范围为相对于下一条指令笫一字节地址的~+。DPTR数据指针。bit片内RAM(包括部分特殊功能寄存器)中的直接寻址位。A累加器。BB寄存器。C进位标志位是布尔处理机中的累加器也称之为累加位。@间址寄存器的前缀标志。位地址的前缀标志表示对该位操作数取反。(×)某寄存器或某单元的内容。((×))由×寻址的单元中的内容。←箭头左边的内容被箭头右边的内容所取代。单片微机执行指令的过程 单片微机执行指令的过程分为取指令和执行指令二项基本内容。在取指阶段单片微机从程序存储器中取出指令操作码送到指令寄存器IR中通过指令译码器的译码产生一系列的控制信号。在指令执行阶段中利用指令译码产生的控制信号进行本指令规定的操作。单片微机执行指令的过程数据传送类指令数据传送类指令C具有丰富的数据传送指令能实现多种数据的传送操作。数据传送方向及相互关系见图–。数据传送指令按功能又可分为内部八位数据传送指令、十六位数据传送指令(专用于设定地址指针)、外部数据传送指令、程序存储器数据传送指令、交换指令和堆栈操作指令。助记符有MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP等八种。源操作数可采用寄存器、寄存器间接、直接、立即、寄存器基址加变址等五种寻址方式目的操作数可以采用寄存器、寄存器间接、直接等三种寻址方式。数据传送指令的一般操作是把源操作数传送到目的操作数指令执行后源操作数不变目的操作数被修改为源操作数。若要求进行数据传送时目的操作数不变则可以用交换指令。数据传送类指令不影响标志位C、AC、OV。对于P标志一般不加以说明。只有一种堆栈操作指令可以直接修改程序状态字PSW这时可以使某些标志位发生改变。从图–中可以看出数据传送指令的特点有:⑴可以进行直接地址到直接地址的数据传送,能把一个并行IO口中的内容传送到片内RAM单元中而不必经过累加器或工作寄存器Rn。⑵用R和R寄存器间址访问片外数据存储器个字节址片内RAM中的任一单元。用DPTR间址访问片外全系部KB的数据存储器或IO。⑶累加器A能对Rn寄存器寻址能与特殊功能寄存器之间进行一个字节的数据传送能对片内RAM直接寻址能与片内RAM单元之间进行低半字节的数据交换。⑷能用变址寻址方式访问程序存储器中的表格将程序存储器单元中的固定常数或表格字节内容传送到累加器A中。内部八位数据传送指令 主要用于C内部存储器和寄存器之间的数据传送。这类传送指令的格式为:MOV<目的字节><源字节>它的功能是把源字节的内容送到目的字节而源字节的内容不变。操作属于拷贝性质。源操作数可以有:累加器A工作寄存器Rn(n=…)直接地址direct、间接寻址寄存器Ri(I=)和立即数#data等五种。目的操作数可以有:累加器A,工作寄存器Rn(n=…)直接地址direct和间接寻址寄存器Ri(i=)等四种。内部八位数据传送指令⒈以累加器A为目的操作数的指令组指令功能寻址范围机器码MOVARn(A)←(Rn)RRrrr(EEFH)种操作码MOVAdirect(A)←(direct)FFHdirect双字节MOVARi(A)←((Ri))FFHr(EEH)种操作码MOVA#data(A)←(#data)##FFHdata双字节传送指令是以累加器A为中心的总体结构。绝大部分传送操作均需通过A进行的。⒈以累加器A为目的操作数的指令组指令功能寻址范围机器码MOVARn(A)←(Rn)RRrrr(EEFH)种操作码MOVAdirect(A)←(direct)FFHdirect双字节MOVARi(A)←((Ri))FFHr(EEH)种操作码MOVA#data(A)←(#data)##FFHdata双字节传送指令是以累加器A为中心的总体结构。绝大部分传送操作均需通过A进行的。⒉以工作寄存器Rn为目的操作数的指令组 MOVRnA(Rn)←(A)MOVRndirect(Rn)←(direct)MOVRn#data(Rn)←#data 这组指令的功能是把源操作数的内容送入当前工作寄存器区的R~R中的某一个寄存器。源操作数有寄存器寻址、直接寻址和立即寻址等寻址方式。⒊以直接地址direct为目的操作数的指令组 MOVdirectA(direct)←(A)MOVdirectRn(direct)←(Rn)MOVdirectdirect(direct)←(direct)MOVdirect@Ri(direct)←((Ri))MOVdirect#data(direct)←#data 这组指令的功能是把源操作数的内容送入由直接地址指出的存储单元。源操作数有寄存器寻址、直接寻址、寄存器间接寻址和立即寻址等寻址方式。直接地址direct为位直接地址可寻址~个单元对C可直接寻址内部RAM~个地址单元和~地址的特殊功能寄存器例如:MOVAH表示把片内RAM中地扯为H单元(即P口)中的内容送A。MOVH#H这是一条字节指令表示把立即数H送到片内RAM中的H地址单元中去。MOVEH这是一条字节指令表示把EH单元的内容送到H单元中去。这是片内数据存储单元中的直接地址单元之间数据的直接传送。十六位数据传送指令MOVDPTR#data(DPTR)←#data 这是C中唯一的一条位指令。此指令把位常数装入数据指针DPTR即数据高八位送入DPH寄存器数据低八位送入DPL寄存器。位常数在指令的第二、第三字节中(第二字节为高位字节DPH第三字节为低位字节DPL)。此操作不影响标志位。例:执行指令MOVDPTR#H执行结果∶(DPH)=H(DPL)=H十六位数据传送指令外部数据的传送指令组 这组的功能是实现累加器A与外部数据存储器或IO口之间传送一个字节数据的指令。数据均由P口分时输入和输出。这时若要访问大于个单元的片外RAM时可选用任何其它输出口线来输出高位的地址(一般选用P口输出高位地址)。采用位DPTR作间址可寻址整个KB片外数据存贮空间低位(DPL)由P口进行分时使用高位(DPH)由P口输出。外部数据的传送指令组 ⒈外部数据存储器或IO内容送累加器A MOVXARiMOVXADPTR 说明:指令执行时在P引脚上输出RD有效信号可用作外部数据存储器或IO的读选通信号。P口分时输出由Ri或DPL指定的低八位地址信息和输入累加器中的数据信息P口则输出DPH指定的高八位地址信息。⒉累加器A内容送外部数据存储器或IOMOVXRiAMOVXDPTRA 说明:该组指令执行时在P引脚上输出WR有效信号可以用作外部数据存储器或IO的写选通信号。P口分时输出由Ri或DPL指定的低八位地址信息和累加器中输出的数据信息P口则输出DPH指定的高八位地址信息。例:设工作寄存器R的内容为HR的内容为H片外RAMH单元的内容为H。执行指令:MOVXAR(H)=H→AMOVX@RA(A)=H→片外H单元中执行结果为片外RAM的(H)=H(H)=H。例:某应用系统外扩了K字节RAM要求把内部RAM的H单元内容发送到外部RAM的H单元中。MOVDPTR,#H外部数据存储器地址指针MOVR,#H内部数据存储器地址指针MOVA,R取内部数据存储器H单元内容MOVXDPTR,A送外部数据存储器H单元程序存储器数据传送指令(或称查表指令) MOVCA@A+PCMOVCAADPTR 这两条指令的功能均是从程序存储器中读取数据(如表格、常数等)执行过程相同其差别是基址不同因此适用范围也不同。累加器A为变址寄存器而PC、DPTR为基址寄存器。DPTR为基址寄存器时允许数表存放在程序存储器的任意单元称为远程查表编程比较直观而PC为基址寄存器时数表只能放在该指令单元往下的个单元中称为近程查表。编程时需计算A值与数表首址的偏移量。例:求平方数(远程查表法)MOVDPTR,#TABLE指向表首址MOVCA,ADPTR查表得到平方数MOVH,A存平方数HERE:SJMPHERETABLE∶DBH,H,H,H平方表DBH,H,HDBH,H,H例:求平方数(近程查表)ADDA#rel修正偏移量MOVCAAPC查表得到平方数MOVHA存平方数HERE∶SJMPHERETABLE∶DBHHHHH平方表DBHHHHH注∶rel=TABLE-(查表指令地址+)MOVC指令为单字节。⒋以间接寻址寄存器Ri为目的操作数的指令组MOVRiA((Ri))←(A)MOVRidirect((Ri))←(A)MOVRi#data((Ri))←#data 这组指令的功能是把源操作数的内容送入由R或R的内容所指的内部RAM中的存储单元。源操作数有寄存器寻址、直接寻址和立即寻址等寻址方式。数据交换指令⒈字节交换指令XCH组XCHARn(A)(Rn)、direct、RiXCHAdirectXCHARi 这类指令的功能是将累加器A与源操作数的字节内容互换。源操作数有寄存器寻址、直接寻址和寄存器间接寻址等寻址方式。操作码分别为CH~CFH例:设(R)=H(A)=FH片内(H)=BBH。执行指令XCHAR执行结果(A)=BBH(H)=FH。数据交换指令⑵SWAPA该指令将累加器A的高、低半字节交换该操作也可看作是四位循环指令。见图–。例:设(A)=H(B)执行SWAPA指令执行结果为(A)=H(B)。由于十六进制数或BCD码都是以四位二进制数表示因此XCHD和SWAP指令主要用于实现十六进制数或BCD码的数位交换。 ⒉半字节交换指令组 ⑴XCHDARi 将Ri间接寻址单元的低位内容与累加器A的低位内容互换而它们的高位内容均不变。此指令不影响标志位。例:设(R)=H(A)=H(B)内部RAM中(H)=H(lB)。执行指令∶XCHDA@R结果为∶(H)=B=H(A)=B=H。堆栈操作指令组堆栈操作指令组PUSHdirectPOPdirect入栈(PUSH)操作指令又称“压栈”操作。指令执行后栈指针(SP)+指向栈顶上一个空单元将直接地址direct单元内容送入SP所指示的堆栈单元。此操作不影响标志位。出栈(POP)操作指令又称“弹出”操作由栈指针(SP)所寻址的片内RAM中栈顶的内容((SP))送入直接寻址单元direct中然后执行(SP)一并送入SP。此操作不影响标志位。例:中断响应时(SP)=HDPTR的内容为H执行入栈指令其结果怎样?PUSHDPL低位数据指针寄存器DPL内容入栈PUSHDPH高位数据指针寄存器DPH内容入栈。执行结果:第一条指令(SP)+=H→(SP),(DPL)=H→(H)第二条指令(SP)+=H→(SP),(DPH)=H→(H)所以片内RAM中(H)=H(H)=H(SP)=H。例:设(SP)=H片内RAM的H~H单元中的内容分别为HHH执行下列指令的结果怎样?POPDPH((SP))=(H)=H→DPH(SP)-=H-=H→SPPOPDPL((SP))=(H)=H→DPL(SP)-=H-=H→SPPOPSP(SP)-=FH→SP((SP))=(H)=H→SP以上第三条指令为特殊情况先执行(SP)-=FH后装入由栈顶退出的值所以执行后(SP)=H。数据传送类指令汇总见附录中附表A例:检查传送结果 已知内部RAM(H)=H(H)=H(H)=HP口为B分析指令执行后各单元内容。MOVR#HR=HMOVARA=HMOVRAR=HMOVBRB=HMOVR,P(H)=BMOVPPP=BMOVH#H(H)=H执行结果:(H)=H,(H)=H,(H)=CAH,P=P=CAH,A=H,B=H,R=H,R=H例:将位BCD码倒序。设内部数据存储器AH、BH单元连续存放有位BCD码数符试编一程序把位BCD码数符倒序排列。AHBHAHBHaaaaaaaaMOVR,#AHMOVR,#BHMOVA,RAH单元内容送ASWAPAA的高位与低位交换(aa)MOVR,AMOVA,RBH单元内容送ASWAPAA的高位与低位交换(aa)XCHA,RAH与BH单元内容交换MOVR,AHERE:SJMPHERE算术运算类指令算术运算类指令算术运算类指令都是通过算术逻辑运算单元ALU进行数据运算处理的指令。它包括各种算术操作其中有加、减、乘、除四则运算。C单片微机还有带借位减法、比较指令。加法类指令包括加法、带进位的加法、加以及二一十进制调整。这些运算指令大大加强了C的运算能力。但ALU仅执行无符号二进制整数的算术运算。对于带符号数则要进行其他处理。使用的助记符为:ADD、ADDC、INC、DA、SUBB、DEC、MUL、DIV等八种。除了加和减指令之外算术运算结果将使进位标志(CY)半进位标志(AC)、溢出标志(OV)置位或复位。加法指令 这组指令的助记符为ADDADDARn(A)+(Rn)→(A)ADDAdirect(A)+(direct)→(A)ADDARi(A)+((Ri))→(A)ADDA#data(A)+data→(A)这组指令的源操作数为Rn、direct、@Ri或立即数而目的操作数为累加器A中的内容。这组指令的功能是将工作寄存器Rn、片内RAM单元中的内容、间接地址存储器中的位无符号二进制数及立即数与累加器A中的内容相加相加的结果仍存放在A中。加法指令这类指令将影响标志位AC、CY、OV、P。当和的第位有进位时将AC标志置位否则为。当和的第位有进位时将CY标志置位否则为。对于带符号数运算,当和的第位与第位中有一位进位而另一位不产生进位时溢出标志OV置位,否则为。(OV)=表示两个正数相加,和为负数或两个负数相加而和为正数的错误结果。例:设(A)=CH(R)=AAH。执行指令:ADDARBBB执行结果:(A)=DH,(CY)=,(OV)=,(AC)=。第六位无进位而第七位有进位故OV=即出现二个负数相加结果为正数的错误。带进位位加法指令 ADDCARn(A)←(A)+(Rn)+(CY)ADDCAdirect(A)←(A)+(direct)+(CY)ADDCARi(A)←(A)+((Ri))+(CY)ADDCA#data(A)←(A)+#data+(CY) 这组指令的功能是将工作寄存器Rn、片内RAM单元中的内容、间接地址存储器中的位无符号二进制数及立即数与累加器A的内容和当前进位标志CY的内容相加相加的结果仍存放在A中。这组指令常用于多字节数相加实现的倍数位(如位、位)数的加法。带进位位加法指令这类指令将影响标志位AC、CY、OV、P。当和的第位有进位时将AC标志置位否则清。当和的第位有进位时将CY标志置位表示和数溢出否则清。对于带符号数运算当和的第位与第位中有一位进位而另一位不产生进位时溢出标志OV置位否则为。(OV)=表示两个正数相加和为负数或两个负数相加而和为正数的错误结果。例:设(A)=CH(R)=AAH(CY)=。执行指令:ADDCAR(CY)执行结果:(A)=EH(CY)=(OV)=l(AC)=。对于带符号数的带进位相加溢出标志为意味着出错上例为二个负数相加出现结果为正数的错误。例:已知(A)=BH(R)=H。执行ADDA,R指令:BHHH CY=CY=OV=AC=若二个数是无符号数则BH+H=H答案正确。若二个数是带符号数则BH的原码是–D,H原码为D(–D)+D=D,答案也是正确的,因为OV=。增量(加)指令 这组指令的助记符为INC:INCRn(Rn)←(Rn)+INCdirect(direct)←(direct)+INC@Ri((Ri))←((Ri))+INCA(A)←(A)+lINCDPTR(DPTR)←(DPTR)+ 这组指令的功能是将工作寄存器Rn、片内RAM单元中的内容、间接地址存储器中的位无符号二进制数、累加器A和数据指针DPTR的内容加相加的结果仍存放在原单元中。这类指令不影响各个标志位。增量(加)指令当指令中的direct为PP端口(地址分别为内部RAM的H、H、AH、BH)时其功能是修改输出口的内容指令执行过程中首先读入端口内容在CPU中加,再输出到端口要注意的是读入来自端口的锁存器而不是端口的引脚。这类指令具有读-修改-写的功能。例:设(R)=EH(EH)=FFH.(FH)=H。执行以下指令:INCRFFH+=H仍存入EH单元INCREH+=FH存入(R)INCRH+=H存入(FH)执行结果为(R)=FH(EH)=FFH.(FH)=H二一十进制调整指令 DAA 该指令的功能是对BCD码的加法结果进行调整。两个压缩型BCD码按二进制数相加之后必须经此指令的调整才能得到压缩型BCD码的和数。本指令是根据A的原始数值和PSW的状态决定对A进行加H或H或H的操作的。说明:BCD码采用四位二进制数编码并且只采用了其中的十个编码即分别代表BCD码而为无效码。当相加结果大于说明已进入无效编码区当相加结果有进位说明已跳过无效编码区。凡结果进入或跳过无效编码区时结果是错误的相加结果均比正确结果小(差个无效编码)。二一十进制调整指令十进制调整的修正方法为:   当累加器低四位大于或半进位标志AC=时则进行低四位加修正(A~)+→(A~)即(A)=(A)+     当累加器高四位大于或进位标志CY=时,进行高四位加修正(A~)+→(A~)即(A)=(A)+H例:设(A)==BCD(R)==BCD(CY)=。执行下述二条指令:ADDCARDAA执行ADDCAR(A)(BCD)(R)(BCD)十(CY)(高、低四位均大于)再执行DAA(加H操作)Cy=(BCD)即BCD码数++=。经DAA指令校正后答案正确。例:二个多字节无符号数相加。设有二个四位BCD码分别存在内部RAM的H、H和H、H单元中试编写程序求二个BCD码数之和结果存入内部H、H单元。MOVR,#H被加数首址MOVR,#H加数首址MOVA,R取被加数ADDA,R与加数相加DAA二-十进制调整MOVH,A存和INCR高位相加INCRMOVA,RADDCA,RDAAMOVHA 例:对累加器A中压缩BCD码数减ADDA,#HDAAHERE:SJMPHERE说明:累加器A允许的最大BCD码数为BCD当对A实行加BCD码数时必然形成对BCD码百位数的进位而剩在A中的内容正是压缩BCD码数减。如BCD的H经DAA的调整后为H且CY=不考虑进位CY则BCD码-=。带借位减法指令助记符为SUBB指令:SUBBARn(A)-(Rn)-(CY)→(A)SUBBAdrect(A)一(drect)一(CY)→(A)SUBBARi(A)一((Ri))一(CY)→(A)SUBBA#dala(A)-data-(CY)→(A)这组指令的功能是从A中减去进位位CY和指定的变量结果(差)存入A中。若第位有借位则CY置否则CY清若第位有借位则AC置否则AC清。若第位和第位中有一位需借位而另一位不借位则OV置OV位用于带符号的整数减法。OV=则表示正数减负数结果为负数或负数减正数结果为正数的错误结果。带借位减法指令例:设(A)=CH(R)=H(CY)=。执行指令:SUBBAR--执行结果(A)=H(CY)=(AC)=(OV)=。减指令 这类指令的助记符为DEC共有指令:DECRn(Rn)-→(Rn)DECdirect(direct)-→(direct)DECRi((Ri))-→((Ri))DECA(A)-→(A) 这组指令的功能是将工作寄存器Rn、片内RAM单元中的内容、间接地址存储器中的位无符号二进制数和累加器A的内容减相减的结果仍存放在原单元中。这类指令位不影响各个标志。减指令需要注意:执行对并行IO口的输出内容减操作是将该口输出锁存器的内容读出并减再写入锁存器而不是对该输出引脚上的内容进行减l操作。例:设(R)=FH(EH)=H(FH)=H。执行指令:DEC@R(FH)一=Hl=FH→(F)DECR(R)一l=FHl=EH→(R)DEC@R(EH)一l=Hl=FFH→(E)执行结果:(R)=EH(EH)=FFH(FH)=FH。乘法除法指令 ⒈乘法指令。助记符为MUL: MULAB 乘法指令的功能是将A和B中两个无符号位二进制数相乘所得的位积的低位存于A中高位存于B中。如果乘积大于时即高位B不为时OV置位否则OV置。CY总是清。例:设(A)=H(D)(B)=AH(D)。执行指令:MULAB即×==H执行结果:乘积H()(A)=H(B)=H(OV)=(CY)=。乘法除法指令⒉除法指令。助记符为DIV:DIVAB 除法指令的功能是将A中无符号位二进制数除以B中的无符号位二进制数所得商的二进制数部分存于A余数部分存于B中并将CY和OV置。当除数(B)=时结果不定则OV置。CY总是清。例:设(A)=FBH(D)(B)=H(D)。执行指令:DIVAB执行结果:(A)=DH(商)(B)=H(余数I)(OV)=(CY)=。算术运算类指令汇总见附录中附表A例:数的码制转换。把累加器A中无符号二进制整数(FFH)转换为三位压缩BCD码(~)并存入内存H和H单元。BINBCD:MOVB,#DIVABA÷百位数在A,余数在BMOVH,A百位数送HMOVA,BMOVB

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/135

80c51指令系统

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利