版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章MCS-51单片机指令系统与汇编语言程序设计主要内容:MCS-51单片机的寻址方式、指令系统、基本程序结构及汇编语言程序的开发与调试。重点:寻址方式、各种指令的应用、程序设计的规范、程序设计的思想及典型程序的理解和掌握。难点:控制转移、位操作指令的理解,各种指令的灵活应用,程序设计的基本方法以及针对具体的硬件设计出最合理的软件。要求:抽时间自学Keil,C51。第2章MCS-51单片机指令系统与汇编语言程序设计主要内1第2章MCS-51单片机指令系统与汇编语言程序设计2.1概述2.2MCS-51单片机的寻址方式2.3MCS-51单片机的指令系统2.4汇编语言及程序设计2.5程序设计举例2.6汇编语言的开发环境第2章MCS-51单片机指令系统与2.1概述2指令系统:一台计算机所能识别、执行的指令的集合。机器语言:指令系统是一套控制计算机执行操作的二进制编码,称为机器语言。特点:机器语言指令是计算机惟一能直接识别和执行的指令。
汇编语言:利用指令助记符来描述指令系统的一套计算机指令。特点:计算机的指令系统一般都是利用汇编语言描述的,是由计算机硬件设计所决定的。指令系统没有通用性。2.1概述
单片机一般是空机,未含任何系统软件。因此在第一次使用前,必须对其进行编程。指令系统:一台计算机所能识别、执行的指令的集合。2.1概3指令:计算机用于控制各功能部件完成某一指定动作的指示和命令。识别指令的标志——指令的表示形式:
(1)指令的二进制形式
机器码、源程序的目标代码——二进制。特点:直接为计算机识别和执行。读/写和记忆困难。(2)指令的十六进制形式
指令的十六进代码需翻译成二进制代码才能被计算机识别和执行。特点:方便读,写和记忆困难。
(3)指令助记符
用英文字母、单词表征指令的功能。其源程序必须翻译成机器码(目标代码)才能被计算机识别和执行。特点:方便读/写和记忆。指令:计算机用于控制各功能部件完成某一指定动作的指示和命令。42.1.1汇编语言指令格式与伪指令2.1.2指令的分类2.1.3指令中的常用符号2.1概述
2.1.1汇编语言指令格式与伪指令2.1概述52.1.1汇编语言指令格式与伪指令
1.常用单位与术语位(bit):计算机所能表示的最小的、最基本的数据单位,指一个二进制位。字节(Byte):一个连续的8位二进制数码,1Byte=8bit。字(Word):通常由16位二进制数码组成,即1Word=2Byte。字长:计算机一次处理二进制数码的位数。
MCS-51系列单片机都是以Intel公司最早的典型8位产品8051为核心,增加了一定的功能部件后构成的。本章以8051为主介绍MCS-51系列单片机。
2.1.1汇编语言指令格式与伪指令1.常用单位与术语62.汇编语言指令格式
指令格式:指令的表示方式,规定了指令的长度和内部信息的安排。[标号:]操作码[操作数][,操作数][;注释]其中:[]项是可选项。标号(符号地址):本条指令起始地址的符号,代表该条指令在程序编译时的具体地址。操作码(助记符):英文字母、单词表征指令,一般是对应英文的缩写。特点:规定了指令具体的操作功能,描述指令的操作性质,是指令语句的关键,是一条指令中不可缺少的内容。操作数:一个具体的数据,或存放数据的地址。注释:针对某指令而添加的说明性文字,增加程序的可读性,不产生可执行的目标代码。2.汇编语言指令格式指令格式:指令的表示方式,规定了指令的7伪指令:汇编程序的控制命令。是程序员发给汇编程序的命令。功能:设置符号值、保留和初始化存储空间、控制用户程序代码的位置。
3.伪指令
伪指令只出现在汇编前的源程序中,仅提供汇编用的某些控制信息,不产生可执行的目标代码,是CPU不能实际执行的指令。伪指令:汇编程序的控制命令。是程序员发给汇编程序的命令。功能8(1)定位伪指令ORG格式:ORGn其中:n——绝对地址,十六进制数、标号或表达式。功能:规定编译后的机器代码存放的起始位置。规定:在一个汇编语言源程序中允许存在多条定位伪指令,但每一个n值都应和前面生成的机器指令存放地址不重叠。例如:
ORG1000H START:MOVA,#20H MOVB,#30H┇(1)定位伪指令ORG格式:ORGn9(2)结束汇编伪指令END格式:[标号:]END[表达式]功能:源程序的汇编到此结束,其后的任何内容不予理睬。放在汇编语言源程序的末尾。(3)赋值伪指令EQU格式:字符名称xEQU赋值项n功能:将赋值项n的值赋予字符名称x。程序中凡出现该字符名称x就等同于该赋值项n,其值在整个程序中有效。规定:在使用时,必须先赋值后使用。赋值项n可以是常数、地址、标号或表达式。
“字符名称”与“标号”表示形式的区别:“字符名称”后无冒号,而“标号”后面有冒号。(2)结束汇编伪指令END“字符名称”与“标号”表示形式的10(4)定义字节伪指令DB格式:[标号:]DBx1,x2,…,xn功能:将8位数据(数据组)x1,x2,…,xn顺序存放在从当前程序存储器地址开始的存储单元中。规定:xi——8位常数(00H~FFH)、ASCII码(字符在单引号内)、表达式,字符串(在单引号内,长度≤80个字符)。两个数据之间用逗号“,”分隔。(4)定义字节伪指令DB11(5)定义双字节伪指令DW格式:[标号:]DWx1,x2,…,xn功能:将双字节数据(数据组)顺序存放在从标号指定地址单元开始的存储单元中。规定:xi——16位数值常数,先存高8位入低位地址单元。(6)预留存储空间伪指令DS格式:[标号:]DSn功能:从标号指定地址单元开始,预留n个存储单元。规定:汇编时不对预留存储单元赋值。n——数据,表达式。注意:DB、DW、DS伪指令只能对程序存储器进行赋值和初始化工作,不能用来对数据存储器进行赋值和初始化工作。
(5)定义双字节伪指令DW格式:[标号:]DWx1,12(7)定义位地址符号伪指令BIT格式:字符名称xBIT位地址n功能:将位地址n的值赋予字符名称x。规定:程序中凡出现该字符名称x就代表该位地址。位地址n——绝对地址,符号地址。(8)数据地址赋值伪指令DATA格式:字符名称xDATA表达式n功能:把表达式n的值赋值给左边的字符名称x。规定:
n——数据或地址,包含所定义的“字符名称x”在内的表达式,但不能为汇编符号。DATA与EQU的主要区别是:EQU必须先定义后使用,DATA无限制。EQU——源程序的开头,DATA——源程序的开头或末尾。
(7)定义位地址符号伪指令BIT132.1.2指令的分类
MCS-51指令系统有111条指令,分类如下:1.按指令字节数分类单字节(49条),双字节(46条),3字节(16条)。2.按指令执行时间分类单机器周期指令(65条)、双机器周期指令(44条)和四机器周期指令(2条)。3.按功能分类数据传送指令(29条)、算术操作指令(24条)、逻辑操作指令(24条)、控制转移指令(17条)和位操作指令(17条)。2.1.2指令的分类MCS-51指令系统144.指令的字节数:指令操作码——1字节;直接地址——1字节,8位数据——1字节,16位数据——2字节;操作数中的A、B、R0~R7、C、Ri、DPTR、A+DPTR、A+PC等均隐含在操作码中。(1)1字节指令(单字节指令)
①指令中只有操作码。NOPRET②操作数的寄存器号隐含在指令码中。
MOVA,Rn;指令码11101rrrINCDPTR;指令码A3H(2)2字节指令(双字节指令)指令的格式:操作码操作数(操作码为第一字节,操作数为第二字节)
MOVA,#data;指令码为01110100#data(3)3字节指令(三字节指令)
指令的格式:操作码目的操作数,源操作数(三字节:操作码,目的操作数,源操作数)
ANLdirect,#data;指令码01010011direct#data4.指令的字节数:15SWAPA23221232112MOV DPTR,#1000HMOV A,20HANL A,#0FHMOVCA,@A+DPTRMOV 21H,AMOV SP,#60HANL A,#0F0HMOVCA,@A+PCMOV 22H, ASJMP $注:部分特殊功能寄存器SFR占一个字节。SWAPA23221232112MOV DPTR,#10162.1.3指令中的常用符号
MCS-51指令系统共有44种助记符,类似于8086。常用符号如下:Rn(n=0~7):工作寄存器组R0~R7中的任一个寄存器。Ri(i=0或1):工作寄存器组中用于间址的寄存器R0,R1。#data:8位直接参与操作的立即数。#data16:16位直接参与操作的立即数。direct:片内RAM的8位单元地址。addr11:11位目的地址,主要用于ACALL和AJMP指令中。addr16:16位目的地址,主要用于LCALL和LJMP指令中。rel:8位二进制地址偏移量(补码),取值范围为128~+127,主要用于相对转移指令,以形成转移的目的地址。DPTR:数据指针,用于寄存器间接寻址方式和变址寻址方式。2.1.3指令中的常用符号MCS-51指17bit:片内RAM的位寻址区、可以位寻址的SFR的位地址。A(或ACC):累加器。B:B寄存器。C:PSW中的进位标志位Cy。:用于间接寻址寄存器指针的前缀标志。$:当前指令的地址。/:在位操作指令中,对该位先求反后再参与操作。(X):由X所指定的某寄存器或某单元中的内容。((X)):由X间接寻址单元中的内容。←:指令的操作结果是将箭头右边的内容传送到左边。→:指令的操作结果是将箭头左边的内容传送到右边。∨、∧、⊕:表示逻辑或、与、异或。bit:片内RAM的位寻址区、可以位寻址的SFR的位地址。18寻址方式:说明操作数所在地址的方法。或指令按地址获得操作数的方式。计算机在设计时决定了它的寻址方式,寻址方式越多,计算机的灵活性越强,指令系统也就越复杂。MCS-51单片机的指令系统提供了七种寻址方式,分别为:
立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址。一条指令可能含多种寻址方式。2.2MCS-51单片机的寻址方式
计算机执行程序实际上是在不断寻找操作数并进行操作的过程。寻址方式:说明操作数所在地址的方法。或指令按地址获得操作数的192.2.1立即寻址
定义:立即参与操作的数据(立即数)直接写在指令中。特点:指令中直接含有所需8位/16位的操作数。处于指令的第二字节和第三字节的位置上。立即数表示方法:#data8,#data16。
MOVA,#2DH;(A)←立即数2DHMOVA,2DH;(A)←内部RAM的2DH单元内容ADDA,#05H;(A)←(A)+立即数05HMOVDPTR,#1000H;(DPTR)←立即数1000H2.2.1立即寻址定义:立即参与操作的数据(立即数)直202.2.2直接寻址定义:操作数的地址直接写在指令中。特点:指令中含有操作数的地址指出了参与操作的数据所存放在存储器单元(位)的地址。寻址范围:ROM、片内RAM、SFR和位地址空间。
MOVR1,2DH;(R1)←(2DH)MOV30H,4AH;(30H)←(4AH)注意:
MOVA,SP;(A)←(SP)MOVA,81H;(A)←(SP)MOVP1,#5AH;(P1)←(#5AH)MOV90H,#5AH;(P1)←(#5AH)2.2.2直接寻址定义:操作数的地址直接写在指令中。212.2.3寄存器寻址定义:操作数存放在MCS-51内部的Rn或部分专用寄存器中。特点:指令中指出的寄存器的内容作为操作数。寻址范围:四组通用寄存器Rn(R0~R7)、部分专用寄存器(A,B,DPTR,Cy)。
MOVA,R7;(A)←(R7)MOV30H,B;(30H)←(B)MOVDPTR,#1000H;(DPTR)←1000H存放操作数的寄存器在指令代码中不占据单独的一个字节,嵌入(隐含)到操作码字节中。2.2.3寄存器寻址存放操作数的寄存器在指令代码中不占据222.2.4寄存器间接寻址(寄存器间址)定义:指令的寄存器中存放的是操作数据的单元地址。特点:二次寻找操作数地址的寻址方式。寻址范围:内部RAM低128B(只能用R0或R1),外部RAM(R0、R1,DPTR)。
MOVR1,#30H;(R1)←立即数30HMOVR1,#0FH;(30H)←立即数0FHMOVA,R1;(A)←((30H))=立即数0FH寄存器间接寻址,寄存器前边必须加前缀符号“”,不能用于寻址特殊功能寄存器SFR。2.2.4寄存器间接寻址(寄存器间址)寄存器间接寻址,寄232.2.5变址寻址(基址加变址寄存器间接寻址)定义:操作数存放在变址寄存器(累加器A)和基址寄存器(DPTR或PC)相加形成的16位地址单元中。特点:单字节指令,指令操作码中隐含基址寄存器和变址寄存器。执行时,基地址+偏移地址→操作数地址→操作数→完成相应的操作。寻址范围:ROM,主要用于查表性质的访问。注意:A中存放的偏移地址的范围为00H~FFH(无符号数)。MCS-51单片机共有以下三条变址寻址指令:
MOVCA,A+PC ;(A)←((A)+(PC)+1)MOVCA,A+DPTR;(A)←((A)+(DPTR))JMPA+DPTR;(PC)←((A)+(DPTR))2.2.5变址寻址(基址加变址寄存器间接寻址)24如:(DPTR)=1234H,(A)=50H,ROM的(1284H)=65H。执行MOVCA,A+DPTR过程:(A)+(DPTR)=1284H→(1284H)=65H→(A)=65H
如:(DPTR)=1234H,(A)=50H,252.2.6相对寻址定义:将程序计数器PC的当前值(取出本条指令后的PC值)与+rel→新的转移目标地址。特点:用于程序的相对转移,易于生成浮动代码。如:
SJMPrel;(PC)←(PC)+2+rel双字节指令
相对转移指令的目的地址=指令地址+指令字节数+偏移量寻址范围:ROM。相对地址偏移量(rel):8位二进制补码,范围为128~+127。在程序中,“rel”通常用“标号”代替。2.2.6相对寻址相对地址偏移量(rel):8位二进制补26分析指令SJMP06H的执行过程及执行结果。执行的过程如下图所示。分析指令SJMP06H的执行过程及执行结果。272.2.7位寻址定义:指令中给出的操作数是一个可单独寻址的位地址。特点:直接寻址方式的一种,对8位二进制数中的某一位的地址进行操作。寻址范围:片内RAM低128B中位寻址区、部分SFR(83位)。可位寻址的位地址的表示形式:(1)直接使用位地址。如:
MOV00H,C;(00H)←(Cy)
其中:00H是片内RAM中20H地址单元的第0位。2.2.7位寻址28(2)字节地址加位序号的形式。如:
MOV20H.0,C;(20H.0)←(Cy)
其中:20H.0是片内RAM中20H地址单元的第0位。(3)位的符号地址(位名称)的形式。
利用部分特殊功能寄存器各位的特定名称来访问该位。如:ANLC,P;(C)←(C)∧(P)
其中:P是PSW的第0位,C是PSW的第7位。(4)字节符号地址(字节名称)加位序号的形式。利用部分特殊功能寄存器名称加位序号形式来访问该位。
如:CPLPSW.6;(AC)←()
其中:
PSW.6表示该位是PSW的第6位。(2)字节地址加位序号的形式。如:29[例题1]
指出下列指令中源操作数的寻址方式寄存器寻址立即寻址寄存器间接寻址直接寻址变址寻址相对寻址位寻址MOVA,R1;(A)←(R1)ADDA,#05H;(A)←(A)+立即数05HMOVA,R1;(A)←((R1))MOV30H,4AH;(30H)←(4AH)MOVCA,A+DPTR;(A)←((A)+(DPTR))SJMPLP;(PC)←(PC)+2+偏移量MOV65H,C;(65H)←(Cy)[例题1]指出下列指令中源操作数的寻址方式寄存器寻址立即寻302.3MCS-51单片机的指令系统
MCS-51指令系统:44种助记符,33种功能,51种操作,111条指令(指令助记符与操作数的各种寻址方式的结合)。
MCS-51单片机指令系统按其功能可分为五类:
数据传送类指令算术运算类指令逻辑运算和移位类指令控制转移类指令位操作类指令2.3MCS-51单片机的指令系统MC31学习指令系统时,应注意:(1)指令的格式、功能;(2)操作码的含义,操作数的表示方法;(3)寻址方式,源、目的操作数的范围;(4)对标志位的影响;(5)指令的适用范围;(6)正确估算指令的字节数。操作码——1字节。操作数中:直接地址derict——1字节,#data——1字节,#data16——两字节;A、B、R0~R7、C、Ri、DPTR、A+DPTR、A+PC等均隐含在操作码中。特殊功能寄存器SFR——一个字节。学习指令系统时,应注意:操作码——1字节。操作数中:322.3MCS-51单片机的指令系统2.3.1数据传送类指令(29条)2.3.2算术运算类指令(24条)2.3.3逻辑运算及移位类指令(24条)2.3.4控制转移类指令(17条)2.3.5位操作(布尔操作)类指令(17条)2.3MCS-51单片机的指令系统2.3.1数据传送332.3.1数据传送指令
最基本、最主要的操作指令。29条,可分为五类:内部RAM间传送:(MOV——16条)外部RAM与累加器间传送:(MOVX——4条)ROM向累加器传送:(MOVC——2条)数据交换:(SWAP,XCH,XCHD——5条)堆栈操作:(PUSH,POP——2条)寻址范围:累加器A、片内RAM、SFR、片外RAM、ROM。功能:(目的地址)←(源地址),表示为:
<dest>
←
<src>
源地址单元的内容不变。对标志位的影响:除以累加器A为目的操作数的数据传送指令对P标志位有影响外,其余均不影响标志位。2.3.1数据传送指令最基本、341.内部RAM数据传送指令(16条)格式:
MOV<dest>,<src>范围:片内RAM、SFR中。指令形式:按目的操作数可将内部数据传送指令分为五类。(1)以累加器A为目的操作数(4条)
MOVA,<src>其中:
<src>包括Rn、Ri、direct、#data。影响P标志。
如:MOVA,30H——(A)(30H)(2)以工作寄存器Rn为目的操作数(3条)
MOVRn,<src>
其中:<src>包括A、direct、#data。
如:MOVR7,#30H——(R7)#30H1.内部RAM数据传送指令(16条)35(3)以直接地址单元为目的操作数(5条)
MOVdirect,<src>
其中:
<src>包括A、Rn、Ri、direct、#data。如:
MOV30H,20H;(30H)(20H)(4)以间址寄存器Ri为目的操作数(3条)
MOVRi,<src>
其中:
<src>包括A、direct、#data。如:
MOVR1,A;((R1))(A)(5)16位数据传送指令(1条)
MOVDPTR,#data16如:
MOVDPTR,#1000H;(DPTR)#1000H注意:(2)、(3)、(4)、(5)均不影响标志位。(3)以直接地址单元为目的操作数(5条)36内部数据传送指令的传送关系图MCS-51允许在两个内部RAM的直接地址之间进行传送数据,不允许在两个工作寄存器之间直接进行传送数据。内部数据传送指令的传送关系图MCS-51允许在两个内部RAM372.外部RAM数据传送指令(4条)
特点:只能通过A,采用寄存器间址(R0,R1和DPTR)。指令格式:
MOVXA,<src>MOVX<dest>,A
其中:<src>、<dest>包括DPTR、Ri(R0,R1)
。Ri——片外RAM的低256个单元;DPTR——片外RAM。对标志位的影响:MOVXA,<src>——只影响P标志;MOVX<dest>,A——不影响标志位。
如:
MOVXA,R1;(A)((R1))
MOVXDPTR,A;((DPTR))(A)2.外部RAM数据传送指令(4条)特点:只能通过A,采用寄383.程序存储器(ROM)数据传送指令(查表指令)(2条)
特点:单向传送,只能读到累加器A中。专用于查表。指令格式:MOVCA,A+DPTP;(A)←((A)+(DPTR))MOVCA,A+PC;(PC)←(PC)+1(A)←((A)+(PC))
两条指令的异同:功能相同,使用中存在着差异。(1)查表的位置要求不同A+DPTR(远程查表):表可放在64KBROM的任何地址,使用方便。A+PC(近程查表):表只能放在ROM中查表指令后的256B的地址空间中。3.程序存储器(ROM)数据传送指令(查表指令)(2条)特39(2)偏移量的计算方法不同①查表地址:A+DPTP(远程查表):(A)+(DPTR)。A+PC(近程查表):(A)+(PC)+1②偏移量的计算方法:A+DPTP(远程查表):A为欲查数距离表首地址的值。A+PC(近程查表):A的值必须预先设置为:A←表首地址-当前指令的PC值-1这两条指令到程序设计时再详细讲解。
(2)偏移量的计算方法不同404.数据交换指令(5条)功能:保存目的操作数。分两类:(1)半字节数据交换指令(2条)
指令格式:
SWAPA;(A)3~0←→(A)7~4
XCHDA,Ri;(A)3~0←→((Ri))3~0
(2)字节交换指令(3条)
指令格式:XCHA,<src>
其中:
<src>包括Rn、Ri、direct。4.数据交换指令(5条)功能:保存目的操作数。分两类:415.堆栈操作指令(2条)指令格式:
PUSHdirect;SP←(SP)+1,((SP))←(direct)POPdirect;(direct)←((SP)),SP←(SP)1特点:特殊的数据传送指令,根据SP中的栈顶地址进行操作。实质:以栈指针SP为间址寄存器的间址寻址方式。注意:堆栈区应避开使用的工作寄存器区和其他需要使用的数据区,系统复位后,SP的初始值为07H。一般初始化时要重新设置SP。
5.堆栈操作指令(2条)指令格式:PUSHdirect42堆栈区如:已知:(40H)=0F0H;(41H)=11H;(SP)=60H执行下面程序PUSH40HPUSH41HPOP42HPOP43H堆栈指令工作过程
SPSPSPF0H11H数据区43H42H41H40HF0H11H11HF0H堆栈区如:已知:(40H)=0F0H;(41H)=11H43如:设(A)=7BH;(35H)=11H已知(SP)=60H执行下面程序,则:PUSHACCPUSH35HPOPACCPOP5AH;(61H)#7BH;(62H)(35H)即:(62H)#11H;(A)(62H)即:(A)#11H;(5AH)(61H)即:(5AH)#7BH这是字节交换的一种方式。如:设(A)=7BH;(35H)=11H;(61H)442.3.2算术运算指令
(24条)操作数:目的操作数A中;源操作数在Rn、片内RAM(direct,Ri)中,或#data。算术运算指令可分为:加法运算:
(ADD——4条)带进位加法运算:
(ADDC——4条)带借位减法运算:
(SUBB——4条)加1/减1操作:
(INC,DEC——9条)单字节乘/除法运算:
(MUL,DIV——2条)十进制调整:
(DAA——1条)2.3.2算术运算指令(24条)操作数:目的操作数A中451.加法指令(4条)指令格式:
ADDA,<src>;(A)←(A)+<src><src>包括Rn、Ri、direct、#data。对标志位的影响:影响PSW中的所有标志位。2.带进位的加法指令(4条)指令格式:
ADDCA,<src>;(A)←(A)+<src>+(Cy)<src>包括Rn、Ri、direct、#data。对标志位的影响:影响PSW中的所有标志位。1.加法指令(4条)指令格式:ADDA,<src>463.带借位的减法指令(4条)
指令格式:
SUBBA,<src>;(A)←(A)-<src>-(Cy)<src>包括Rn、Ri、direct、#data。对标志位的影响:影响PSW中的所有标志位。
注意:MCS-51指令系统中无不带借位的减法指令,
不带借位的减法:CLRC(Cy=0)→SUBB。
3.带借位的减法指令(4条)指令格式:SUBBA474.十进制调整指令(BCD码修正指令)(1条)
功能:跟在ADD、ADDC后面,对运算结果进行压缩BCD码修正,完成十进制加法运算功能。指令格式:DAA特点:专用指令。两个压缩的BCD码按二进制数相加后必须经本指令调整才能得到压缩的BCD码的和。操作数:源操作数只能在累加器A中,结果存入A中。注意:只适用加法,不能对减法指令进行修正。
4.十进制调整指令(BCD码修正指令)(1条)功能:跟在485.加1指令(增量指令)(5条)
功能:操作数所指定的单元的内容加1。指令格式:INC<dest>;<dest>←<dest>+1<dest>包括A、Rn、direct、Ri、DPTR操作数:只有一个操作数,即是源操作数又是目的操作数。对标志位的影响:除对累加器A操作影响P标志位外,其余均不影响PSW的各标志位。
6.减1指令(减量指令)(4条)
功能:操作数所指定的单元的内容减1。指令格式:DEC<dest>;<dest>←<dest>-1<dest>包括A、Rn、direct、Ri。(DPTR无减1)操作数:只有一个操作数。对标志位的影响:同加1指令。5.加1指令(增量指令)(5条)功能:操作数所指定的单元497.乘除指令(2条)
功能:实现乘法或除法操作。特点:在指令系统中执行时间最长,均为四周期指令。指令格式:
MULAB;(B)(A)←(A)×(B)DIVAB;(A)←(A)/(B)…(B)对标志位的影响:影响PSW中的Cy,OV,P标志位,注意乘除运算后结果保存的位置!7.乘除指令(2条)功能:实现乘法或除法操作。502.3.3逻辑运算和移位指令(24条)对标志位的影响:除了两条带进位的循环移位指令外,其余均不影响PSW中的各标志位;目的操作数是A时影响P标志位。分类:5种,24条。逻辑与运算:(ANL——6条)逻辑或运算:(ORL——6条)逻辑异或运算:(XRL——6条)累加器清零/取反:(CLR,CPL——2条)累加器移位操作:(RL,RLC,RR,RRC—4条)功能:逻辑运算,模拟各种数字逻辑电路的功能,进行逻辑电路的设计。2.3.3逻辑运算和移位指令(24条)对标志位的影响511.逻辑与运算指令(6条)功能:实现两个操作数的逻辑与。指令格式:ANLA,<src>;
<src>包括Rn、Ri、direct、#dataANLdirect,<src>
;
<src>包括A、#data适用场合:逻辑与,用于操作数的某些位不变(这些位与“1”),某些位置0(这些位与“0”)。2.逻辑或运算指令(6条)功能:实现两个操作数的逻辑或。指令格式:ORLA,<src>;
<src>包括Rn、Ri、direct、#data
ORLdirect,<src>;
<src>包括A、#data适用场合:逻辑或,用于操作数的某些位不变(这些位或“0”),某些位置1(这些位或“1”)。1.逻辑与运算指令(6条)523.逻辑异或运算指令(6条)功能:两个操作数的逻辑异或。指令格式:XRLA,<src>;
<src>包括Rn、Ri、direct、#data
XRLdirect,<src>;
<src>包括A、#data适用场合:逻辑异或,用于操作数的某些位不变(这些位异或“0”),某些位取反(这些位异或“1”)。4.循环移位指令(4条)不带进位的循环左、右移位(操作码为RL,RR)带进位的循环左、右移位(操作码为RLC,RRC)特点:只能对累加器A进行循环移位。指令格式:
操作码A功能:A中的数据逐位左移1位——乘2,逐位右移1位——除以2。3.逻辑异或运算指令(6条)535.累加器清0与取反指令(2条)
指令格式:CLRA;(A)←00H
CPLA;(A)←()特点:节省存储空间,提高程序执行效率。
对标志位的影响:CLR只影响P标志位,CPL不影响标志位。
循环移位指令示意图5.累加器清0与取反指令(2条)循542.3.4控制转移指令(17条)功能:改变PC中的内容,控制程序执行的流向,实现程序分支转向。分类:4种,17条。无条件转移:(LJMP,AJMP,SJMP,JMP——4条)条件转移(判断跳转):(JZ,JNZ,CJNE,DJNZ——8条)子程序调用及返回:(LCALL,ACALL,RET,RETI——4条)空操作:
(NOP——1条)“耗时”一个机器周期。
对标志位的影响:除了CJNE影响Cy外,其余均不影响标志位。2.3.4控制转移指令(17条)功能:改变PC中的内容551.无条件转移指令(4条)定义:不规定条件的程序转移。指令格式:
长转移指令:
LJMPaddr16;(PC)←addr15~0
绝对转移指令:
AJMPaddr11;(PC)←(PC)+2,PC10~0←addr11
相对(短)转移指令:SJMPrel;(PC)←(PC)+2+rel
间接(散)转移指令:JMPA+DPTR;(PC)←(DPTR)+(A)1.无条件转移指令(4条)56注意:(1)指令中的地址或偏移量均可采用标号,只有在执行前才被汇编成实际的二进制地址。(2)指令的转移范围:在执行当前转移指令后的PC值的基础上:
LJMP:
64KB
AJMP:2KB
SJMP:
-128~+127(用补码表示)
JMP:
64KB注意:57(3)SJMPrel中地址偏移量rel的计算方法:rel=转移目标地址-转移指令地址(当前PC值)-2(4)原地踏步(暂停当前的程序)的实现
SJMP$或LP:SJMPLP
(5)JMPA+DPTR功能:实现程序的分支转移(散转),DPTR为转移目的的起始地址,A为转移目的的偏移量。(6)在编程中,经常使用短转移指令SJMP和相对转移指令AJMP,以便生成浮动代码,并不经常使用长转移指令LJMP。
(3)SJMPrel中地址偏移量rel的计算方法:582.条件转移指令(2条)功能:实质上是A判零指令。在规定的条件满足时进行程序转移,否则程序往下顺序执行。指令格式:
JZrel;若(A)=0,则转移(PC)←(PC)+2+rel若(A)≠0,则顺序执行(PC)←(PC)+2JNZrel;若(A)≠0,则转移(PC)←(PC)+2+rel若(A)=0,则顺序执行(PC)←(PC)+2指令的转移范围:rel的取值范围为-128~+127(用补码表示)。可以采用符号地址表示。偏移量rel的计算方法:
rel=转移目标地址-转移指令地址(当前PC值)-22.条件转移指令(2条)593.比较转移指令(4条)
指令格式:
CJNE目的操作数,源操作数,rel操作数:目的操作数为A时,源操作数为#data、direct。目的操作数为Rn、Ri时,源操作数为#data;即:CJNEA,direct,relCJNEA,#data,relCJNERn,#data,relCJNERi,#data,rel(源为#data时,目的为A、Rn、Ri;源为direct,目的为A。)用途:比较两个操作数作为条件控制程序的转移。若(目的操作数)=(源操作数),则程序继续执行,(PC)←(PC)+3若(目的操作数)>(源操作数),则程序转移,(PC)←(PC)+rel+3,Cy←0若(目的操作数)<(源操作数),则程序转移,(PC)←(PC)+rel+3,Cy←13.比较转移指令(4条)60功能:比较两个操作数的大小。
对标志位影响:影响Cy标志位,不影响其他标志位。指令的转移范围:rel的取值范围-128~+127(用补码表示)。可以采用符号地址表示。注意:比较是通过不存最后的差值结果的减法实现的,影响Cy标志位,指令执行后两个操作数的内容不变。
功能:比较两个操作数的大小。614.循环(减1条件)转移指令(2条)功能:减1判非0则转移。主要用于控制循环程序的循环次数。特点:减1与条件转移两种功能结合在一起。指令格式:
DJNZ<dest>,rel;<dest>←<dest>-1若<dest>≠0,则转移(PC)←(PC)+2+rel若<dest>=0,则不转移(PC)←(PC)+2
其中:
<dest>为Rn、direct条件转移指令、比较转移指令、循环(减1条件)转移指令均为相对转移指令,指令的转移范围有限-128~+127。若要实现64KB范围内的转移,可借助于LJMP的过渡来实现。4.循环(减1条件)转移指令(2条)条件转移指令、比较转移625.子程序调用与返回指令(4条)定义:具有完整功能的程序段定义为子程序。
功能:
供主程序在需要时调用。特点:子程序可以在程序中反复多次使用,以简化源程序的书写;可以嵌套,有利于模块化程序设计。主程序调用子程序,必须有:
子程序调用指令:在主程序中使用;
子程序返回指令:子程序的最后一条指令。
调用与返回指令是成对使用的。子程序调用指令自动实现:PC中的断点地址→堆栈,子程序入口地址→PC。子程序返回指令自动实现:堆栈中的断点地址→PC。注意:子程序调用时应注意入口参数设置,子程序返回时应注意出口参数的传递。5.子程序调用与返回指令(4条)63主程序调用子程序两级子程序嵌套主程序调用子程序两级子程序嵌套64指令格式:(1)绝对短调用指令
ACALLaddr11;(PC)←(PC)+2,(SP)←(SP)+1,(SP)←(PC)7~0(SP)←(SP)+1,(SP)←(PC)15~8,(PC)10~0←addr11
其中:addr11为11位地址,实际编程时可以用符号地址,只能在2KB范围以内调用子程序。(2)绝对长调用指令
LCALLaddr16;(PC)←(PC)+3,(SP)←(SP)+1,(SP)←(PC)7~0(SP)←(SP)+1,(SP)←(PC)15~8,(PC)15~0←addr16
其中:addr16为16位地址,实际编程时可以用符号地址。可以在64KB范围以内调用子程序。指令格式:65(3)子程序返回指令
RET;(PC)15~8←((SP)),(SP)←(SP)1,(PC)7~0←((SP)),(SP)←(SP)1(4)中断返回指令RETI;(PC)15~8←((SP)),(SP)←(SP)1,(PC)7~0←((SP)),(SP)←(SP)1注:中断服务程序是一种特殊的子程序,它是在计算机响应中断时,由硬件完成调用而进入相应的中断服务程序。RETI与RET:指令相仿,都是子程序执行的最后一条指令。区别在于RET是从子程序返回,RETI是从中断服务程序返回。(3)子程序返回指令666.空操作指令NOP(1条)指令格式:
NOP;(PC)←(PC)+1功能:不执行任何操作,消耗了一个机器周期。适用场合:常用于软件延时或在程序可靠性设计中用来稳定程序。特点:NOP占据一个单元的存储空间,除了使PC的内容加1外,CPU不产生任何操作结果,只是消耗了一个机器周期。6.空操作指令NOP(1条)672.3.5位操作指令
位操作(布尔变量操作):操作数不是字节,而是字节中的某个位。每位的取值只能取0或1。寻址范围:片内RAM位寻址区20H~2FH,SFR中的可寻址位。特点:以进位标志Cy作为位累加器,可以实现布尔变量的传送、运算和控制转移等功能。
2.3.5位操作指令位操作(布尔变量操作):操作数不是68分类:以位为单位进行逻辑运算及操作,可分为4种:位传送:(MOV——2条)位清零/置位:(CLR,SETB——4条)位逻辑与/或/非运算:(ANL,ORL,CPL——6条)位条件转移:
(JC,JNC,JB,JNB,JBC——5条)指令中的位地址的表达方式:直接地址方式(如0AFH)、字节地址.位序号(如0D0H.0)、位名称方式(如F0)、特殊功能寄存器名.位序号(如PSW.3)等几种方式。
分类:以位为单位进行逻辑运算及操作,可分为4种:691.位数据传送指令(2条)特点:在可寻址位与位累加器Cy之间进行的。不能在两个可寻址位间直接进行传送。
指令格式:MOVC,bit;(Cy)←(bit)MOVbit,C;(bit)←(Cy)1.位数据传送指令(2条)702.位逻辑操作指令(6条)指令格式:操作码C,<src>;操作码包括ANL、ORL,<src>包括bit、/bit。
CPL<dest>;<dest>←
;CPL表示取反,<dest>包括Cy、bit。功能:位逻辑操作,组合逻辑电路模拟。采用位操作指令进行组合逻辑电路的设计比采用字节型逻辑指令节约存储空间,运算操作十分方便。3.位状态(置位、清0)控制指令(4条)
指令格式:CLR<dest>;<dest>←0SETB<dest>;<dest>←1
;<dest>包括Cy、bit。2.位逻辑操作指令(6条)714.位条件(控制)转移指令(5条)
特点:以位的状态作为实现程序转移的判断条件。指令格式:(1)以进位标志位Cy内容为条件的转移指令
JCrel;若(Cy)=1,则转移(PC)←(PC)+2+rel,否则顺序执行JNCrel;若(Cy)=0,则转移(PC)←(PC)+2+rel,否则顺序执行(2)以位地址bit内容为条件的转移指令JBbit,rel;若(bit)=1,则转移(PC)←(PC)+3+rel,否则顺序执行JNBbit,rel;若(bit)=0,则转移(PC)←(PC)+3+rel,否则顺序执行JBCbit,rel;若(bit)=1,则转移(PC)←(PC)+3+rel,且(bit)←0,否则顺序执行4.位条件(控制)转移指令(5条)722.4汇编语言及程序设计
程序设计:编制计算机的程序。应用计算机所能识别的、接受的语言把要解决的问题的步骤有序地描述出来。程序设计语言的种类:(1)机器语言:用二进制代码表示的计算机惟一能识别和执行的最原始的程序设计语言。
(2)汇编语言:利用指令助记符描述的程序设计语言。(3)高级语言:用接近于人的自然语言描述的程序设计语言,是面向过程而独立于机器的通用语言。2.4汇编语言及程序设计程序设计:编制计算机的程序。应73汇编语言的指令类型:(1)基本指令:即指令系统中的指令。可执行指令,每一条指令都有对应的机器码。(2)伪指令:汇编时用于控制汇编的指令。非执行指令,无指令机器码。汇编语言的语句格式:[标号:]操作码[操作数][,操作数][;注释]数据的表示方法:(1)二进制数:由0、1组成,“逢2进1”的数制。(0~1,后缀B)(2)十六进制数:便于读写记忆的二进制数的简写形式。(0~9,A~F,后缀:H)(3)十进制数:可用二进制数表示(也称为BCD码,0~9表示为:0000~1001B),也可用十进制数表示(后缀D或无后缀)。汇编语言的指令类型:742.4汇编语言及程序设计2.4.1汇编语言程序设计的步骤2.4.2顺序程序设计2.4.3分支程序设计2.4.4循环程序设计2.4.5查表程序设计2.4.6子程序设计2.4汇编语言及程序设计2.4.1汇编语言程序设计的752.4.1汇编语言程序设计的步骤
汇编语言程序设计:根据任务要求,采用汇编语言编制程序的过程。汇编语言程序设计的步骤:
(1)拟订设计任务书(2)建立数学模型(3)确定算法(4)分配内存单元,编制程序流程图(5)编制源程序:合理分配存储器单元、I/O接口地址;明确各程序之间的相互关系;编写注释。(6)上机调试(7)程序优化2.4.1汇编语言程序设计的步骤汇编语言程序设计:根据76编制程序流程图:用各种图形、符号、指向线等来说明程序设计的过程。编制程序流程图通用的图形符号编制程序流程图:用各种图形、符号、指向线等来说明程序设计的过772.4.2顺序程序设计
特点:最简单、最基本的程序设计。顺序执行每一条指令。可为复杂程序的子程序。[例题1]
将片内RAM30H单元中的两位压缩BCD码转换成二进制数送到片内RAM40H单元中。解:两位压缩BCD码转换成二进制数的算法为:(a1a0)BCD=10×a1+a0
2.4.2顺序程序设计特点:最简单、最基本的程序设计。78程序设计过程程序设计过程792.4.3分支程序设计特点:根据条件,确定程序的走向。采用指令:条件转移指令、比较转移指令和位转移指令。分支程序的设计要点如下:(1)建立可供转移指令测试的条件;(2)选用合适的转移指令;(3)在转移的目的地址处设定标号。2.4.3分支程序设计特点:根据条件,确定程序的走向。分80解:此题有三个条件,所以有三个分支程序。这是一个三分支归一的条件转移问题。X是有符号数,判断符号位是0还是1可利用JB或JNB指令。判断X是否等于0则直接可以使用累加器A的判0指令。[例题2]
求符号函数的值。已知片内RAM的40H单元内有一自变量X,编制程序按如下条件求函数Y的值,并将其存入片内RAM的41H单元中。
1 X>0 Y= 0 X=0 -1 X<0解:此题有三个条件,所以有三个分支程序。这是一个三分支归一的81程序设计过程程序设计过程822.4.4循环程序设计特点:程序中含有可以重复执行的程序段(循环体)。作用:有效地缩短程序,减少程序占用的内存空间,使程序的结构紧凑、可读性好。组成:(1)循环初始化:位于开头,循环前的准备工作。包括设置各工作单元的初始值以及循环次数等。(2)循环体:位于循环体内,循环程序的主体(工作程序),多次重复使用。要求编写简练,提高程序的执行速度。(3)循环控制:位于循环体内,包括循环修改、循环次数修改、条件语句等,控制循环次数和修改每次循环时的参数。(4)循环结束:位于结尾,存放程序结果,恢复各工作单元。2.4.4循环程序设计特点:程序中含有可以重复执行的程序83循环程序的结构:先处理后控制先控制后处理循环程序的结构:先处理后控制先控制后处理84
循环程序按结构可分为单重循环与多重循环1.单重循环程序定义:循环体内部不包括其他循环的程序。[例题3]
已知片内RAM30H~3FH单元中存放了16个二进制无符号数,编制程序求它们的累加和,并将其和数存放在R4,R5中。解:每次求和的过程相同,可以用循环程序实现;16个二进制无符号数求和,循环程序的循环次数应为16次(存放在R2中);和放在R4,R5中(R4存高8位,R5存低8位)。循环程序按结构可分为单重循环与多重循环[例题85程序设计过程程序设计过程86[例题4]
编制程序将片内RAM的30H~4FH单元中的内容传送至片外RAM的2000H开始的单元中。解:每次传送数据的的过程相同——循环程序。30H~4FH共32个单元,循环次数应为32次——R2中,为了方便每次传送数据时地址的修改——间接寻址,送片内RAM数据区首地址——R0,片外RAM数据区首地址——DPTR。[例题4]编制程序将片内RAM的30H~4FH单元中的内容87程序设计过程程序设计过程882.多重循环程序(循环嵌套)定义:循环中还包括有循环。
[例题5]
编制程序设计50ms延时程序。单片机主频12MHz。解:延时程序与MCS-51指令执行时间(机器周期数)和晶振频率fOSC有直接的关系;当fOSC=12MHz时,机器周期为1s,执行一条DJNZ指令需要2个机器周期,时间为2s;50ms÷2s>255,单重循环程序无法实现,采用双重循环。2.多重循环程序(循环嵌套)定义:循环中还包括有循环。
[89程序设计过程延时时间为:(2×123+1+2+1)×200+2+1=50.003ms
程序设计过程延时时间为:(2×123+1+2+1)×2903.设计循环程序时应注意的问题(1)有始有终,循环执行的条件,避免从循环体外直接转到循环体内部。(2)多重循环程序从外向内进入,结束时由内向外退出。只允许外循环嵌套内循环。不允许循环相互交叉及从循环程序的外部跳入内部。(3)确定程序结构,处理好逻辑关系。第一次执行情况→画出重复执行的程序框图→循环初值→循环控制。(4)优化循环体,改进算法、优选指令,缩短程序执行时间。3.设计循环程序时应注意的问题914.排序程序设计(冒泡法)
[例题6]
设MCS-51单片机内部RAM起始地址为30H的数据块中共存有64个无符号数,编制程序使它们按从小到大的顺序排列。解:设64个无符号数在数据块中的顺序为:e64,e63,…,e2,e1,排序方法很多,现以经典的冒泡法为例进行介绍。冒泡法(两两比较法):
e64和e63比较→e64>e63→交换,否则不交换→e63和e62比较,是否交换→一直比较N01=63次→e1位置为数据块中最大值。一个气泡从水底冒出来——冒泡法4.排序程序设计(冒泡法)[例题6]设MCS-51单片机92
第二次冒泡过程同第一次,冒泡后在e2位置为数据块中的次大数。e1中为最大数,不需要再比较,比较次数N2=N11=62。如此冒泡共N=N01=63次,实现64个数的排序。循环次数:冒泡次数N=N01=63次——外循环每次冒泡时循环次数N(i)=N(i-1)1——内循环优化方法:设置“交换标志”,控制是否再需要冒泡。刚进行完的冒泡中发生过数据交换——继续冒泡。刚进行完的冒泡中未发生过数据交换——停止冒泡。例如:对于一个已经排好序的数组:1,2,3,…,63,64,排序程序根据“交换标志”的状态只要进行一次循环,结束排序程序的再执行。第二次冒泡过程同第一次,冒泡后在e2位置为数据块中的93第一次冒泡排序过程第一次冒泡排序过程94第二次冒泡排序过程第二次冒泡排序过程95程序设计过程程序设计过程962.4.5查表程序设计
查表:根据给定查找存放在ROM中数据表中与其对应的值。适用场合:数码显示、打印字符转换、数据转换、函数求值、非线性传感器输出等。1.采用MOVCA,A+DPTR指令查表程序的设计方法(1)自变量——X,函数值——Y,计算Y;在ROM中建立函数表(自变量为X)。(2)在ROM中建立函数表TABLE,将Y按顺序存放在起始(基)地址为TABLE的ROM中,X→
A。(3)表首地址TABLE→DPTR,执行查表指令查表Y→A。2.4.5查表程序设计查表:根据给定查找存放在ROM中972.采用MOVCA,A+PC指令查表程序的设计方法与MOVCA,A+DPTR指令的(1)、(2)相同。(3)X→A,执行ADDA,#data指令修正A。data=函数表首地址PC1(4)执行查表指令查表Y
→A。[例题7]利用查表的方法编写Y=X2(X=0,1,2,…,9)的程序。解:设变量X的值存放在内部RAM的30H单元中,求得的Y的值存放在内存31H单元中。平方表存放在首地址为TABLE的ROM中。2.采用MOVCA,A+PC指令查表程序的设计方法98MOVCA,A+DPTR指令查表工作过程MOVCA,A+DPTR指令查表工作过程99MOVCA,A+PC指令查表工作过程2000H2019H2019H2019H2019H2019H2019HMOVCA,A+PC指令查表工作过程2000H1002.4.6子程序设计子程序:能够完成确定任务,并能为其他程序反复调用的程序段。特点:可以多次重复使用,缩短整个程序,节省程序存储空间,简化程序的逻辑结构,便于程序调试。
主程序(调用程序):调用子程序的程序。
1.子程序的调用与返回主程序调用子程序的过程:执行调用指令(LCALL或ACALL)→子程序→执行到子程序最后一条指令RET→返回到主程序断点处→继续。
2.4.6子程序设计子程序:能够完成确定任务,并能为其他101
(1)子程序的调用子程序的入口地址:子程序的第一条指令地址。常用标号表示。程序的调用过程:执行LCALL指令→当前的PC值入堆栈(先低后高)→子程序的入口地址送入PC→转去执行子程序。(2)子程序的返回主程序的断点地址:子程序执行完毕后,返回主程序的地址。调用指令下一条指令的地址。子程序的返回过程:子程序执行RET指令→从堆栈中弹出断点给PC(先高后低)→回到主程序断点处继续执行。(1)子程序的调用1022.保存与恢复寄存器内容(1)保护现场:主程序转入子程序后,保护主程序的信息不会在运行子程序时丢失的过程。(2)恢复现场:从子程序返回时,将保存在堆栈中的主程序的信息还原的过程。(3)实现:用户通过堆栈完成。恢复现场在从子程序返回之前,保护现场是在在进入子程序时。如:
PUSHPSWPUSHACC;保护现场…
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024郑州大学睿博公寓健康监测点紧急保洁合同
- 《射频消融治疗快速性心律失常临床回顾研究》
- 《孤独症儿童康复室内虚拟空间设计研究》
- 2025届新高考数学一轮复习特训:概率 (含答案)
- 淮阴工学院《物流信息系统分析与设计》2022-2023学年第一学期期末试卷
- 2024解除合同协议书范例
- 牙髓病临床病历解析图
- 数学游戏.3 在教室里认一认(课件)-2024-2025学年一年级上册数学人教版
- 2025年传染病学(中级)综合知识考试题库
- 2025届江苏“决胜新高考”高三年级上册10月大联考物理试卷(含答案)
- 《泰坦尼克号》电影赏析
- 小红书种草营销师模拟判断题
- 风电场危险源辨识、风险评价和风险控制清单
- 大学生劳动教育概论智慧树知到期末考试答案章节答案2024年南昌大学
- 2024年高考化学河北卷试卷评析暨2025届高考化学备考策略
- 增值税预缴税款表电子版
- 玻璃幕墙工程技术规范与应用
- 三级医师查房登记本(共3页)
- 全国医疗服务价格项目规范(2012版)
- 乌鲁木齐市律师服务收费指导标准
- 三国志11全人物能力数值表
评论
0/150
提交评论