




已阅读5页,还剩109页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
21世纪高等院校规划教材,汇编语言程序设计,相伟主编徐小平李珍香副主编,中国水利水电出版社,第二章程序设计基础,本章学习目标,通过本章学习,读者应该掌握以下内容:汇编语言源程序结构及基本概念各种寻址方式常用伪指令的格式、功能常用I/O功能调用的用法,2.1汇编语言源程序结构,2.1.1汇编语言源程序结构及分析初学程序设计最有效的方法是阅读源程序并上机调试。通过阅读程序可以掌握程序的一般结构,学习实现程序功能的经典算法。通过对程序进行上机调试,逐渐掌握指令的语法格式、功能,避免编写源程序时出现常见的语法错误,同时训练调试技巧。,例2-1显示信息“Howdoyoudo?”,DATASEGMENTSTRDB“Howdoyoudo?$”DATAENDSSTACKSEGMENTSTACKDB200DUP(?)STACKENDSCODESEGMENTASSUMEDS:DATA,SS:STACK,CS:CODESTART:MOVAX,DATAMOVDS,AXLEADX,STRMOVAH,9INT21HMOVAH,4CHINT21HCODEENDSENDSTART,例2-2将内存缓冲区中以BUFA开始的一组字数据传送到BUFB开始的内存区。,DATASEGMENTBUFADW367BH,2845H,0A78H,9DE3H,0F6BH,6532HCOUNTEQU($-BUFA)/2BUFBDWCOUNTDUP(?DATAENDSSTACKSEGMENTSTACKDB200DUP(?)STACKENDSCODESEGMENTASSUMEDS:DATA,SS:STACK,CS:CODESTART:MOVAX,DATAMOVDS,AX,LEASI,BUFALEADI,BUFBMOVCX,COUNTLOP:MOVAX,SIMOVDI,AXINCSIINCSIINCDIINCDIDECCXJNZLOPMOVAH,4CHINT21HCODEENDSENDSTART,2.1.2机器指令简介,8086/8088指令系统提供的机器指令从功能上可分为7种类型:数据传送指令算术运算指令位运算指令程序控制指令串操作指令处理器控制指令输入/输出指令,所有机器指令从格式上看,有3种指令格式:,无操作数指令格式:助记符例如:STCCLCCMC,单操作数指令格式:助记符操作数例如:PUSHAXPOPBX,双操作数指令格式:助记符目的操作数,源操作数例如:MOVCX,DX,2.1.3常量、变量、标号及表达式,1常量常量是指汇编语言源程序中以数值常数、字符串常数和符号常数的形式存在的量。注意:当数值常量的值是十六进制形式,并且第一个字符是大写字母AF或小写字母af时,需要在数值前面加一个0,如:0A64DH。,例如:在下面的汇编源程序中,带下画线的量就是常量DATASEGMENTSTRDB“Howdoyoudo?$”DATAENDSSTACKSEGMENTSTACKDB200DUP(?)STACKENDSCODESEGMENTASSUMEDS:DATA,SS:STACK,CS:CODESTART:MOVAX,DATAMOVDS,AXLEADX,STRMOVAH,9INT21HMOVAH,4CHINT21HCODEENDSENDSTART,例如:在下面的数据段中,带下画线的是一个符号常数,它是使用EQU伪指令定义的。DATASEGMENTBUFADW367BH,2845H,0A78H,9DE3H,0F6BH,6532HCOUNTEQU($-BUFA)/2BUFBDWCOUNTDUP(?)DATAENDS定义符号常数使用EQU伪指令、“”伪指令。,2变量,变量是指数据存储单元地址的符号表示,变量的值在程序运行过程中可以改变。,(1)变量的定义,定义变量使用伪指令DB、DW、DD、DQ、DT。DB用来定义字节变量,字节变量占1个存储单元,可存储一个字节数据。DW用来定义字变量,字变量占2个存储单元,可存储一个字数据。DD用来定义双字变量,双字变量占4个存储单元,可存储一个双字数据。DQ用来定义四字类型变量,四字类型变量占8个存储单元,可存储8字节数据。DT用来定义十字节类型变量,十字节类型变量占10个存储单元,可存储10字节数据。,例如:在数据段DATA中定义字节变量STR。DATASEGMENTSTRDB“Howdoyoudo?$”DATAENDS,例如:在数据段DATA中定义了字变量BUFA和BUFB。DATASEGMENTBUFADW367BH,2845H,0A78H,9DE3H,0F6BH,6532HCOUNTEQU($-BUFA)/2BUFBDWCOUNTDUP(?)DATAENDS,(2)变量的属性,变量有三个属性,即段属性、偏移地址属性、类型属性。段属性:指变量所在段的段地址。偏移地址属性:指变量所定义的单元到变量所在段的开始位置之间的字节距离。类型属性:由定义变量使用的伪指令确定。DB定义的变量的类型属性为字节类型(BYTE),DW定义的变量的类型属性为字类型(WORD),DD定义的变量的类型属性为双字类型(DWORD),DT定义的变量的类型属性为四字类型,DQ定义的变量的类型属性为十字节类型。,3标号,标号是指机器指令存储单元地址的符号表示。,(1)标号的定义,LOP:MOVAX,SIMOVDI,AXINCSIINCSIINCDIINCDIDECCXJNZLOP,(2)标号的属性,标号与变量一样,也具有三个属性,即段属性、偏移地址属性、类型属性。段属性:指标号所在段的段地址。偏移地址属性:指标号所定义的单元到标号所在段的开始位置之间的字节距离。类型属性:标号的类型属性分为近类型NEAR和远类型FAR。NEAR类型的标号称为近标号,近标号只能用于段内转移。FAR类型的标号称为远标号,远标号既可用于段内转移,也可用于段间转移。,4表达式,由常量、变量、标号、运算符和括号组成的有意义的式子称为表达式。其中运算符又可分为算术运算符、逻辑运算符、关系运算符及其他运算符。表达式的计算结果是一个常数,该常数可以作为指令的操作数使用。,(1)算术运算符,例如:算术表达式的计算219/73186.4/2.633219MOD7的结果为2,(2)关系运算符,例如:假设NUM的值为60H。则:NUMGT80HNUMEQ60H,逻辑运算符,例如:假设NUM的值为6BH则:NUMAND87H;表达式的值是03HNUMOR87H;表达式的值是0EFHNUMXOR87H;表达式的值是0ECHNOT87H;表达式的值是78HNUMSHR2;表达式的值是1AHNUMSHL2;表达式的值是0ACH,其他运算符,属性分离运算符(SEG、OFFSET、TYPE、LENGTH、SIZE)属性定义运算符(PTR、THIS、SHORT、HIGH、LOW、“:”)以及()、MASK、WIDTH。,SEG,SEG返回其后变量或标号所在段的段地址。,OFFSET,OFFSET返回其后变量或标号的偏移地址。,DATASEGMENTBUFADW367BH,2845H,0A78H,9DE3H,0F6BH,6532HCOUNTEQU($-BUFA)/2BUFBDWCOUNTDUP(?)DATAENDSMOVAX,SEGBUFAMOVDS,AXMOVSI,OFFSETBUFAMOVDI,OFFSETBUFB,TYPE返回其后变量或标号的类型。,例如:在下面的数据段中。DATASEGMENTADB87H,45H,92HBDW34D6H,0F67HCDD?DATAENDS若在代码段中有如下指令:MOVAH,TYPEAMOVAL,TYPEBMOVCH,TYPEC则将被汇编成:MOVAH,1MOVAL,2MOVCH,4,LENGTH,例如:在下面的数据段中。DATASEGMENTBUFADW367BH,2845H,0A78H,9DE3H,0F6BH,6532HCOUNTEQU($-BUFA)/2BUFBDWCOUNTDUP(?)DATAENDS若在代码段中有如下两条指令MOVCX,LENGTHBUFAMOVDX,LENGTHBUFB则将被汇编成:MOVCX,1MOVDX,6,SIZE,例如:在下面的数据段中。DATASEGMENTBUFADW367BH,2845H,0A78H,9DE3H,0F6BH,6532HCOUNTEQU($-BUFA)/2BUFBDWCOUNTDUP(?)DATAENDS若在代码段中有如下两条指令MOVCX,SIZEBUFAMOVDX,SIZEBUFB则将被汇编成:MOVCX,2MOVDX,12,PTR和THIS,PTR用来指明某个变量、标号或地址的类型属性,使它临时具有与原定义所不同的类型属性,但保持他们原来的段属性和偏移属性不变。PTR的使用格式为:类型PTR表达式其中,表达式的类型可以是BYTE、WORD、DWORD、NEAR、FAR等。,例如,DATASEGMENTADB87H,45H,92HBDW34D6H,0F67HCDD?DATAENDSMOVAX,WORDPTRAMOVBL,BYTEPTRB,例如:MOVSI,30H,若将上述指令的操作数改为字操作数,则指令为:MOVWORDPTRSI,30H或者:MOVSI,WORDPTR30H若将上述指令的操作数改为字节操作数,则指令为:MOVBYTEPTRSI,30H或者:MOVSI,BYTEPTR30H,SHORT,SHORT表示转移指令的目标地址属性是短转移,即目标地址与本指令之间的字节距离在-128127之间。例如:JMPSHORTLOP2,HIGH和LOW,HIGH选取表达式计算结果的高8位。LOW选取表达式计算结果的低8位。例如:HIGH0F25AH的值是0F2HLOW0F25AH的值是5AH,段前缀运算符:,运算符“:”用于临时给变量、标号或地址指定一个段属性,且只在所出现的语句中有效,“:”并不改变地址的偏移地址属性和类型属性。例如:MOVSI,AX指令的功能是将AX寄存器的值存放到数据段DS中偏移地址为(SI)的字单元中,假如需要将将AX寄存器的值存放到附加数据段ES中偏移地址为(SI)的字单元中,则要在SI的前面加段前缀ES。指令改为:MOVES:SI,AX,运算符的优先级如表2-5所示。,2.2寻址方式,在指令中,指定操作数或操作数地址的方法称为寻址方式。操作数的各种寻址方式是汇编语言进行程序设计的基础,必须熟练掌握。,2.2.1立即寻址,立即寻址是指操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,立即数紧跟在操作码之后,与操作码一起存放在代码段中。如果立即数为16位,则立即数的存放规则是高字节存放在高地址,低字节存放在低地址。立即数寻址方式通常用于给寄存器或内存单元赋初值。,例如:阅读以下各条指令,掌握立即寻址方式的用法。MOVAL,80HMOVBX,0A683HMOVX,20H;X是字节变量MOVY,3456H;Y是字变量,实际上,在汇编语言程序设计中,还经常使用符号常数作为立即操作数。比如,假设COUNT是在程序中定义的一个符号常数,它代表一组数据的个数,则将该组数据的个数送入CX寄存器的指令如下:MOVAX,COUNT上述指令中的源操作数COUNT是立即寻址方式。,汇编语言规定:在单操作数指令中,立即数不能作为指令中的操作数。在双操作数指令中,立即数只能作为源操作数,不能作为目的操作数。,2.2.2寄存器寻址,寄存器寻址是指指令所需要的操作数存放在某一个寄存器中。指令中使用的寄存器可以是8位寄存器,也可以是16位寄存器。8位寄存器有:AH、AL、BH、BL、CH、CL、DH和DL。16位寄存器有:AX、BX、CX、DX、SI、DI、SP、BP和段寄存器等。指令中指定的寄存器即可以做为源操作数,也可以做为目的操作数,或同时出现在源操作数和目的操作数的位置上。,例如:阅读以下各条指令的功能,掌握寄存器寻址方式的用法。MOVBH,80hMOVAX,6AB4HMOVMAX,AX;MAX是字变量MOVCX,COUNT;COUNT是符号常数MOVAX,BXMOVDL,BL,说明:在双操作数指令中,如果源操作数和目的操作数都是寄存器寻址,则它们必须同时是8位寄存器,或同时是16位寄存器。例如,下面的指令是错误的。MOVAX,BL,2.2.3存储器寻址,存储器寻址是指指令所需要的操作数存放在内存中,在指令中给出操作数地址的方式。存储器寻址根据指令中给出的操作数地址的形式不同又分为直接寻址、寄存器间接寻址、变址寻址、基址加变址寻址、相对基址加变址寻址。,直接寻址,直接寻址方式是指操作数的偏移地址在指令中直接给出。例如:MOVAX,200H假设数据段的段地址DS1500H,(15200H)字单元的值是876AH,问执行指令后,相关寄存器及存储单元的值是什么?答:EA200H。PA(DS)*16EA15000H200H15200H。,指令的执行过程如图2-2所示。,2寄存器间接寻址,寄存器间接寻址是指操作数的偏移地址在BX、BP、SI和DI四个寄存器之一。(1)当以BX、SI或DI寄存器进行间接寻址时,操作数的物理地址由DS中的段地址与BX、SI或DI中的偏移地址构成。(2)当以BP寄存器进行间接寻址时,操作数物理地址由SS中的段地址与BP中的偏移地址构成。,例如:MOVAX,BX,假设该指令执行之前,DS2000H,AX54C8H,BX0300H,存储单元20300H的内容是6A9BH。问执行指令后,相关寄存器及存储单元的值是什么?源操作数的地址为:EA(BX)0300HPA(DS)*16EA2000H*160300H20300H。,指令的执行过程如图2-3所示。,3变址寻址,变址寻址是指操作数的偏移地址是BX、BP、SI、DI之一的值和一个8位或16位偏移量之和。指令中给出的8位或16位偏移量用补码表示。在计算操作数的偏移地址时,如果偏移量是8位,则进行符号扩展成16位。(1)当以BX、SI或DI寄存器进行间接寻址时,操作数物理地址由DS中的段地址与BX、SI或DI中的偏移地址构成(2)当以BP寄存器进行间接寻址时,操作数物理地址由SS中的段地址与BP中的偏移地址构成。,例如:MOVBX,SI200H,假设该指令执行之前,DS2000H,BX6874H,SI1000H,存储单元21200H的内容是1B43H。问执行指令后,相关寄存器及存储单元的值是什么?指令中的源操作数是变址寻址,源操作数的地址为:EA(SI)200H1000H200H1200HPA(DS)*16EA2000H*161200H21200H。,指令的执行过程如图2-4所示。,4基址加变址寻址,基址加变址寻址是指操作数的偏移地址是一个基址寄存器BX、BP的值和一个变址寄存器SI、DI的值之和。(1)当以BX作为基址寄存器时,操作数物理地址由DS中的段地址与SI或DI中的偏移地址构成。(2)当以BP作为基址寄存器时,操作数物理地址由SS中的段地址与SI或DI中的偏移地址构成。,例如:MOVAX,BXSI,假设该指令执行之前,DS2000H,AX6528H,BX0500H,SI0300H,存储单元20800H的内容是7B46H。问执行指令后,相关寄存器及存储单元的值是什么?由于指令中的源操作数是基址加变址寻址,故源操作数的地址为:EA(BX)(SI)0500H0300H0800HPA(DS)*16EA2000H*160800H20800H。,指令的执行过程如图2-5所示。,5相对基址加变址寻址,相对基址加变址寻址是指操作数的偏移地址是一个基址寄存器BX、BP的值加上一个变址寄存器SI、DI的值,再加上指令中的一个8位、16位偏移量之和。指令中给出的8位或16位偏移量用补码表示。在计算有效地址时,如果偏移量是8位,则进行符号扩展成16位。(1)当以BX作为基址寄存器时,操作数物理地址由DS中的段地址与SI或DI中的偏移地址构成。(2)当以BP作为基址寄存器时,操作数物理地址由SS中的段地址与SI或DI中的偏移地址构成。,例如:MOVAX,BXSI1000H,假设该指令执行之前,DS2000H,AX6528H,BX0500H,SI0300H,存储单元21800H的内容是0B874H。问执行指令后,相关寄存器及存储单元的值是什么?源操作数的地址为:EA(BX)(SI)1000H0500H0300H1000H1800HPA(DS)*16EA2000H*161800H21800H。,指令的执行过程如图2-6所示。,例2-3将内存缓冲区中以BUFA开始的一组字数据传送到BUFB开始的内存区。,DATASEGMENTBUFADW367BH,2845H,0A78H,9DE3H,0F6BH,6532HCOUNTEQU($-BUFA)/2BUFBDWCOUNTDUP(?)DATAENDSSTACKSEGMENTSTACKDB200DUP(?)STACKENDSCODESEGMENTASSUMEDS:DATA,SS:STACK,CS:CODESTART:MOVAX,DATAMOVDS,AX,MOVSI,0MOVDI,0MOVCX,COUNTLOP:MOVAX,BUFASIMOVBUFBDI,AXINCSIINCSIINCDIINCDIDECCXJNZLOPMOVAH,4CHINT21HCODEENDSENDSTART,关于寻址方式的几点说明:,对于单操作数指令,操作数可以使用除立即寻址方式之外的各种寻址方式。对于双操作数指令,源操作数可以使用各种寻址方式,目的操作数可以使用除立即寻址方式之外的各种寻址方式,但源操作数和目的操作数不能同时采用存储器寻址方式。,立即寻址和直接寻址在表现形式上的区别是是否带有,寄存器寻址和寄存器间接寻址在表现形式上的区别也是是否带有。带有的操作数属于存储器操作数,内的值表示存储器操作数的偏移地址。,存储器寻址方式有多种等价的书写形式,如表2-6所示。,在存储器寻址方式中,通常根据寄存器BX、BP、SI、DI使用隐含规定的段寄存器,其中使用BX、SI、DI寄存器时段寄存器是DS,使用BP寄存器时段寄存器是SS。,实际上,操作数也可以存放在其他段中,比如:附加的数据段、堆栈段、代码段。如果操作数存放在其他段,如附加的数据段ES,则计算物理地址时,段寄存器就不能使用DS,而应该使用ES,并通过使用段前缀的方式在指令中给出。例如:MOVES:SUM,AX,2.3常用伪指令,数据定义伪指令:DB、DW、DD、DQ、DT符号定义伪指令:EQU、LABEL段定义伪指令:SEGMENTENDS、ASSUME、END过程定义伪指令:PROCENDP宏定义伪指令:MACROENDM等条件汇编伪指令:IFENDIF等模块通信伪指令:PUBLIC、EXTRN结构定义伪指令:STRUCENDS记录定义伪指令:RECORD其他伪指令:NAME、TITLE、ORG、EVEN等,伪指令语句的一般格式:名字伪指令助记符操作数1,操作数2,;注释,2.3.1数据定义伪指令,数据定义伪指令可以是:DB、DW、DD、DQ、DT。DB:用来定义字节类型的变量,DB定义的每个操作数都占用1个字节单元。DW:用来定义字类型的变量,DW定义的每个操作数都占用1个字单元。DD:用来定义双字类型的变量,DD定义的每个操作数都占用2个字单元。DQ:用来定义八个字节类型的变量,DQ定义的每个操作数都占用8个字节单元。DT:用来定义十个字节类型的变量,DT定义的每个操作数都占用10个字节单元。,例如:定义数值常数和字符串常数,DATASEGMENTCON1DB56H,89H,0A3H,0BCHCON2DW7865H,0B34DHCON3DD897632BDHCON4DBpleaseinput:DATAENDS,2.3.2符号定义伪指令,符号定义伪指令可用来给汇编语言程序中的常数、表达式、变量、标号、指令助记符或寄存器等重新定义一个名字,或者改变变量、标号的属性,从而给程序设计带来更大的灵活性。符号定义伪指令主要有EQU、LABEL。,1定义符号常数,(1)EQU格式:符号常数EQU表达式(2)格式:符号常数表达式说明:EQU定义的符号常数不能重复定义,而用“”定义的符号常数可以重复定义。,例如:AEQU20BEQUA*25COUNTEQU($-BUFA)/2例如:A20AA*25,2定义变量或标号,(1)定义变量格式:变量LABEL变量类型说明:格式中的变量类型常用BYTE、WORD、DWORD,分别表示字节类型、字类型、双字类型。,(2)定义标号格式:标号LABEL标号类型说明:格式中的标号类型使用NEAR、FAR,分别表示近类型、远类型。功能:给跟在LABEL伪指令后面的指令存储单元定义一个标号,该标号的类型属性在格式中指定,标号的段地址和偏移地址属性与指令存储单元的段地址和偏移地址相同。,2.3.3段定义伪指令,为了实现程序的分段设计,宏汇编程序MASM提供了按段组织程序的一组伪指令,它们是SEGMENTENDS、ASSUME、END等。,1SEGMENT和ENDS、,段定义伪指令的格式为:段名SEGMENT定位属性组合属性类别段名ENDS功能:定义程序中的一个逻辑段。,2ASSUME,格式:ASSUME段寄存器:段名,功能:用来设定段寄存器与逻辑段之间的对应关系。程序中使用ASSUME后,宏汇编程序就将与段寄存器对应的逻辑段作为当前段。ASSUME一般出现在代码段的开始。,3END伪指令,格式:END标号功能:结束汇编。,2.3.3其他常用的伪指令1NAME伪指令,格式:NAME程序名功能:将程序名作为源程序目标模块的名字。NAME伪指令通常放在源程序的开始,在输出汇编语言源程序的列表文件中,在每一页的开头输出该程序名。若源程序中省略NAME伪指令,则汇编程序将源文件名作为目标模块的名字。,2TITLE伪指令,格式:TITLE标题名功能:同NAME伪指令的功能。将标题名作为源程序目标模块的名字。标题名最多60个字符,但汇编程序只将前6个字符作为目标模块名。,3ORG伪指令,格式:ORG表达式功能:将数据或指令代码从ORG伪指令中指定的偏移地址处开始存放。表达式的值表示偏移地址,取值范围为00FFFFH或065535。当程序中不使用ORG伪指令时,数据或指令代码从段的开始位置连续存放。,DATASEGMENTBUFADW367BH,2845H,0A78H,9DE3H,0F6BH,6532HCOUNTEQU($-BUFA)/2ORG100HBUFBDWCOUNTDUP(?)DATAENDS,4EVEN伪指令,格式:EVEN功能:将数据或指令代码从偶地址处开始存放。DATASEGMENTTAB1DB48H,0A2H,98H,0BEH,87HEVENTAB2DW0B7639H,19F6HDATAENDS,2.4I/O功能调用,DOS操作系统和ROMBIOS分别提供了一系列功能调用,作为汇编语言处理I/O操作的接口,程序员可以很方便的通过调用这些功能实现字符及字符串的输入输出。,2.4.1常用的DOS系统功能调用,DOS系统功能调用的方法:AH功能号设置入口参数INT21H,1屏幕显示一个字符(2号调用),调用格式:MOVAH,2MOVDL,字符的ASCII码INT21H,例如:输出字符9,需要将字符9的ASCLL码39H存放在DL寄存器里。MOVAH,2MOVDL,39HINT21H,2打印一个字符(5号调用),调用格式:MOVAH,5MOVDL,字符的ASCII码INT21H,例如:打印字符A,需要将字符A的ASCII码41H存放在DL寄存器里。MOVAH,5MOVDL,41HINT21H,3屏幕显示一个字符串(9号调用),调用格式:MOVAH,9MOVDX,字符串的首地址(偏移地址)INT21H,4.键盘输入一个字符(1号调用),调用格式:MOVAH,1INT21H,5.键盘输入一个字符但不回显(8号调用),调用格式:MOVAH,8INT21H,6.键盘输入字符串(10号调用),格式:MO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 甲乙丙合作协议合同范本
- 村级修桥安全协议书范本
- 顺义活塞机采购合同范本
- 股权转让合同的解除协议
- 私人财产投资协议书范本
- 汽修店工人雇佣合同范本
- 股东退休强制退股协议书
- 浙江小型仓库租赁协议书
- 自建房模具出售合同范本
- 水稻种植托管服务协议书
- 皮肤性病学(第9版)教学课件:第十六章 药疹
- 环氧地坪施工合同
- WS 444.2-2014医疗机构患者活动场所及坐卧设施安全要求第2部分:坐卧设施
- GB/Z 40637-2021古籍印刷通用字规范字形表
- GB/T 3608-2008高处作业分级
- 2023年涉县水库投资管理运营有限公司招聘笔试题库及答案解析
- 管理学原理(南大马工程)
- 律师事务所招投标书
- 绿化项目设备配置方案
- 安徽硅宝有机硅新材料有限公司年产8500吨偶联剂项目环境影响报告书
- 国际技术转让合同(中英文对照)
评论
0/150
提交评论