




已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机教案第三章 第三章指令系统第一节指令格式和寻址方式所谓指令,就是计算机完成某种操作的命令。 一台计算机所具有的全部指令称为该机器的指令系统。 指令系统全面描述了CPU的功能。 指令系统是由生产厂家确定的。 不同的CPU有不同的指令系统。 编程语言是人机对话的工具,按使用层次可分为机器语言、汇编语言和高级语言。 机器语言(二进制代码)能直接被机器识别,程序运行效率高,但编程效率低,不便于阅读,书写和交流。 引入助记符,将机器语言符号化后就是汇编语言,其程序直观。 用汇编语言编写的程序称为汇编语言程序。 汇编语言程序必须经过汇编(机器汇编或手工汇编)成为机器语言后才能被机器执行。 例如指令MOV20H,#11H指令机器码为75xxH指令功能将11H送到内部RAM20H单元。 高级语言编程效率高,但程序运行效率低。 一、指令格式1汇编语言指令格式汇编语言语句是构成汇编语言源程序的基本单元。 8051汇编语言指令格式为标号操作码助记符操作数1,操作数2,操作数3;注释 (1)标号表示该指令所在的地址,是用户根据程序需要(子程序入口或转移指令目标地址)而设定的符号地址。 汇编时,以该指令所在的地址来代替标号。 标号是以英文字母开始的由18个字母或数字组成的字符串,以“”结束。 (2)操作码助记符是表示指令操作功能的英文缩写。 是指令的核心部分,每条指令都必须有操作码,不能缺省。 (3)操作数字段表示指令的操作对象,其表示形式与寻址方式有关。 指令中的操作数可以是0个,1个,2个和3个,操作数和操作码之间以空格分隔。 操作数之间以逗号分隔。 双操作数时,逗号前面的操作数称为源操作数;逗号后面的操作数称为目的操作数。 (4)注释,是编程者为该指令或该程序段功能进行的说明,是为方便程序阅读33的一种说明。 2机器语言指令格式机器语言指令是一种二进制代码,由操作码和操作数两部分组成。 操作码规定了指令进行的操作,是指令中的关键字,不能缺省。 操作数表示该指令的操作对象。 MCS51系列单片机的指令,按指令长度可分为单字节指令,双字节指令和三字节指令三种,分别占用13个存储单元。 机器指令的格式为 (1)单字节指令操作码本身就隐含了操作数的信息,不需再加操作数。 例如汇编语言指令MOV A,Rn;A(Rn)指令机器码为 (2)双字节指令首字节为操作码,第二个字节为操作数或操作数地址。 例如汇编语言指令MOV Rn,direct;Rn(direct)指令机器码为 (3)三字节指令首字节为操作码,后两个字节为操作数或操作数地址。 34例如汇编语言指令MOV DPTR,#DATA16指令机器码为又如汇编语言指令MOV direct,#DATA,指令机器码为3伪指令在汇编语言中,除了可执行的指令外,为方便程序的编写,还定义了一些伪指令。 伪指令是对汇编语言程序做出的一些必要说明。 在汇编过程中,伪指令为汇编程序提供必要的控制信息,不产生任何指令代码,因此也称为不可执行指令。 常见的伪指令有 (1)ORG(oRigin)汇编起始地址命令格式ORG nnORG后面16位地址表示此语句后的程序或数据块在程序存储器中的起始地址。 例如ORG1000H STARTMOV A,32H上述指令说明START表示的地址为1000H,MOV指令从1000H存储单元开始存放。 (2)DB(Define Byte)定义字节数据命令格式名字DB n1,n2,n3,?,n N该命令表示将DB后面的若干个单字节数据存入指定的连续单元中。 每个数据(8位)占用一个字节单元,通常用于定义一个常数表。 注意名字也是一个符号地址,但以名字表示的存储单元之中存放的是数据,而不是指令代码,故不能做为转移指令的目标地址,这一点与标号不同。 35例如ORG2000H TAB1DB01H,04H,08H,10H以上伪指令汇编后从2000H单元开始定义(存放)4个字节数据(平方表)(2000H)01H,(xxH)04H,(xxH)09H,(xxH)10H。 (3)DW(Define word)定义字数据命令格式名字DW nn1,nn2,?,nnN该命令表示将DW后面的若干个字数据存入指定的连续单元中。 每个数据(16位)占用两个存储单元,其中高8位存入低地址字节,低8位存入高地址字节。 常用于定义一个地址表。 例如ORG2100H TAB2DW1067H,1000H,100汇编后(2100H)10H,(2101H)67H,(2102H)10H,(2103H)00H,(2104H)00H,(2105H)64H。 (4)DS定义存储区命令格式名字DS X从指定的地址单元开始,预留X字节单元备用。 例如ORG2000H L1DS07H L2DB86H,0A7H汇编后,从2000H开始保留7个字节单元,从xxH单元开始按DB命令给内存单元赋值(xxH)86H(xxH)0A7H注意DB、DW、DS伪指令只能对程序存储器进行赋值和初始化工作,不能用来对数据存储器进行赋值和初始化工作。 (5)EQU(Equat)赋值命令格式字符名EQU数或汇编符号本命令给字符名赋予一个数或特定的汇编符号。 赋值后,指令中可用该符号名来表示数或汇编符号。 例如TEMP EQUR4X EQU16第一条指令将TEMP等值为汇编符号R4,此后的指令中TEMP可以代替R4来使用。 第二条指令表示指令中可以用X代替16来使用。 注意使用EQU命令时36必须先赋值后使用。 注意字符名不能和汇编语言的关键字同名,如A,MOV,B等。 (6)DATA数据地址赋值命令格式字符名DATA nnDATA命令是将数据地址或代码地址赋予规定的字符名称。 (7)BIT定义位地址符号命令格式字符名BIT bit将位地址bit赋予所定义的字符名。 (8)END汇编结束命令END表示汇编语言源程序到此结束。 二、寻址方式操作数是指令的一个重要组成部分,CPU在规定的寻址空间获得操作数地址的方式,称为寻址方式。 寻址方式不仅影响指令的长度,还影响指令的执行速度。 MSC51系列单片机共有七种寻址方式(一)立即寻址操作数作为指令的一个组成部分存放在程序存储器中。 这种寻址方式称为立即寻址,该操作数称为立即数。 立即数前加“”标记,以便和直接寻址方式相区分。 例如指令MOV A,40H;A40H该指令将立即数40H送累加器A中。 指令执行后:(A)=40H,指令中用“”表示立即数。 立即寻址示意图如图31所示37(二)直接寻址直接寻址方式是在指令代码中直接给出操作数的地址。 这种寻址方式是对内部数据存储器进行访问。 直接寻址方式可寻址的空间1内部RAM的低128字节单元地址空间;2特殊功能寄存器SFR地址空间(直接寻址是访问SFR的唯一方式);3位地址空间。 例如指令:MOV A,50H;A(50H)该指令是把内部RAM中50H单元(直接寻址)的内容送入累加器A中。 假设指令执行前A的内容为8BH(表示为(A)=8BH),50H单元的内容为36H(表示为(50H)=36H),则指令执行后(A)=36H,(50H)=36H(不变)。 寻址示意如图32所示(三)寄存器寻址寄存器寻址方式是指指令中给出寄存器名称,其内容作为操作数。 这种寻址方式对当前工作寄存器R0R7进行访问,指令操作码的低三位指明了所用的寄存器;对累加器A,寄存器B,数据指针DPTR也可以用寄存器寻址来访问。 寄存器寻址方式的可寻址空间1当前工作寄存器R0R7(当前工作寄存器区由RS 1、RS2来选定);2累加器A、寄存器B、数据寄存器DPTR。 38例如指令MOV A,R2;A(R2)该指令是将工作寄存器R2的内容送给累加器A。 假设指令执行前A的内容为08H(表示为(A)08H),R2的内容为4EH(表示为(R2)4EH),则指令执行后(A)4EH,(R2)4EH(不变)。 寻址示意图如图33所示(四)寄存器间接寻址方式指令中给出寄存器,以寄存器的内容作为操作数的地址,把该地址对应单元的内容作为操作数。 寄存器间接寻址的可寻址空间1内部RAM00H7FH(R 0、R 1、SP);2外部RAM0000HFFFFH(R 0、R 1、DPTR)。 在访问外部RAM的页内256个单元00HFFH时,用R0,R1工作寄存器间接寻址。 在访问外部RAM整个64KB(0000HFFFFH)地址空间时,用数据指针DPTR来间接寻址。 例如指令MOV A,R0;A((R0))该指令的操作为将寄存器R0的内容(设(R0)=50H)作为地址,把片内RAM50H单元的内容(设(50H)=48H)送入累加器A,指令执行后(A)=48H。 指令中“”表示寄存器间接寻址,称之为间址符。 39寄存间接寻址示意如图34所示(五)变址寻址寻址空间程序存储器(A+DPTR,A+PC)变址寻址是MCS51系列单片机指令系统所特有的一种寻址方式。 它以程序计数器PC或数据指针DPTR作为基址寄存器,以累加器A作为变址寄存器(存放8位无符号的偏移量),两者内容相加形成16位程序存储器地址作为指令操作数的地址。 这种寻址方式用于读取程序存储器中的常数表。 例如指令MOVC A,A+DPTR;A(A)+(DPTR)该指令是把DPTR的内容作为基地址,把A的内容作为偏移量,两量相加形成16位地址,将该地址的程序存储器ROM单元的内容送给A。 假设指令执行前为(DPTR)=2100H,(A)=56H,(2156H)=36H,则该指执行后(A)=36H。 寻址过程如图35所示(六)相对寻址寻址空间程序存储器。 40相对寻址方式只用于相对转移指令中。 相对转移指令是以本指令的下一条指令的首地址PC为基地址,与指令中给定的相对偏移量rel相加之和作为程序的转移目标地址。 偏移量rel是8位二进制补码(与PC相加时,rel需符号扩展成16位)。 转移范围为当前PC值的128+127个字节单元之间。 相对寻址一般为双字节或三字节指令。 例如指令JZ30H;当(A)=0时,则PC(PC)+2+REL,程序转移。 ;当(A)1时,则PC(PC)+2。 程序按原顺序执行。 该指令为双字节指令,其执行过程如图36所示(七)位寻址寻址空间1片内RAM的位寻址区域是:20H2FH共16个单元128位,其位地址编码位00H7FH。 2字节地址能被8整除的SFR(12个)。 对这些寻址位,可以有以下四种表示方法直接位地址方式,如:0D5H;位名称方式,如F0;点操作符方式,如PSW5或0D0H5;用户定义名方式,如用伪指令bit定义USR_FLG bitF0,经定义后,允许指令用USR_FLG代替F0。 41以上四种方式指的都是PSW中的第5位。 MCS51单片机中设有独立的位处理器。 位操作命令能对可以位寻址的空间进行位操作。 例如指令MOV C,07H;Cy(07H)该指令属位操作指令,将内部RAM20H单元的D7位(位地址为07H)的内容送给位累加器Cy,指令的操作过程如图37所示以上我们介绍了MCS51指令系统的7种寻址方式。 实际上指令中有两个或3个操作数时,往往就具有几种类型的寻址方式。 例如指令MOV B,#4FH寄存器寻址立即寻址42第二节指令系统本节要介绍的指令系统与前一章介绍的单片机基本硬件结构(即编程结构)是MCS51单片机程序设计模型,是进行汇编语言程序设计的基础。 一、指令系统说明单片机与一般通用微处理器指令系统的区别在于突出了控制功能,具体表现为有大量的转移指令和位操作指令。 1分类MCS51单片机的指令系统内容丰富、完整,功能较强。 共有111条指令,按功能可以分为五大类 (1)数据传送指令(29条) (2)算术运算指令(24条) (3)逻辑运算指令(24条) (4)控制转移指令(22条) (5)位操作指令(12条)2指令说明对于每一条指令,学习时要注意掌握以下几点 (1)指令的功能 (2)指令操作数的合法寻址方式 (3)指令对标志的影响 (4)指令的长度和执行时间3指令中符号的约定在介绍汇编指令系统时,指令中的符号约定如下 (1)Rn(n=07)当前选中的工作寄存器组的工作寄存器R0R7。 (2)Ri(i= 0、1)以R0或R1作寄存器间接寻址,“”为间址符。 (3)direct8位直接地址。 可以是内部RAM单元地址(00H7FH),或特殊功能寄存器(SFR)地址(80HFFH)。 (4)DPTR以数据指针DPTR的内容(16位)为地址的寄存器间接寻址,对外部RAM64K地址空间寻址。 (5)data8位立即数“”表示DATA是立即数不是直接寻址。 (6)data1616位立即数。 (7)addr1111位直接地址。 短转移(AJMP)及短调用(ACALL)指令中43为转移目标地址,2K范围内转移,指令中用标号代替。 (8)addr1616位直接地址。 长转移(LJMP)及长调用(LCALL)指令中为转移目标地址,转移范围64K,指令中用标号代替。 (9)REL相对转移地址,8位补码地址偏移量为128+127,指令中用标号代替。 (10)DPTR16位数据指针。 (11)bit位地址。 内部RAM20H2FH中可寻址位和SFR中的可寻址位。 (12)A累加器。 (13)BB寄存器。 (14)C即Cy位,进位标志或进位位,或位操作指令中的位累加器。 (15)/位操作数的取反操作前缀,如/bit。 (16)(X)X中的内容。 (17)(X)由X间接寻址的单元中的内容。 (18)箭头右边内容送箭头所指的单元。 说明由于历史原因,为了与大多数书籍、资料目前书写习惯一致,在表示符号位(Cy,OV,EA等)的内容时,在不会引起误解的前提下,采取BIT=X而非(BIT)=X的形式,请读者在阅读以下章节时留意。 二、数据传送指令数据传送指令共有29条,分为片内寄存器,数据存储器传送(MOV)指令,片外数据存储器传送(MOVX)指令,程序存储器内查表(MOVC)指令,数据交换(XCH、XCHD、SWAP)指令和堆栈操作(PUSH、POP)指令。 源操作数可以采用寄存器,寄存器间接,直接,立即,变址5种方式,目的操作数可以采用前3种寻址方式。 数据传送指令是编程时使用最频繁的一类指令。 数据传送指令一般的操作是把源操作数传送到目的操作数,指令执行后,源操作数不改变,目的操作数修改为源操作数。 如果要求在数据传送时,不丢失目的操作数,则可以用交换指令。 数据传送指令不影响标志。 这里所说的标志是指C,AC和OV,不包括检验累加器奇偶的标志P。 对于P一般不加说明。 1片内数据RAM及寄存器间的数据传送指令(16条) (1)以累加器A为目的操作数的指令(4条)44汇编指令操作说明将Rn中内容(简称Rn值,下同)送入A中,A(Rn)。 将direct单元中内容(简称direct值,下同)送入A中,A(direct)。 代码长度指令周期(字节)Tosc TMMOV A,Rn1221121212121111MOV A,direct MOV A,#data将8位常数data送入A中,Adata。 MOV A,Ri将Ri间址的地址单元中内容(简称Ri间址值,下同)送入A中,A(Ri)。 说明指令的功能是把源操作数的内容送入累加器A中。 源操作数可以为寄存器寻址,直接寻址,寄存器间接寻址和立即寻址。 源操作数是Rn时,属寄存器寻址。 MCS51内部RAM区中有4组工作寄存器,每组由8个寄存器组成。 可通过改变PSW中的RS0,RS1来切换当前工作寄存器组。 例31MOV A,R4;A(R4)MOV A,70H;A(70H)MOV A,R1;A(R1)MOVA,88H;A88H (2)以Rn为目的操作数的指令(3条)代码长度指令周期汇编指令操作说明(字节)Tosc TM221241212211MOV Rn,direct将direct值送入Rn中,Rn(direct)。 MOV Rn,#data将常数data送入Rn中,Rndata。 MOV Rn,A将A值送入Rn中,Rn(A)。 该组指令的功能是把源操作数的内部送到当前工作寄存器区中的R7R0中的某一个寄存器。 源操作数可以为寄存器寻址,直接寻址和立即寻址方式。 例32MOV R2,A;R2(A)MOV R6,70H;R6(70H)MOV R4,#40H;R440H45 (3)以直接地址为目的操作数的指令(5条)该组指令的功能是把源操作数的内容送入直接地址所指的存储单元。 源操作数有寄存器寻址、直接寻址、寄存器间接寻址和立即寻址方式。 代码长度指令周期汇编指令MOV direct,Rn操作说明将Rn值送入direct中。 direct(Rn)。 (字节)Tosc TM222241224212MOV direct,A将A值送入direct中,direct(A)。 MOV direct,Ri将Ri间址值送入direct中,direct(Ri)。 将常数#data直接送入direct中,directdata。 MOV direct,#data MOVdirectdirect23242,将direct1值送入direct2中,direct1(direct2)。 3242例33MOV P1,A;P1(A)MOV64H,R6;64H(R6)MOV10H,#98H;10H98H MOV20H,48H;20H(48H)MOV24H,R0;24H(R0) (4)以寄存器间接地址为目的操作数的指令(3条)汇编指令MOVRi,A MOVRi,direct操作说明将A值送入Ri指示的地址单元中,(Ri)(A)。 将direct值送入Ri指示的地址单元中,(Ri)(direct)。 将常数#data直接送入Ri指示的地址单元中,(Ri)data。 代码长度(字节)12指令周期Tosc1224TM12MOVRi,#data2121该组指令的功能是把源操作数的内容送入R0或R1寄存器间接寻址所确定的内部RAM单元中。 源操作数也可以为寄存器寻址、直接寻址和立即寻址方式。 例34MOVR0,20H;(R0)(20H)MOVR1,A;(R1)(A)46MOVR0,#28H;(R0)28H (5)16位数据传送指令(1条)汇编指令操作说明将常数DATA16直接送入DPTR中,DPTRDATA16。 代码长度指令周期(字节)Tosc TM3242MOV DPTR,#DATA16该条指令是整个指令系统中唯一的一条16位数据传送指令,通常用来设置地址指针,DPTR由DPH和DPL组成,该指令传送时,把高八位立即数送入DPH。 低8位立即数送入DPL中。 MOV指令用于寻址内部RAM和SFR,MOV指令对内部RAM和SFR的操作功能可用图38描述。 2堆栈操作指令(2条)由第二章已知,堆栈是在内部RAM中开辟的一个特定的存储区,栈顶地址由堆栈指针SP指示,SP总是指向栈顶。 堆栈按“先进后出”原则存取数据。 堆栈操作有两种,数据存入称“入栈”或“压入(数据)”,数据取出称“出栈”或“弹出”。 堆栈在子程序调用及中断服务时用于现场和返回保护,还可以用于参数传递等。 47汇编指令操作说明入栈指令,将direct值压入堆栈栈顶,sp(sp)+1,(sp)(direct)。 出栈指令,将堆栈栈顶内容弹出到direct中,direct((sp)),sp(sp)1。 代码长度(字节)2指令周期Tosc24TM2PUSH directPOP direct2242进栈指令先进行指针调整,即堆栈指针SP加1,再把direct值入栈。 出栈指令是先将栈顶内容弹出给direct,再进行指针调整,即堆栈指针SP减“1”。 例35已知当前(SP)38H,(10H)70H;执行指令PUSH10H指令执行后;(SP)39H,(10H)70H,(39H)70H。 该指令的执行过程如图39所示例36已知(SP)40H,(40H)68H,(A)20H,执行指令POP ACC指令执行后;(SP)3FH,(40H)68H,(A)68H48指令的执行过程如图310所示3数据交换指令(5条)数据交换指令有字节交换指令和半字节交换指令两种。 字节交换指令可以将累加器A的内容与内部RAM中任一个单元以字节为单位进行交换;半字节交换指令可以将累加器A的高半字节和低半字节进行交换,或将累加器A的低半字节与Ri寻址单元的低半字节相互交换。 汇编指令XCH A,Rn XCH A,direct XCH A,Ri XCHD A,Ri SWAPA操作说明代码长度(字节)12111指令周期Tosc1212121212TM11111Rn值和A值全交换,(A)(Rn)。 direct值与A值全交换,(A)(direct)。 Ri值与A值全交换,(A)(Ri)。 Ri与A值的低四位交换,(A)30(Ri)30。 A值自交换(高4位与低4位交换),(A)74(A)30。 49例37已知(A)56H,(R0)20H,(20H)78H,(10H)18H,(R4)8AH;单独执行指令XCH A,10HXCHA,R4XCHA,R0指令执行后(A)=18H,(10H)=56H;(A)=8AH,(R4)=56H;(A)=78H,(R0)=20H,(R0)=(20H)=56H。 例38已知(A)7AH,(R1)48H,(48H)0DH;执行指令:XCHDA,R1指令执行后(A)7DH,(R1)48H,(R1)(48H)0AH。 4片外RAM数据传送指令(4条)片外RAM的数据传送指令助记符为MOVX。 片外数据存储器为读写存储器,与累加器A可实现双向操作。 片外数据存储器(RAM)使用寄存器间接寻址。 注意,MSC51扩展的I/O接口的端口地址占用的是片外RAM的地址空间,因此对扩展的I/O接口而言,这4条指令为输出/输出(I/O)指令。 MCS51只能用这种方式与连接在扩展的I/O口外部设备进行数据传送。 汇编指令操作说明用DPTR间址的片外RAM指定单元内容送入A中,A(DPTR)。 将A中的内容送至片外RAM的DPTR间址的单元中,(DPTR)(A)。 将片外RAM中由Ri间址的地址单元中内容送入A中,A(Ri)。 将A中的内容送至片外RAM中由Ri间址的地址单元中,(Ri)A。 代码长度(字节)1指令周期Tosc24TM2MOVX A,DPTR MOVXDPTR,A1242MOVX A,Ri1242MOVXRi,A1242指令中以DPTR为片外RAM的16位地址指针时,由P0口送出低8位地址,由P2口送出高8位地址,寻址范围为64KB;以R0或R1为片外RAM的低8位地址指针时,由P0口送出8位地址,P2口的状态不变化,寻址范围为256个单元(即一页)。 505程序存储器查表指令(2条)程序存储器查表指令的助记符为MOVC。 程序存储器为只读存储器。 程序运行中所需的一些常数,常数和表格,通常是由用户先将其写在程序存储器中,程序需从程序存储器中读出数据时,采用变址寻址方式将表格常数读入累加器A中。 汇编指令操作说明将以DPTR为基址,A为偏移地址的存储单MOVC A,ADPTR元值送入A中,PC(PC)+1,A(A)+(PC)。 MOVC A,A+PC将以PC为基址,A为偏移地址的存储单元值送入A中,A(A)+(DPTR)。 12421242代码长度(字节)指令周期Tosc TM例39已知(A)38H,执行指令1000HMOVC A,APC解该指令以PC内容加1后的当前值作为基址寄存器,累加器A为变址寄存器(8位无符号整数),两者内容相加得到一个16位地址。 将该地址对应的程序存储器单元的内容送给累加器A。 所以上面指令的操作是将程序存储器1039H单元的内容送给累加器A。 说明累加器A为8位无符号整数,表格位置(查表指令后255字节内)和表格长度(小于255字节)受限制。 例310已知(A)50H,(DPTR)5000H;执行指令MOVC A,A+DPTR解该指令以DPTR为基址寄存器,累加器A为变址寄存器,因此该指令执行的操作是将程序存储器中5050H单元的内容送入A中。 以上是介绍的数据传送指令是用得最多、最频繁的一类指令,读者应熟记8种助记符的功能以及能采用的操作数寻址方式。 三、算术运算指令MSC51的算术运算指令共有24条。 分为加法指令(ADD,ADDC,INC);带借位减法指令(SUBB,DEC);乘除指令(MUL,DIV)和十进制调整指令(DA)等。 51MSC51运算指令能直接执行8位数的运算,借助程序状态字PSW中的标志可以实现多精度数的加、减运算,同时可以对压缩的BCD(一个字节表示两位十进制数)数进行加法运算。 算术运算指令对程序状态字(PSW)中标志的影响如表31所示表31算术运算指令对PSW中标志位的影响指令ADD ADCINC SUBBDEC MULDIV PSW中的标志位Cy00OVAC“”表示影响该标志位,“”表示不影响该标志位,“0”表示该标志位清零。 (一)加法指令 (1)不带进位的加法指令(4条)汇编指令ADD A,Rn ADD A,direct操作说明Rn值与A值相加,结果在A中,A(A)+(Rn)。 Direct值与A值相加,结果在A中,A(A)+(direct)。 常数data与A值相加,结果在A中,A(A)+data。 Ri值与A值相加,结果在A中,A(A)+(Ri)。 代码长度指令周期(字节)Tosc TM12121211ADD A,#data2121ADD A,Ri1121这组指令的特点是被加数总是累加器A值,相加结果保存在累加器A中。 加法指令影响PSW中的标志位。 两个字节数相加时如果第7位有进位,则Cy1,否则Cy0;如果第3位有进位,则AC1,否则AC0;如果第6位有进位,而第7位无进位或第6位有无进位而第7位有进位(表示有符号数相加结果超出表示范围),则OV0,否则OV0。 若以J7,J6表示52第7,6位的进位,则OVJ7?J6。 相加的和存放在A中,如果结果中“1”的个数为奇数则P1,否则P0。 例311试分析以下指令,写出执行结果,标出各标志位。 已知(A)=04H,(R1)=0BH;ADD A,R1;A(A)+(R1)解执行结果如下(A)=00000100+(R1)=00001011000011110000?0?0?0?1?1?1?1=0,结果为偶数个1,P0;第三位无进位,AC0;J7?J60,OV0;第7位无进位,Cy=0。 所以指令执行后,(A)0FH,(R1)0BH,AC0,P0,OV0,Cy0。 分析由Cy,OV可知两个加数看作无符号数时和没有超出范围,看作有符号数时和未溢出。 看作无符号数看作有符号数41115Cy0已知(A)=07H,(R1)=0FBH;ADD A,R1;A(A)+(R1)解执行结果如下(4)(11)15OV053(A)=00000111+(R1)=11111011000000101110?0?0?0?0?0?1?0=1,结果为奇数个1,P1;第3位有进位,AC1;J7?J60,OV0;第7位有进位,Cy=1。 所以指令执行后,(A)02H,(R1)0FBH,AC1,P0,OV0,C1。 分析由Cy,OV可知两个数看作无符号数时,和超出八位进制数表示范围,看作有符号数时,和未溢出。 看作无符号数看作有符号数7(7)251(5)258(大于255超出表示范围)2Cy1OV0已知(A)=09H,(R1)=7CH;ADD A,R1;A(A)+(R1)解执行结果如下;(A)=00001001+(R1)=01111100100001010111?0?0?0?0?1?0?1=1,结果为奇数个1,P1;第3位有进位,AC=1;J7?J61,OV=1;第7位无进位,Cy=0。 所以指令执行结果为(A)=85H,(R1)=7CH,AC=1,OV=1,Cy=0,P=1。 分析由Cy,OV可知两个加数看作无符号数时,和未超出表示范围;看作有符号数时,和溢出。 54看作无符号数看作有符号数9(9)124(124)133133(大于127,超出表示范围)Cy=0OV1已知(A)=87H,(R1)=0F5H;ADD A,R1;A(A)+(R1)解执行结果如下(A)=10000111+(R1)=11110101011111001000?1?1?1?1?1?0?0=1,结果为奇数个1,P1;第3位无进位,AC0;J7?J61,OV1;第7位有进位,Cy=1。 所以指令执行结果为(A)=7CH,(R1)=0F5H,AC=0,Cy1,OV1,P1。 分析由Cy,OV可知两个加数看作为无符号数时,和超出范围,看作为有符号数时,和溢出。 看作无符号数看作有符号数135(121)245(11)380(大于255,超出表示范围)132(小于128,超出表示范围)Cy=1OV=1事实上,两数相加后判断OV位状态,只要将两数看成有符号数(补码数);若正数+正数=负数或负数+负数=正数则相加结果一定超出8位有符号数(补码数)表示范围,即OV=1。 (2)带进位加法指令(4条)55汇编指令操作说明Rn值与A值带进位加,结果送A,A(A)+(Rn)+(Cy)。 direct值与A值带进位加,结果送A,A(A)+(direct)+(Cy)。 常数data与A值带进位加,结果送A,A(A)+DATA+(Cy)。 Ri间址的存储单元中内容与A值带进位加,结果送A,A(A)+(Ri)+(Cy)。 代码长度(字节)1指令周期Tosc TM121ADDC A,Rn ADDC A,direct2121ADDC A,#data2121ADDC A,Ri1121带进位位的加法指令,除两个数相加外,还需加上进位Cy(参加最低位的运算)。 带进位位的加法指令用于多精度数的加法运算。 带进位位的加法指令对程序状态字PSW的影响同不带进位的加法指令。 例312设(A)=78H,(30H)=0A4H,Cy=1;试分析指令ADDCA,30H;A(A)+(30H)+Cy执行情况。 解执行结果如下(A)=01111000(30H)=10100100+(Cy)=1000111011100?0?0?1?1?1?0?1=0,结果为奇数个1,P1;第3位无进位,AC0;J7?J60,OV0;第7位有进位,Cy1。 所以指令执行后(A)=1DH,(30H)=0A4H,AC=0,OV=0,Cy=1,P=1。 (3)加“1”指令(5条)56汇编指令INC AINC RnINC directINCRi INCDPTR操作说明A值加1,A(A)+1。 Rn值加1,Rn(Rn)+1。 direct值加1,direct(direct)+1。 Ri值加1,(Ri)(Ri)+1。 DPTR值加1,DPTR(DPTR)+1。 代码长度(字节)11211指令周期Tosc TM121212122411112加1指令除影响奇偶校验位P外,不影响程序状态字PSW中的其它标志位。 INC direct指令中直接地址direct为I/O端口Pi时,为“读改写”操作。 端口数据从输出口的锁存器读入,而不从引脚读入。 下面以P1口为例,如图27(b)所示。 现执行指令INC P1则指令执行过程为a.CPU发出“读锁存器”有效信号,将P1端口各D锁存器当前Q端状态通过Dx内部数据总线读入CPU;b.将读入的P1端口的八位二进制数据加1;c.CPU发出“写入”信号,通过Dx内部数据总线将加1后的数据重新写入到P1端口各D锁存器中去。 (第二章)图27(b)P1口的内部结构例313试写出下列指令的执行结果57MOV R0,#7EH;(R0)=7EH MOV7EH,#0FFH;(7EH)=0FFH MOV7FH,#38H;(7FH)=38H MOVDPTR,#10FEH;(DPTR)=10FEH INCR0;(7EH)=00H INCR0;(R0)=7FH INCR0;(7FH)=39H INCDPTR;(DPTR)=10FFH INCDPTR;(DPTR)=1100H INCDPTR;(DPTR)=1101H(二)减法指令 (1)带借位的减法指令(4条)汇编指令操作说明A值减去Rn及Cy值,结果送A,A(A)(Rn)(Cy)。 A值减去direct及Cy值,结果送A,A(A)(direct)(Cy)。 A值减去data及Cy值,结果送A,A(A)data(Cy)。 A值减去Ri间址单元及Cy值,结果送A,A(A)(Ri)(Cy)。 代码长度(字节)1指令周期Tosc TM121SUBB A,Rn SUBB A,direct2121SUBB A,#data2121SUBB A,Ri1121MCS51指令系统中没有提供不带借位的减法指令,但结合“CLR C”指令可先将Cy清零,然后由带借位的指令实现不带借位减法的功能。 带借位的减法指令影响PSW中的标志位。 两个数相减时如果第7位有借位,则Cy1,否则Cy0;如果第3位有借位,则AC1,否则AC0;如果第6位有借位而第7位无借位或第6位无借位而第7位有借位则OV0。 同样用J7,J6表示第7,6位的借位,则OVJ7?J6;相减的差存放在A中,如果结果中“1”的个数为奇数,则P1,否则P0。 例314设(A)=0A5H,(R7)=0FH,Cy=1,试分析指令SUBBA,R7;A(A)(R7)(C)的执行结果以及对标志位的影响。 解执行情况如下58(A)=10100101(R7)=00001111110010101001结果(A)=95H,Cy=0,AC=1,OV=0。 计算机内的数具有模(mod),两数相减时,无论两数大小如何两数都可直接相减,不够减时服从向高位借1为基数的原则。 这不同于我们习惯上的减法运算。 同理,两数相减后判断OV位状态,实际上只要将相减两数看成有符号数(补码数),若正数负数=负数或负数正数=正数则相减结果一定超出8位有符号数(补码数)表示范围,即OV=1。 (2)减1指令(4条)汇编指令DEC ADEC RnDEC directDECRi操作说明A值减1,A(A)1。 Rn值减1,Rn(Rn)1。 Direct值减1,direct(direct)1。 Ri值减1,(Ri)(Ri)1。 代码长度(字节)1121指令周期Tosc TM121212121111减“1”指令除DEC A影响奇偶标志P外,其余指令不影响PSW中的标志位;减“1”指令用于修改输出口Pi时,进行的是“读改写”操作;DPTR没有减1指令。 59(三)乘除指令(2条)指令周期汇编指令操作说明A、B中两无符号数相乘,结果低8位在A中,高8位在B中,BA(A)(B)。 A、B中两无符号数相除(A/B),结果商送A,代码长度(字节)Tosc TM1484MUL ABDIV AB余数入B中。 A(A)/(B)的商,B(A)/(B)的余数。 1484MUL指令实现累加器A和B寄存器中的两个8位无符号数相乘,16位乘积的低8位放在累加器A中,高8位放在B寄存器中。 如果乘积大于255(FFH,即乘积中高8位非零)时OV1,否则OV0。 奇偶标志P仍按累加器A中“1”的奇偶性确定。 进位标志清零Cy=0,不影响辅助进位标志AC。 例315设(A)=0A0H,(B)=08H,执行指令MUL AB;BA(A)(B)指令执行后为(A)=00H,(B)=05H,P=0,Cy=0,OV=1,AC不变。 DIV指令实现累加器A和B寄存器中的两个8位无符号相除,其中商存放累加器A中,余数存放在B中。 Cy和OV均复位,只有当除数(B)为0或相除的商大于8位时,OV1。 奇偶标志P仍按A中“1”的奇偶性确定,不影响辅助进位标志A。 例316设(A)0AEH,(B)08H;执行指令DIV AB;A(A)/(B)的商;B(A)/(B)的余数结果是(A)15H,(B)06H,Cy=0,OV=0,P=1,AC不变。 (四)十进制调整指令汇编指令操作说明十进制调整,对A中BCD码十进制加法运算结果调整。 代码长度(字节)1指令周期Tosc TM121DA A十进制调整指令用于实现压缩的BCD码的加法运算,该指令的功能是对存60放在累加器A中的BCD码之和进行调整。 调整的实质是将十六进制的加法运算转换成十进制,具体操作为若累加器A的低4位大于9(AF),或者辅助进位位AC1,则累加器A的内容加06H(A(A)06H),且将AC置“1”。 若累加器A的高4位大于9(AF),或进位位Cy1,则累加器A的内容加60H(A(A)60H),且将Cy置“1”。 调整后,辅助进位位AC表示十进数中个位向十位的进位,进位标志Cy表示十位向百位的进位。 DA指令不影响溢出标志OV,MCS51指令系统中没有给出十进制的减法调整指令,不能用DA指令对十进制减法操作的结果进行调整。 借助Cy可实现多位BCD数的加法运算。 对于BCD码表示的十进制数的符号可以使用10的补码来表示,如十进制数N的位数为N,则任意整数d的正补码为10d,位数为N的十进制数的表示范围N1N1为5105101。 如N2(用8位二进制数即一个字节表示一个带符号BCD数),此时表示数的范围是5049,所以60应表示一个负数,它是40。 引入十的补码后,用9AH表示十进制数100,因为9AH经过DA调整后为100H,则十进制减法运算就可以表示为被减数(9AH减数)对结果进行十进制加法调整后就得到差的BCD码。 例317设(A)78H,(R4)41H,求执行下列指令的结果。 ADDA,R4DA A解(A)=01111000+(R4)=0100000110111001B9H(十六进制运算结果,Cy=0,AC=0)+60H(加60H调整)19H(十进制运算结果,Cy=1,AC=0)1结果为(A)19H,(R4)41H,Cy=1,AC=0。 四、逻辑运算指令61逻辑运算指令共有24条。 分为累加器A清零取反(CLR、CPL)指令;与(ANL)指令;或(ORL)指令;异或(XRL)指令;循环移位(RL、RR、RLC、RRC)指令。 逻辑运算指令中,除带进位循环移位指令影响Cy和以PSW(direct)为目的的操作数的指令外,其余的逻辑运算指令不影响程序状态字PSW中的状态标志。 当用逻辑运算指令修改输出口时,进行的是“读改
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025福建莆田市数字集团有限公司公开选聘11名专业人才模拟试卷含答案详解
- 2025湖北十堰市郧阳区聘请政务服务志愿监督员10人模拟试卷及一套完整答案详解
- 2025年河南省社会科学院招聘高层次人才模拟试卷及答案详解(网校专用)
- 2025广西梧州市公安局第二批招聘警务辅助人员160人模拟试卷及答案详解一套
- 2025年4月杭州市采荷中学编外教师招聘3人模拟试卷及完整答案详解
- 2025黑龙江哈尔滨地铁集团招聘81人模拟试卷附答案详解(黄金题型)
- 2025黑龙江富裕县龙安桥镇人民政府招聘公益性岗位人员1人模拟试卷附答案详解(模拟题)
- 2025安徽合肥瑶海区某物业集团公司对外招聘95人笔试题库历年考点版附带答案详解
- 2025吉林农业大学招聘博士及急需紧缺人才80人(1号)模拟试卷及参考答案详解1套
- 2025年佳木斯市汤原县乡镇卫生院公开招聘医学毕业生1人考前自测高频考点模拟试题完整参考答案详解
- 2024年新高考Ⅰ卷英语真题(原卷+答案)
- 2025山东东营公安招录辅警392人考试参考试题及答案解析
- 2025四川宜宾市退役军人事务局招聘临聘人员2人考试参考题库及答案解析
- 高考语文 热点04 现代文阅读II之理论与文本互证类题(解析版)
- 预制混凝土检查井采购合同模板
- 中职高教版(2023)语文职业模块-第五单元:走近大国工匠(一)展示国家工程-了解工匠贡献【课件】
- 《声声慢》省赛一等奖
- 消防安全教育培训记录表
- 国家开放大学《实用管理基础》形考任务1-4参考答案
- 2023混凝土结构耐久性电化学修复技术规程
- 变压器主保护基本知识测试题
评论
0/150
提交评论