指令系统及汇编

上传人:仙*** 文档编号:171893839 上传时间:2022-11-29 格式:PPT 页数:256 大小:1.37MB
收藏 版权申诉 举报 下载
指令系统及汇编_第1页
第1页 / 共256页
指令系统及汇编_第2页
第2页 / 共256页
指令系统及汇编_第3页
第3页 / 共256页
资源描述:

《指令系统及汇编》由会员分享,可在线阅读,更多相关《指令系统及汇编(256页珍藏版)》请在装配图网上搜索。

1、第第3章章 指令系统及汇编指令系统及汇编第第3章章 指令系统及汇编指令系统及汇编 3.1 MCS51单片机汇编语言与指令格式单片机汇编语言与指令格式3.2 寻址方式寻址方式3.3 MCS51单片机指令系统单片机指令系统3.4 汇编语言及汇编语言程序设计汇编语言及汇编语言程序设计3.5 基本程序设计方法基本程序设计方法3.6 程序设计举例程序设计举例第第3章章 指令系统及汇编指令系统及汇编3.1 MCS51单片机汇编语言与指令格式单片机汇编语言与指令格式 3.1.1 单片机的汇编语言 由于构成计算机的电子器件特性所决定,计算机只能识别二进制代码。这种以二进制代码来描述指令功能的语言,称之为机器语

2、言,用机器语言组成的程序,称为目标程序。计算机就是按照机器语言的指令来完成各种功能操作的,它具有程序简捷、占用存储空间小、执行速度快、控制功能强等特点。第第3章章 指令系统及汇编指令系统及汇编 3.1.2 指令格式 MCS51单片机汇编语言指令的标准格式如下:标号:操作码 目的操作数,源操作数 ;注释 例如:LOOP:ADD#A,10H ;(A)(A)+10H (1)方括号 表示该项是可选项,可有可无。(2)标号是用户设定的符号,它实际代表该指令所在的地址。标号必须以字母开头,其后跟18个字母或数字,并以“:”结尾。第第3章章 指令系统及汇编指令系统及汇编 (3)操作码是用英文缩写的指令功能助

3、记符。它确定了本条指令完成什么样的操作功能。如:ADD表示加法操作。任何一条指令都必须有该助记符项,不得省略。(4)目的操作数提供操作的对象,并指出一个目标地址,表示操作结果存放单元的地址,它与操作码之间必须以一个或几个空格分隔。如上例中A表示操作对象是累加器A的内容,并指出操作结果又回送A存放。第第3章章 指令系统及汇编指令系统及汇编 (5)源操作数指出的是一个源地址(或立即数),表示操作的对象或操作数来自何处。它与目的操作数之间要用“,”号隔开。(6)注释部分是在编写程序时,为了增加程序的可读性,由用户拟写对该条指令或该段程序功能的说明。它以分号“;”开头,可以用中文、英文或某些符号来表示

4、,显然它不存入计算机,只出现在源程序中。第第3章章 指令系统及汇编指令系统及汇编 3.1.3 指令中常用符号 在分类介绍各类指令之前,先对描述指令的一些符号意义进行一些简单约定:(1)Ri和Rn:R表示当前工作寄存器区中的工作寄存器,i表示0或1,即R0和R1。n表示07,即R0R7,当前工作寄存器的选定是由PSW的RS1和RS0位决定的。(2)data:表示立即数,data为8位常数。data是指包含在指令中的8位立即数。第第3章章 指令系统及汇编指令系统及汇编 (3)data16:包含在指令中的16位立即数。(4)rel:相对地址,以补码形式表示的地址偏移量,范围为-128+127,主要用

5、于无条件相对短转移指令SJMP和所有的条件转移指令中。(5)addr16:16位目的地址。目的地址可在全部程序存储器的64 KB空间范围内,主要用于无条件长转移指令LJMP和子程序长调用指令LCALL中。(6)addr11:11位目的地址。目的地址应与下条指令处于相同的2 KB程序存储器地址空间范围内,主要用于绝对转移指令AJMP和子程序绝对调用指令ACALL指令中。第第3章章 指令系统及汇编指令系统及汇编 (7)direct:表示直接寻址的地址,即8位内部数据存储器RAM的单元地址(0127/255),或特殊功能寄存器SFR的地址。对于SFR可直接用其名称来代替其直接地址。(8)bit:内部

6、数据存储器RAM和特殊功能寄存器SFR中的可直接寻址位地址。(9):间接寻址寄存器或基地址寄存器的前缀,如Ri,DPTR,表示寄存器间接寻址。第第3章章 指令系统及汇编指令系统及汇编 (10)(X):表示X中的内容。(11)(X):表示由X寻址的单元中的内容,即(X)作地址,该地址的内容用(X)表示。(12)/和符号:/表示对该位操作数取反,但不影响该位的原值。表示指令操作流程,将箭头一方的内容,送入箭头另一方的单元中去。第第3章章 指令系统及汇编指令系统及汇编3.2 寻址方式寻址方式 3.2.1寄存器寻址 选定某寄存器,自该寄存器中读取或存放操作数,以完成指令规定的操作,称为寄存器寻址。例如

7、:MOV A,R0 ;(A)(R0)该指令的功能是把工作寄存器R0中的内容传送到累加器A中,如:R0内容为FFH,则执该指令后A的内容也为FFH。在该条指令中,源操作数和目的操作数是由寻址R0和A寄存器得到的,故属于寄存器寻址。该指令为单字节指令,机器代码为E8H。第第3章章 指令系统及汇编指令系统及汇编 3.2.2 立即寻址 操作数直接出现在指令中,它紧跟在操作码的后面,作为指令的一部分与操作码一起存放在程序存储器内,可以立即得到并执行,不需要另去寄存器或存储器等处寻找和取数,故称为立即寻址。该操作数称为立即数,并在其前冠以“”号作前缀,以表示并非地址。立即数可以是8位或16位,用十六进制数

8、表示。第第3章章 指令系统及汇编指令系统及汇编 例如:MOV A,0FH;(A)0FH 该指令的功能是将立即数0FH传送到累加器A中,对应的机器码为74H。它隐含了寄存器寻址累加器A方式,长一个字节,占用一个存储单元;立即数0FH紧跟在操作码之后,成为指令代码的一部分,长也是一个字节,占用紧跟在后面的另一个存储单元。故该指令为双字节指令,其机器码为74H 0FH。第第3章章 指令系统及汇编指令系统及汇编 3.2.3寄存器间接寻址 由指令指出某一个寄存器的内容作为操作数地址的寻址方法,称为寄存器间接寻址方法,简称寄存器间址。这里要强调的是:寄存器的内容不是操作数本身,而是操作数地址。寄存器间接寻

9、址使用所选定寄存器区中的R0和R1作为地址指针(对堆栈操作时,使用堆栈指针SP),来寻址片内数据存储器RAM(00FFH)的256个单元,但它不能访问特殊功能寄存器SFR。寄存器间接寻址也适用于访问外部数据存储器,此时,用R0、R1或DPTR作为地址指针。寄存器间接寻址用符号“”指明。第第3章章 指令系统及汇编指令系统及汇编图31 寄存器间接寻址示意图 第第3章章 指令系统及汇编指令系统及汇编 3.2.4 直接寻址 指令中直接给出操作数所在的存储器地址,以供寻址取数或存数的寻址方式称为直接寻址。例如:MOV A,40H ;(A)(40H)该指令的功能是把内部数据存储器RAM 40H单元内的内容

10、送到累加器A。指令直接给出了源操作数的地址40H。该指令的机器码为E5H 40H。第第3章章 指令系统及汇编指令系统及汇编 3.2.5 变址寻址 基址寄存器加变址寄存器间接寻址,简称变址寻址。它以数据指针DPTR或程序计数器PC作为基址寄存器,累加器A作为变址寄存器,两者的内容相加形成16位程序存储器地址,该地址就是操作数所在地址。例如:MOVC A,A+DPTR ;(A)(A)+(DPTR)该指令寻址及操作功能如图32所示,该指令为单字节指令,机器代码为93H。这种寻址方式常用于访问程序存储器中的常数表。第第3章章 指令系统及汇编指令系统及汇编图32 变址寻址示意图 第第3章章 指令系统及汇

11、编指令系统及汇编 3.2.6 相对寻址 相对寻址是以当前程序计数器PC值加上指令规定的偏移量rel,而构成实际操作数地址的寻址方法。它用于访问程序存储器,常出现在相对转移指令中。在使用相对寻址时要注意以下两点:第一,当前PC值是指相对转移指令所在地址(一般称为源地址)加上转移指令字节数。即:当前PC值=源地址+转移指令字节数。例如:JZ rel 是一条累加器A为零就转移的双字节指令。若该指令地址(源地址)为2050H,则执行该指令时的当前PC值即为2052H。第第3章章 指令系统及汇编指令系统及汇编 第二,偏移量rel是有符号的单字节数,以补码表示,其相对值的范围是-128+127(即00HF

12、FH),负数表示从当前地址向上转移,正数表示从当前地址向下转移。所以,相对转移指令满足条件后,转移的地址(一般称为目的地址)应为:目的地址=当前PC值+rel=源地址+转移指令字节数+rel例如:指令JZ 08H和JZ 0F4H 表示累加器A为零条件满足后,从源地址(2050H)分别向下、向上转移10个单元。其相对寻址示意如图33(a)、(b)所示。这两条指令均为双字节指令,机器代码分别为:60H 08H和60H F4H。第第3章章 指令系统及汇编指令系统及汇编 图33 相对寻址示意图(a)指令JZ 08H寻址示意图;(b)指令JZ F4H寻址示意图 第第3章章 指令系统及汇编指令系统及汇编

13、3.2.7 位寻址 MCS51系列单片机具有位寻址的功能,即指令中直接给出位地址,可以对内部数据存储器RAM中的128位和特殊寄存器SFR中的93位进行寻址,并且位操作指令可对地址空间的每一位进行传送及逻辑操作。例如:SETB PSW.3 ;(PSW.3)1 该指令的功能是给程序状态字PSW中的RS0置1。该指令为双字节指令,机器代码为D2H D3H,指令的第二字节直接给出位地址D3H(PSW.3的位地址)。第第3章章 指令系统及汇编指令系统及汇编 综上所述,在MCS51系列单片机的存储空间中,指令究竟对哪个存储器空间进行操作是由指令操作码和寻址方式确定的。7种寻址方式如表31所示。第第3章章

14、 指令系统及汇编指令系统及汇编表31 7 种寻址方式及使用空间 第第3章章 指令系统及汇编指令系统及汇编3.3 MCS51单片机指令系统单片机指令系统 MCS51单片机指令系统分为:数据传送类指令、算术运算类指令、逻辑运算及移位类指令、控制转移类指令和位操作(布尔操作)指令5大类,共计111条指令。现按其分类分别介绍各条指令的格式、功能、对状态标志的影响以及应用。第第3章章 指令系统及汇编指令系统及汇编 3.3.1 数据传送类指令 数据传送类指令共29条,它是指令系统中最活跃、使用最多的一类指令。一般的操作是把源操作数传送到目的操作数,即指令执行后目的操作数改为源操作数,而源操作数保持不变。若

15、要求在进行数据传送时,不丢失目的操作数,则可以用交换型传送指令。第第3章章 指令系统及汇编指令系统及汇编 数据传送类指令不影响进位标志CY、半进位标志AC和溢出标志OV,但当传送或交换数据后影响累加器A的值时,奇偶标志P的值则按A的值重新设定。按数据传送类指令的操作方式,又可把传送类指令分为3种类型:数据传送、数据交换和堆栈操作,并使用8种助记符:MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH及POP。表32给出了各种数据传送指令的操作码助记符和对应的操作数。第第3章章 指令系统及汇编指令系统及汇编表32 数据传送类指令助记符与操作 第第3章章 指令系统及汇编指令系统及汇编

16、1.内部数据存储器间数据传送指令 内部数据存储器RAM区是数据传送最活跃的区域,可用的指令数也最多,共有16条指令,指令操作码助记符为MOV。内部RAM之间源操作数传递关系如图34所示。为了便于理解指令功能,我们按源操作数的寻址方式逐一介绍各条指令。(1)立即寻址。在该寻址方式下,内部RAM区数据传送指令有如下5条指令。第第3章章 指令系统及汇编指令系统及汇编图34 内部RAM间数据传递关系 第第3章章 指令系统及汇编指令系统及汇编操作码助记符 目的操作数 源操作数 功能注释 机器代码(H)MOV A,data ;(A)data ,74 data MOV direct,data ;(direc

17、t)data ,75 direct data MOV Ri,data ;(Ri)data ,7677 data MOV Rn,data ;(Rn)data ,787F data MOV DPTR,data16 ;(DPTR)data16 ,90 data158data70第第3章章 指令系统及汇编指令系统及汇编 这组指令表明,8位立即数可以直接传送到内部数据区RAM的各个位置,并且可把16位立即数直接装入数据指针DPTR。把立即数送入累加器A的传送指令在3.2.2节中已作了介绍,其它指令的功能及应用举例如下:MOV direct,data;(direct)data#,75 direct dat

18、a 该指令的功能是把立即数传送到内部数据存储器RAM的00H7FH,以及特殊功能寄存器SFR的各单元中去,它为三字节指令。例如把立即数40H传送到RAM的30H单元和P1口(口地址为90H),可采用如下指令:第第3章章 指令系统及汇编指令系统及汇编 MOV 30H,40H ;(30H)40H,75 30 40 MOV P1,40H ;(90H)40H,75 90 40 MOV Ri,data ;(Ri)data,7677 data 该指令的功能是把立即数传送到由R0和R1寄存器的内容指出的片内数据存储器RAM的单元中去(MCS51系列为00H7FH,MCS52系列为00HFFH)。MOV R0

19、,30H ;(R0)30H ,78 30 MOV R0,40H ;(R0)40H,76 40 第第3章章 指令系统及汇编指令系统及汇编 MOV Rn,data;(Rn)data ,787F data 该指令的功能是把立即数传送到内部寄存器R0R7中去,该指令为双字节指令,机器代码为:0 1 1 1 1 r r rdata第第3章章 指令系统及汇编指令系统及汇编 MOV DPTR,data16 ;(DPTR)data16,90 data 158 data 70 该指令的功能是把16位立即数装入数据指针DPTR中去。它是MCS51系列单片机指令系统中唯一的一条16位数据传送指令。该指令为三字节指令

20、,第一字节为90H,第二字节为高8位立即数,第三字节为低8位立即数。例如:MOV DPTR,1234H指令执行后,DPTR寄存器的高8位寄存器DPH的内容为12H,低8位寄存器DPL内容为34H。该指令的机器代码为90H 12H 34H。第第3章章 指令系统及汇编指令系统及汇编 (2)寄存器寻址。在该寻址方式下,内部RAM区数据传送指令有以下5条:MOV direct,A#;(direct)(A),F5 direct MOV Ri,A ;(Ri)(A),F6F7 MOV Rn,A ;(Rn)(A),F8FF MOV A,Rn ;(A)(Rn),E8EF MOV direct,Rn ;(dire

21、ct)(Rn),888F direct第第3章章 指令系统及汇编指令系统及汇编 这组指令的功能是把累加器A的内容传送到内部数据区RAM的各个单元,或者把指定工作寄存器R0R7中的内容传送到累加器A或direct所指定的片内RAM的00H7FH单元或特殊功能寄存器SFR中去。但不能用这类指令在内部工作寄存器之间直接传送。例如:不存在MOVR1,R2这样的指令。第第3章章 指令系统及汇编指令系统及汇编 (3)直接寻址。在该寻址方式下,内部RAM区数据传送指令有如下4条指令:MOV A,direct ;(A)(direct),E5 direct MOV Rn,direct ;(Rn)(direct)

22、,A8AF direct MOV Ri,direct ;(Ri)(direct),A6A7 direct MOV direct2,direct1;(direct2)(direct1),85 direct1 direct2 第第3章章 指令系统及汇编指令系统及汇编 这组指令将直接地址所规定的内部RAM单元(片内RAM的00H7FH,SFR的80HFFH单元)内容传送到累加器A,寄存器Rn,并能实现内部数据寄存器RAM之间、特殊功能寄存器SFR之间或SFR与内部RAM之间的直接数据传递。直接传递不需要通过累加器A或者工作寄存器来间接传送,从而提高了数据传送的效率。第第3章章 指令系统及汇编指令系统

23、及汇编 例如:MOV P2,P1 ;(P2)(P1),85 90 A0 该指令的功能是不通过其它寄存器,直接把P1口(口地址90H)的内容传送到P2口(口地址A0H)输出,提高了效率。该指令为三字节指令,机器代码为85H 90H A0H。第第3章章 指令系统及汇编指令系统及汇编 (4)寄存器间接寻址。在该寻址方式下,内部RAM区数据传送指令有以下两条:MOV A,Ri ;(A)(Ri),E6E7 MOV direct,Ri ;(direct)(Ri),8687 direct 这组指令把以Ri的内容作为地址进行寻址所得到单元的内容,传送到累加器A或direct指定的片内RAM区单元。第第3章章

24、指令系统及汇编指令系统及汇编 例如:设内部RAM(30H)=40H,(40H)=10H,(10H)=00H,端口(P1)=CAH,分析以下程序执行后各单元及寄存器、P2口的内容。MOV R0,30H;(R0)30H ,78 30 MOV A,R0 ;(A)(R0),E6 MOV R1,A ;(R1)(A),F9 MOV B,R1 ;(B)(R1),87 F0 MOV R1,P1 ;(R1)(P1),A7 90 MOV P2,P1 ;(P2)(P1),85 90 A0 MOV 10H,20H ;(10H)20H ,75 10 20 第第3章章 指令系统及汇编指令系统及汇编 2.外部数据存储器数据

25、传送指令 MCS51单片机CPU对片外扩展的数据存储器RAM或I/O口进行数据传送,必须采用寄存器间接寻址的方法,通过累加器A来完成。一般数据的传送是通过P0口和P2口完成的,即片外RAM地址总线低8位由P0口送出,高8位由P2口送出,数据总线(8位)也由P0口传送(双向),但与低8位地址总线是分时传送的。这类数据传送指令共有以下4条单字节指令,指令操作码助记符标志为MOVX。第第3章章 指令系统及汇编指令系统及汇编MOVX A,DPTR ;(A)(DPTR),E0MOVX A,Ri ;(A)(Ri),E2E3MOVX DPTR,A ;(DPTR)(A),F0MOVX Ri,A ;(Ri)(A

26、),F2F3第第3章章 指令系统及汇编指令系统及汇编 例如:设外部RAM(0203H)=FFH,分析以下指令执行后的结果。MOV DPTR,0203H;(DPTR)0203H ,90 02 03 MOVXA,DPTR ;(A)(DPTR),E0 MOV 30H,A ;(30H)(A),F5 30 MOV A,0FH ;(A)0FH ,74 0F MOVXDPTR,A ;(DPTR)(A),F0 执行结果为:(DPTR)=0203H,(30H)=FFH,(0203H)=(A)=0FH。第第3章章 指令系统及汇编指令系统及汇编 3.程序存储器向累加器A传送数据指令 程序存储器向累加器A传送数据指令

27、,又称查表指令。它采用变址寻址方式,把程序存储器(ROM或EPROM)中存放的表格数据读出,传送到累加器A。它共有如下两条单字节指令,指令操作码助记符为MOVC。MOVC A,A+DPTR;(A)(A)+(DPTR),93MOVC A,A+PC;(PC)(PC)+1,(A)(A)+(PC),83 第第3章章 指令系统及汇编指令系统及汇编 例1:在外部ROM/EPROM中,从2000H单元开始依次存放09的平方值:0、1、4、9、81,要求依据累加器A中的值(09)来查找所对应的平方值,分析下述程序的结果。MOV DPTR,2000H;(DPTR)2000H,90 20 00 MOV A,09H

28、 ;(A)09H ,74 09 MOVC A,A+DPTR ;(A)(A)+(DPTR),93 执行结果:(DPTR)=2000H,(A)=51H(81的十六进制数)。第第3章章 指令系统及汇编指令系统及汇编 例2:仍以例1外部ROM/EPROM 2000H单元开始存放09的平方值,以PC作为基址寄存器进行查表。解:设MOVC指令所在地址(PC)=1FF0H,则 偏移量=2000H(1FF0H+1)=0FH 相应的程序如下:MOV A,09H ;(A)09H ,74 09 ADD A,0FH ;地址调整 ,24 0F MOVC A,A+PC ;(A)(A)+(PC)+1),83 执行结果为:(

29、PC)=1FF1H,(A)=51H。第第3章章 指令系统及汇编指令系统及汇编 4.数据交换指令 数据传送类指令一般都用来将操作数自源地址传送到目的地址,指令执行后,源地址的操作数不变,目的地址的操作数则修改为源地址的操作数。而数据交换指令其数据作双向传送,涉及传送的双方互为源地址、目的地址,指令执行后各方的操作数都修改为另一方的操作数。因此,两操作数均未冲掉、丢失。数据交换类指令共有如下5条指令:第第3章章 指令系统及汇编指令系统及汇编XCH A,direct ;(A)(direct),C5 directXCH A,Ri ;(A)(Ri),C6C7XCH A,Rn ;(A)(Rn),C8CFX

30、CHD A,Ri ;(A30)(Ri)30),D6D7SWAP A ;(A74)(A30),C4第第3章章 指令系统及汇编指令系统及汇编 例3:设(R0)=30H,(30H)=4AH,(A)=28H,则:执行 XCH A,R0 ;结果为:(A)=4AH,(30H)=28H 执行 XCHD A,R0 ;结果为:(A)=2AH,(30H)=48H 执行 SWAP A ;结果为:(A)=82H第第3章章 指令系统及汇编指令系统及汇编 5.堆栈操作类指令 堆栈操作有进栈和出栈操作,即压入和弹出数据,常用于保存或恢复现场。该类指令共有如下两条指令:(SP)(SP)+1 (SP)(direct)(dire

31、ct)(SP)(SP)(SP)-1 C0 direct PUSH directPOP direct D0 direct 第第3章章 指令系统及汇编指令系统及汇编 例4:若在外部ROM/EPROM中2000H单元开始依次存放09的平方值,数据指针(DPTR)=3A00H,用查表指令取出2003H单元的数据后,要求保持DPTR中的内容不变。完成以上功能的程序如下:第第3章章 指令系统及汇编指令系统及汇编MOV A,03H ;(A)03H ,74 03PUSH DPH ;保护DPTR高8位入栈,C0 83PUSH DPL ;保护DPTR低8位入栈,C0 82MOV DPTR,2000H ;(DPTR

32、)2000H,90 20 00MOVC A,A+DPTR ;(A)(2000H+03H),93POP DPL ;弹出DPTR低8位,D0 82POP DPH ;弹出DPTR高8位,(先进后出),83第第3章章 指令系统及汇编指令系统及汇编 3.3.2 算术运算类指令 算术运算类指令共有24条,可分为加法、带进位加法、带借位减法、加1减1,乘除及十进制调整指令共6组。它主要完成加、减、乘、除四则运算,以及增量、减量和二十进制调整操作,对8位无符号数可进行直接运算;借助溢出标志,可对带符号数进行2的补码运算;借助进位标志,可进行多字节加减运算,也可以对压缩BCD码(即单字节中存放两位BCD码)进行

33、运算。第第3章章 指令系统及汇编指令系统及汇编 1.加法指令 加法指令共有如下4条指令,操作数助记符为ADD。ADD A,data ;(A)(A)+data ,24 data ADD A,direct ;(A)(A)+(direct),25 direct ADD A,Ri ;(A)(A)+(Ri),2627 ADD A,Rn ;(A)(A)+(Rn),282F第第3章章 指令系统及汇编指令系统及汇编 这4条指令使得累加器A可以和内部RAM的任何一个单元的内容进行相加,也可以和一个8位立即数相加,相加结果存放在A中。无论是哪一条加法指令,参加运算的都是两个8位二进制数。对用户来说,这些8位数可当

34、作无符号数(0255),也可以当作带符号数(-128+127),即补码数。例如:对于二进制数11010011,用户可认为它是无符号数,即为十进制数211,也可以认为它是带符号数,即为十进制负数-45。但计算机在作加法运算时,总按以下规定进行:第第3章章 指令系统及汇编指令系统及汇编 (1)在求和时,总是把操作数直接相加,而无须任何变换。例如,若A=11010011B,R1=11101000B,执行指令ADD A,R1时,其算式表达为:11010011 +11101000 1 10111011 相加后(A)=10111011B。若认为是无符号相加,则A的值代表十进制数187;若认为是带符号补码数

35、相加,则A的值为十进制负数-69。第第3章章 指令系统及汇编指令系统及汇编 (2)在确定相加后进位标志CY的值时,总是把两个操作数作为无符号数直接相加而得出进位CY值。如上例中,相加后CY=1。若为无符号数相加CY代表十进制数256,但若是两个带符号数相加,CY没有意义。(3)在确定相加后溢出标志OV的值时,计算机总是把操作数当作带符号数来对待。在作加法运算时,一个正数和一个负数相加是不可能产生溢出的,只有两个同符号数相加才有可能产生溢出,表示运算结果出错。第第3章章 指令系统及汇编指令系统及汇编 (4)加法指令还会影响半进位标志和奇偶标志P。在上述例子中,由于D3相加对D4没有进位,所以AC

36、=0,而由于运算结果A中1的数目为偶数,故P=0。例如:设(A)=49H,(R0)=6BH,执行指令:ADD A,R0;(A)(A)+(R0),28 结果为:(A)=B4H,OV=1,CY=0,AC=1,P=0。第第3章章 指令系统及汇编指令系统及汇编2.带进位加法指令带进位加法指令有如下4条指令,其助记符为ADDC。ADDC A,data ;(A)(A)+(CY)+data ,34 dataADDC A,direct ;(A)(A)+(CY)+(direct),35 directADDC A,Ri ;(A)(A)+(CY)+(Ri),3637ADDC A,Rn ;(A)(A)+(CY)+(R

37、n),383F第第3章章 指令系统及汇编指令系统及汇编 例如:设(A)=C3H,数据指针低位(DPL)=ABH,CY=1 执行指令:ADDC A,DPL;(A)(A)+(CY)+(DPL),35 82 结果为:(A)=6FH,CY=1,OV=1,AC=0,P=0。第第3章章 指令系统及汇编指令系统及汇编 例1:双字节无符号数加法(R0 R1)+(R2 R3)(R4 R5)R0、R2、R4存放16位数的高字节,R1、R3、R5存放低字节。由于不存在16位数加法指令,所以只能先加低8位,后加高8位,而在加高8位时要连低8位相加时产生的进位一起相加。假设其和不超过16位,其编程如下:第第3章章 指令

38、系统及汇编指令系统及汇编MOV A,R1 ;取被加数低字节 ,E9ADD A,R3 ;低字节相加 ,2BMOV R5,A ;保存和低字节 ,FDMOV A,R0 ;取高字节被加数 ,E8ADDC A,R2 ;两高字节之和加低位进位,3AMOV R4,A ;保存和高字节 ,FC第第3章章 指令系统及汇编指令系统及汇编3.带借位减法带借位减法指令有如下4条指令,其助记符为SUBB。SUBB A,data ;(A)(A)(CY)data ,94 dataSUBB A,direct ;(A)(A)(CY)(direct),95 directSUBB A,Ri ;(A)(A)(CY)(Ri),9697S

39、UBB A,Rn ;(A)(A)(CY)(Rn),989F第第3章章 指令系统及汇编指令系统及汇编 由于减法指令只有带借位减法指令,因此,若要进行不带借位位的减法操作,需先清借位位,即置CY=0。清CY有专门的指令,它属于位操作类指令(详见3.3.5节),指令为:CLR C ;(CY)0 ,C3 例如:设(A)=52H,(R0)=B4H 执行指令:CLR C ;(CY)0 ,C3 SUBB A,R0 ;(A)(A)(CY)(R0),98 结果为:(A)=9EH,CY=1,AC=1,OV=1,P=1。第第3章章 指令系统及汇编指令系统及汇编 例2:双字节无符号数相减(R0 R1)(R2 R3)(

40、R4 R5)。R0、R2、R4存放16位数的高字节,R1、R3、R5存放低字节,先减低8位,后减高8位和低位减借位。由于低位开始减时没有借位,所以要先清零。其编程如下:MOV A,R1 ;取被减数低字节 ,E9 CLR C ;清借位位 ,C3 SUBB A,R3 ;低字节相减 ,9B MOV R5,A ;保存差低字节 ,FD MOV A,R0 ;取被减数高字节 ,E8 SUBB A,R2;两高字节差减低位借位 ,9A MOV R4,A ;保存差高字节 ,FC第第3章章 指令系统及汇编指令系统及汇编4.加1,减1指令加1指令共有如下5条指令,助记符为INC。INC A ;(A)(A)+1 ,04

41、INC direct ;(direct)(direct)+1 ,05 directINC Ri ;(Ri)(Ri)+1 ,0607INC Rn ;(Rn)(Rn)+1 ,080FINC DPTR ;(DPTR)(DPTR)+1 ,A3第第3章章 指令系统及汇编指令系统及汇编减1指令有如下4条指令,助记符为DEC。DEC A ;(A)(A)1 ,14DEC direct ;(direct)(direct)1 ,15 directDEC Ri ;(Ri)(Ri)1 ,1617DEC Rn ;(Rn)(Rn)1 ,181F第第3章章 指令系统及汇编指令系统及汇编 例如:设(R0)=7EH,(7EH)

42、=FFH,(7FH)=38H,(DPTR)=10FEH,分析逐条执行下列指令后各单元的内容。INC R0 ;使7EH单元内容由FFH变为00H INC R0 ;使R0的内容由7EH变为7FH INC R0 ;使7FH单元内容由38H变为39H INC DPTR;使DPL为FFH,DPH不变 INC DPTR ;使DPL为00H,DPH为11H INC DPTR;使DPL为01H,DPH不变 第第3章章 指令系统及汇编指令系统及汇编 5.乘、除法指令 乘、除法指令为单字节4周期指令,在指令执行周期中是最长的两条指令。(1)乘法指令MUL AB(B)(A)(B)158,(A)(A)(B)70(CY

43、)0 A4第第3章章 指令系统及汇编指令系统及汇编 乘法指令的功能是把累加器A和寄存器B中的两个8位无符号数相乘,将乘积16位数中的低8位存放在A中,高8位存放在B中。若乘积大于FFH(255),则溢出标志OV置1,否则OV清0。乘法指令执行后进位标志CY总是清零,即CY=0。另外,乘法指令本身只能进行两个8位数的乘法运算,要进行多字节乘法还需编写相应的程序。例如:若(A)=4EH(78),(B)=5DH(93)执行指令:MUL AB 结果为:积为(BA)=1C56H(7254)FFH(255),(A)=56H,(B)=1CH,OV=1,CY=0,P=0。第第3章章 指令系统及汇编指令系统及汇

44、编 例3:利用单字节乘法指令进行双字节数乘以单字节数运算。若被乘数为16位无符号数,地址为M1和M1+1(低位先、高位后),乘数为8位无符号数,地址为M2,积存入R2、R3和R4三个寄存器中。(M1+1)(M1)(M2)R3 R4 B A R2 R3 R4 第第3章章 指令系统及汇编指令系统及汇编参考程序如下:MOV R0,M1 ;被乘数地址存于R0 MOV A,R0 ;取16位数低8位 MOV B,M2 ;取乘数 MUL AB ;(M1)(M2)MOV R4,A ;存积低8位 MOV R3,B ;暂存(M1)(M2)高8位 INC R0 ;指向16位数高8位 MOVA,R0 ;取被乘数高8位

45、 第第3章章 指令系统及汇编指令系统及汇编 MOV B,M2 ;取乘数 MUL AB ;(M1+1)(M2)ADD A,R3 ;(A)+(R3)得(积)158 MOV R3,A ;(积)158存R3 MOV A,B ;积最高8位送A ADDCA,00H;积最高8位+CY得(积)2316 MOV R2,A ;(积)2316存入R2 若上述程序执行前:(M1+1)=ABH,(M1)=CDH,(M2)=64H,则执行后:(R2)=43H,(R3)=1CH,(R4)=14H。第第3章章 指令系统及汇编指令系统及汇编 (2)除法指令 (A)(A)(B)之商,(B)(A)(B)之余数 (CY)0,(OV)

46、0 除法指令的功能是把累加器A中的8位无符号整数除以寄存器B中的8位无符号整数,所得商存于累加器A中,余数存于寄存器B中,进位标志CY和溢出标志OV均被清零。若除数B中的内容为0时,除法运算没有意义,结果为不定值,此时溢出标志OV被置为1,即OV=1,而CY仍为0。DIV A B;,84 第第3章章 指令系统及汇编指令系统及汇编 例4:利用除法指令把累加器A中的8位二进制数转换为3位BCD数,并以压缩形式存放在地址M1、M2单元中。解:累加器A中的8 位二进制数,先对其除以100(64H),商数即为十进制的百位数;余数部分再除以10(0AH),所得商数和余数分别为十进制十位数和个位数,即得到3

47、位BCD数。百位数放在M1中,十位、个位数压缩BCD数放在M2中,十位与个位数的压缩BCD数的存放是通过SWAP和ADD指令实现的。参考程序如下:第第3章章 指令系统及汇编指令系统及汇编MOV B,64H ;除数100 送BDIV AB ;得百位数 MOV M1,A ;百位数存于M1中MOV A,0AH ;取除数10 XCH A,B ;上述余数与除数交换DIV AB ;得十位数和个位数SWAP A ;十位数存于A的高4位ADD A,B ;组成压缩BCD数MOV M2,A ;十、个位压缩BCD数存M2 若上述程序执行前:(A)=A8H(168),则执行后:(M1)=(01)BCD,(M2)=(6

48、8)BCD。第第3章章 指令系统及汇编指令系统及汇编 6.十进制调整指令 若(A)309或(AC)=1,则(A)30(A)30+06H DA A 若(A)749或(CY)=1,则(A)74(A)74+06H,D4 十进制调整指令是一条对二十进制的加法进行调整的指令。两个压缩BCD码按二进制相加,必须经过本条指令调整后才能得到正确的压缩BCD码和数,实现十进制的加法运算。由于指令要利用AC、CY等标志才能起到正确的调整作用,因此它必须跟在加法ADD、ADDC指令后面方可使用。第第3章章 指令系统及汇编指令系统及汇编 例5:对BCD码加法65+58BDH,进行十进制调整。解:参考程序如下:MOV

49、A,65H ;(A)65 ADD A,58H ;(A)(A)+58 DA A ;十进制调整 执行结果:(A)=(23)BCD,(CY)=1,即:65+58=123。01100101 65 +01011000 58 10111101 BD +01100110 加66H调整 1 00100011 第第3章章 指令系统及汇编指令系统及汇编 例6:双字节压缩BCD码加法。解:设R5(高)、R4(低)为被加数;R3(高)、R2(低)为加数,相加和的结果存入:R6(万)、R5(千、百)、R4(十、个)。参考程序如下:MOV A,R4 ;被加数十位、个位送入A ADD A,R2 ;十位、个位相加 DA A

50、;和的十位、个位调整 MOV R4,A ;和的十位、个位存入R4 MOV A,R5 ;被加数千位、百位送入A ADDCA,R3 ;千位、百位的和加低位进位第第3章章 指令系统及汇编指令系统及汇编 DA A ;和的千位、百位调整 MOV R5,A ;和的千位、百位存入R5 MOV A,00H ;A清零 ADDCA,00H ;求和的万位值 MOV R6,A ;和的万位存入R6 若程序执行前:(R5)=(98)BCD,(R4)=(76)BCD,(R3)=(54)BCD,(R2)=(32)BCD,则执行后:(R6)=(01)BCD,(R5)=(53)BCD,(R4)=(08)BCD。第第3章章 指令系

51、统及汇编指令系统及汇编 例7:利用十进制加法调整指令DA作十进制减法调整。解:由于DA指令不能直接对减法进行十进制调整,为了进行十进制减法运算,只能用加减数的补数来进行。两位十进制数是对100取补的,如60-30=30,也可改为补数相加:60+(100-30)=1 30 丢掉进位(模)100后,就得到正确的结果。第第3章章 指令系统及汇编指令系统及汇编 在实际运算时,由于CPU为8位,不可能用9位二进制 数 表 示 十 进 制 数 1 0 0,但 可 用 8 位 二 进 制 数10011010(9AH)代替,因为这个二进制数经过十进制调整后就是100000000。这样十进制无符号数的减法运算可

52、按以下步骤进行:(1)求减数的补数(9AH-减数);(2)被减数与减数的补数相加;(3)经DA指令调整后就得到所求的十进制减法运算结果。第第3章章 指令系统及汇编指令系统及汇编 这里用“补数”而不是“补码”是为了和带符号位的补码加以区别。由于现在操作数都是正数,没有必要再加符号位,故称“补数”更为合适一些。设M1、M2、M3 分别为被减数、减数和差的符号地址,相应的十进制减法运算程序如下:第第3章章 指令系统及汇编指令系统及汇编 CLR C ;CY清0 MOV A,9AH ;(A)9AH SUBBA,M2 ;求减数的补数 ADD A,M1 ;加补数完成减法 DAA ;十进制调整 MOV M3,

53、A ;差存入M3单元 若程序执行前:(M1)=(91)BCD,(M2)=(36)BCD,则程序执行后:(M3)=(55)BCD。第第3章章 指令系统及汇编指令系统及汇编 3.3.3 逻辑运算及移位类指令 逻辑运算及移位指令共有24条,其中逻辑指令有“与”、“或”、“异或”、累加器A清零和求反20条,移位指令4条。1.逻辑“与”运算指令 逻辑“与”运算指令共有如下6条,其助记符为ANL。ANL direct,A;(direct)(direct)(A),52 directANL direct,data ;(direct)(direct)data,53 direct data 第第3章章 指令系统及

54、汇编指令系统及汇编ANL A,data;(A)(A)data ,54 dataANL A,direct ;(A)(A)(direct),55 direct ANL A,Ri ;(A)(A)(Ri),5657 ANL A,Rn ;(A)(A)(Rn),585F逻辑“与”运算指令是将两个指定的操作数按位进行逻辑“与”的操作。例如:(A)=FAH=11111010B,(R1)=7FH=01111111B执行指令:ANL A,R1 ;(A)1111101001111111结果为:(A)=01111010B=7AH。逻辑“与”ANL指令常用于屏蔽(置0)字节中某些位。若清除某位,则用“0”和该位相与;若

55、保留某位,则用“1”和该位相与。第第3章章 指令系统及汇编指令系统及汇编2.逻辑“或”运算指令逻辑“或”运算指令共有如下6条指令,其助记符为ORL。ORL direct,A;(direct)(direct)(A),42 directORL direct,data;(direct)(direct)data ,43 direct dataORL A,data ;(A)(A)data ,44 dataORL A,direct;(A)(A)(direct),45 directORL A,Ri ;(A)(A)(Ri),4647ORL A,Rn;(A)(A)(Rn),484F第第3章章 指令系统及汇编指令

56、系统及汇编 逻辑“或”指令将两个指定的操作数按位进行逻辑“或”操作。它常用来使字节中某些位置“1”,欲保留(不变)的位用“0”与该位相或,而欲置位的位则用“1”与该位相或。例如:若(A)=C0H,(R0)=3FH,(3F)=0FH 执行指令:ORL A,R0 ;(A)(A)(R0)结果为:(A)=CFH。第第3章章 指令系统及汇编指令系统及汇编 又如:根据累加器A中40位的状态,用逻辑与、或指令控制P1口40位的状态,P1口的高3位保持不变。ANL A,00011111B ;屏蔽A的高3位 ANL P1,11100000B ;保留P1的高3位 ORL P1,A ;使P140按A40置位 若上述

57、程序执行前:(A)=B5H=10110101B,(P1)=6AH=01101010B,则 执行程序后:(A)=15H=00010101B,(P1)=75H=01110101B。第第3章章 指令系统及汇编指令系统及汇编 3.逻辑“异或”运算指令 “异或”运算是当两个操作数不一致时结果为1,两个操作数一致时结果为0,这种运算也是按位进行,共有如下6条指令,其助记符为XRL。XRL direct,A;(direct)(direct)(A),62 directXRL direct,data ;(direct)(direct)data ,63 dataXRL A,data ;(A)(A)data ,64

58、 dataXRL A,direct;(A)(A)(direct),65 directXRL A,Ri ;(A)(A)(Ri),66 67XRL A,Rn;(A)(A)(Rn),68 6F第第3章章 指令系统及汇编指令系统及汇编 逻辑“异或”指令常用来对字节中某些位进行取反操作,欲某位取反则该位与“1”相异或;欲某位保留则该位与“0”相异或。还可利用异或指令对某单元自身异或,以实现清零操作。例如:若(A)=B5H=10110101B,执行下列指令:XRL A,0F0H ;A的高4位取反,低4位保留 MOV 30H,A ;(30H)(A)=45H XRL A,30H ;自身异或使A清零 执行后结果

59、:(A)=00H。第第3章章 指令系统及汇编指令系统及汇编 以上逻辑“与”、“或”、“异或”各6条指令有如下共同的特点:(1)逻辑“与”ANL、“或”ORL、“异或”XRL运算指令除逻辑操作功能不同外,三者的寻址方式相同,指令字节数相同,机器周期数相同。(2)ANL、ORL、XRL的前两条指令的目的操作数均为直接地址方式,可很方便地对内部RAM的00HFFH任一单元或特殊功能寄存器的指定位进行清零、置位、取反、保持等逻辑操作。第第3章章 指令系统及汇编指令系统及汇编 (3)ANL、ORL、XRL的后4条指令,其逻辑运算的目的操作数均在累加器A中,且逻辑运算结果保存在A中。4.累加器A清零与取反

60、指令 CLR A ;(A)00H,E4 CPL A ;(A)(A),F4 第1条是对累加器A清零指令,第2条是把累加器A的内容取反后再送入A中保存的对A求反指令,它们均为单字节指令。若用其它方法达到清零或取反的目的,则至少需用双字节指令。第第3章章 指令系统及汇编指令系统及汇编 例如:上例中用异或指令使累加器清零,需要两条双字节指令:MOV30H,A和XRL A,30H共占用四字节存储空间;若用MOV A,00H实现累加器清零,也需一条双字节指令,而用CLRA一条单字节指令就可完成A清零的操作,大大节约了程序的存储空间和程序的执行时间。第第3章章 指令系统及汇编指令系统及汇编 例 1:双字节数

61、求补码。解:对于一个 16 位数,R3 存高 8 位,R2 存低 8 位,求补结果仍存R3、R2。求补的参考程序如下:MOV A,R2 ;低 8 位数送A CPL A ;低 8 位数取反 ADD A,01H ;加 1 得低 8 位数补码 MOV R2,A ;存补码低 8 位 MOV A,R3 ;高 8 位数送A CPL A ;高 8 位取反 ADDCA,00H ;加低 8 位进位 MOV R3 ,A ;存补码高 8 位第第3章章 指令系统及汇编指令系统及汇编 5.移位指令 移位指令有如下循环左移、带进位位循环左移、循环右移和带进位位循环右移 4 条指令,移位只能对累加器A进行。循环左移RL A

62、;(A n+1)(An),(A0)(A7),23 带进位位循环左移 RLC A;(A n+1)(An),(CY)(A7),(A0)(CY),33 循环右移 RRA;(An)(A n+1),(A7)(A0),03 带进位位循环右移 RRC A;(An)(A n+1),(CY)(A0),(A7)(CY),13 以上移位指令操作,可用图 3 5 表示。第第3章章 指令系统及汇编指令系统及汇编图 3 5 移位指令操作示意图 第第3章章 指令系统及汇编指令系统及汇编 另外,值得一提的是在前述数据传送类指令中有一条累加器A的内容半字节交换指令:SWAP A;(A)74 (A)30 ,C4 它实际上相当于执

63、行循环左移指令 4 次。该指令在BCD码的变换中是很有用的,如 3.3.2 节的例 4。第第3章章 指令系统及汇编指令系统及汇编例如:设(A)=43H,(CY)=0,则执行指令:RL A ;RLC A ;RR A ;RRC A ;结果为:(A)=86H,(CY)=0 (A)=0CH,(CY)=1 (A)=06H,(CY)=1 (A)=83H,(CY)=0第第3章章 指令系统及汇编指令系统及汇编 例 2:16 位数的算术左移。16 位数在内存中低 8 位存放在M1单元,高 8 位存放在M1+1 单元。解:所谓算术左移就是将操作数左移一位,并使最低位补充 0,相当于完成 16 位数的乘 2 操作,

64、故称算术左移。参考程序如下:CLR C ;进位CY清零 MOV R1,M1 ;操作数地址M1送R1 MOV A,R1 ;16 位数低 8 位送A RLC A ;低 8 位左移,最低位补 0第第3章章 指令系统及汇编指令系统及汇编MOV R1,A ;低 8 位左移后,回送M1存放INC R1 ;指向 16 位高 8 位地址M1+1MOV A,R1 ;高 8 位送ARLC A ;高 8 位带低 8 位进位左移MOV R1,A ;高 8 位左移后回送M1+1 存放第第3章章 指令系统及汇编指令系统及汇编 3.3.4 控制转移类指令 控制转移类指令共计 17 条,可分为无条件转移指令、条件转移指令、子

65、程序调用及返回指令。有了丰富的控制转移类指令,就能很方便地实现程序的向前、向后跳转,并根据条件分支运行、循环运行、调用子程序等。1.无条件转移指令 无条件转移指令有如下 4 条指令,它们提供了不同的转移范围和寻址方式:LJMPaddr16;(PC)addr16,02 addr 158 addr 70 AJMPaddr11;(PC)(PC)+2,addr108 00001 addr 70(PC)100 addr11 第第3章章 指令系统及汇编指令系统及汇编 SJMP rel ;(PC)(PC)+2+rel ,80rel JMP A+DPTR;(PC)(A)+DPTR ,73 (1)LJMP 称为

66、长转移指令,三字节指令,提供 16 位目标地址addr16。例如:在程序存储器0000H单元存放一条指令:LJMP3000H;(PC)3000H,02 30 00 则上电复位后程序将跳到3000H 单元去执行用户程序。第第3章章 指令系统及汇编指令系统及汇编 (2)AJMP称为绝对转移指令,双字节指令。它的机器代码是由 11 位直接地址addr11和指令特有操作码 00001,按下列分布组成的:该指令执行后,程序转移的目的地址是由AJMP指令所在位置的地址PC值加上该指令字节数 2,构成当前PC值。取当前PC值的高 5 位与指令中提供的 11 位直接地址形成转移的目的地址,即:a10 a9 a8 0 0 0 0 1 a7 a6 a5 a4 a3 a2 a1 a0 PC15 PC14 PC13 PC12 PC11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0PC 转移目的地址:第第3章章 指令系统及汇编指令系统及汇编 由于 11 位地址的范围是 0000000000011111111111,即 2 KB范围,而目标地址的高 5 位是由PC当前值固定的,所以程序可转移

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!