微机原理课件第四章宏汇编语言程序设计

上传人:xt****7 文档编号:167225185 上传时间:2022-11-02 格式:PPT 页数:162 大小:984.50KB
收藏 版权申诉 举报 下载
微机原理课件第四章宏汇编语言程序设计_第1页
第1页 / 共162页
微机原理课件第四章宏汇编语言程序设计_第2页
第2页 / 共162页
微机原理课件第四章宏汇编语言程序设计_第3页
第3页 / 共162页
资源描述:

《微机原理课件第四章宏汇编语言程序设计》由会员分享,可在线阅读,更多相关《微机原理课件第四章宏汇编语言程序设计(162页珍藏版)》请在装配图网上搜索。

1、第四章第四章 宏汇编语言程序设计宏汇编语言程序设计 汇编语言是利用指令的助记符、符号地址、汇编语言是利用指令的助记符、符号地址、标号来编写的语言,它是机器语言的符号表示,标号来编写的语言,它是机器语言的符号表示,是较低级的语言。是较低级的语言。利用汇编语言编写的程序称为利用汇编语言编写的程序称为汇编语言源程汇编语言源程序序,上一章讲到的指令系统中的每条指令都是构,上一章讲到的指令系统中的每条指令都是构成源程序的基本语句。但机器不能识别源程序,成源程序的基本语句。但机器不能识别源程序,要通过汇编程序翻译成二进制代码的浮动目标程要通过汇编程序翻译成二进制代码的浮动目标程序,然后由连接程序将目标文件

2、与库文件相连,序,然后由连接程序将目标文件与库文件相连,最后得到可执行的程序,才可在机器上直接运行。最后得到可执行的程序,才可在机器上直接运行。基本概念:基本概念:汇编语言:用指令的助记符、符号地址、标号汇编语言:用指令的助记符、符号地址、标号 等来编写的语言。等来编写的语言。汇编语言源程序:用汇编语言编写的程序(汇编语言源程序:用汇编语言编写的程序(*.asm)有两种语句格式:有两种语句格式:指令性语句:汇编时翻译成目标代码(机器码),指令性语句:汇编时翻译成目标代码(机器码),占代码段空间。占代码段空间。指示性语句(伪指令):汇编时,不产生目标代指示性语句(伪指令):汇编时,不产生目标代码

3、,只是为汇编程序提供信息,不占代码段空间。码,只是为汇编程序提供信息,不占代码段空间。汇编程序:将汇编语言源程序翻译成目标目标程汇编程序:将汇编语言源程序翻译成目标目标程序(代码),这个翻译过程称为汇编,翻译软件就序(代码),这个翻译过程称为汇编,翻译软件就叫汇编程序。叫汇编程序。用用户户编编辑辑*.a as sm m生生成成生生成成生生成成通通过过通通过过汇汇编编程程序序*.o ob bj j连连接接程程序序*.E EX XE E汇编过程汇编过程 一个完整的汇编语言的语句由下列几部分组成:一个完整的汇编语言的语句由下列几部分组成:标号和变量、指令助记符、界符、常数和注释,所标号和变量、指令助

4、记符、界符、常数和注释,所有这些都称为标记。有这些都称为标记。4-1 汇编语言的标记汇编语言的标记一、标号和变量一、标号和变量 表示指令性语句的符号地址或表示一个数据单表示指令性语句的符号地址或表示一个数据单元的符号地址。元的符号地址。对标号或变量要注意以下几点:对标号或变量要注意以下几点:标号或变量可以由数字、字母、下划线或其它特标号或变量可以由数字、字母、下划线或其它特殊字符组成。殊字符组成。标号或变量不能以数字开头,但可出现在标号的标号或变量不能以数字开头,但可出现在标号的其它地方。其它地方。标号或变量最大长度不能超过标号或变量最大长度不能超过31个字符。个字符。例、例、START:MO

5、V AX,0;标号标号 NEW DB GOOD;变量变量 二、指令助记符二、指令助记符指出指令的性质(功能)指出指令的性质(功能)三、界符三、界符作为一个程序中或一条指令中两个部分的分作为一个程序中或一条指令中两个部分的分隔符号用。隔符号用。例、例、MOV AX,BX ADD AL,CL例、例、MOV AX,BXNEW DB 12H,23H,34HXY DB COMPUTERMOV AX,5/3可用的界符有:可用的界符有:,;,;+-*/:=()$&?.四、常数四、常数二进制:二进制:01001101B十进制:十进制:2000或或2000D八进制:八进制:1700Q十六进制:十六进制:1200

6、H,0FFH串常数:串常数:ABCD 五、注释五、注释 用用;开头后面的内容可随意,用来增加程序可开头后面的内容可随意,用来增加程序可读性的。读性的。表达式由运算对象和运算符组成,在汇编时由表达式由运算对象和运算符组成,在汇编时由汇编程序对它进行运算,运算结果作为一个语句中汇编程序对它进行运算,运算结果作为一个语句中的操作数来使用。的操作数来使用。4-2 汇编语言中的表达式汇编语言中的表达式运算对象:常数、标号或变量运算对象:常数、标号或变量算术运算符算术运算符逻辑运算符逻辑运算符关系运算符关系运算符运算符:运算符:数值返回运算符数值返回运算符修改属性运算符修改属性运算符其它运算符其它运算符一

7、、算术运算符一、算术运算符 有:有:+、-、*、/、MOD(模,即取除法运算结(模,即取除法运算结果之余数)、果之余数)、SHL(左移,左移(左移,左移1位相当于乘位相当于乘2)、)、SHR(右移,右移(右移,右移1位相当于除以位相当于除以2)。)。所有的算术运算符均可以对数据进行运算,运所有的算术运算符均可以对数据进行运算,运算对象与运算结果都是整数。若对地址运算,通常算对象与运算结果都是整数。若对地址运算,通常是在标号上加是在标号上加/减某一个值,例减某一个值,例DA1+2、K2-4各表示各表示一个存储单元的地址,对地址乘是没有意义的。一个存储单元的地址,对地址乘是没有意义的。例例4-2

8、数组数组ARRAY的定义如下:的定义如下:ARRAY DB 1,2,3,4,5,6,7,8 TRY DB 20 指令为:指令为:MOV AX,30*5MOV CX,(,(TRY-ARRAY);数组长度);数组长度CX 两变量偏移地址之差两变量偏移地址之差 汇编时,计算表达式形成指令为:汇编时,计算表达式形成指令为:MOV AX,150MOV CX,8例例4-3 源程序指令格式如下:源程序指令格式如下:DA EQU 300MOV AX,DA-80MOV BX,DA MOD 100MOV CX,DA/100MOV DH,01100100B SHR 2汇编成:汇编成:MOV AX,240汇编成:汇编

9、成:MOV BX,0汇编成:汇编成:MOV CX,3汇编成:汇编成:MOV DH,00011001B二、逻辑运算符二、逻辑运算符有:有:AND(与)、(与)、OR(或)、(或)、NOT(非)、(非)、XOR(异或),逻辑运算符是按位运算的,只(异或),逻辑运算符是按位运算的,只能对常数进行运算,得到结果也是常数。能对常数进行运算,得到结果也是常数。例例4-4 MOV AL,NOT 0FFHMOV BL,8CH AND 73HMOV AH,8CH OR 73HMOV CH,8CH XOR 73H汇编成:汇编成:MOV BL,0汇编成:汇编成:MOV AL,0汇编成:汇编成:MOV AH,0FFH

10、汇编成:汇编成:MOV CH,0FFH例例4-5 IN AL,PORT AND DX,PORT AND 0FEH OUT DX,AX前一个前一个AND是指令助记符,而后一个是指令助记符,而后一个AND是是逻辑运算符。逻辑运算符。逻辑运算符与逻辑运算符与8086指令系统中的指令助记指令系统中的指令助记符符AND、OR、XOR、NOT符号完全相同,符号完全相同,但两者是不会混淆的。作为但两者是不会混淆的。作为MASM的运算符的运算符是在汇编过程中进行计算的,而指令助记符是在汇编过程中进行计算的,而指令助记符是在程序执行时进行运算的。是在程序执行时进行运算的。三、关系运算符三、关系运算符 有:有:E

11、Q(相等)、(相等)、NE(不等)、(不等)、LT(小于)、(小于)、GT(大于),(大于),LE(小于或等于)、(小于或等于)、GE(大于或等于)。(大于或等于)。关系运算符的两个操作数必须是数据,关系运算符的两个操作数必须是数据,或是同一段内的两个存储单元的地址。进行或是同一段内的两个存储单元的地址。进行关系运算的比较操作后,结果是一个数值,关系运算的比较操作后,结果是一个数值,若结果为真,输出若结果为真,输出全全1,即,即FFH(8位)或位)或FFFFH(16位)。若结果为假,输出全位)。若结果为假,输出全0。例例4-6 MOV AX,10H GT 16 MOV BL,6 EQ 0110

12、B MOV CX,12H GE 12由于表达式由于表达式10H GT 16为假所以汇编成:为假所以汇编成:MOVAX,0由于表达式由于表达式6 EQ 0110B为真所以汇编成:为真所以汇编成:MOVBL,0FFH注意:注意:MOV BL,1 由于表达式由于表达式12H GE 12 为真所以汇编成:为真所以汇编成:MOVCX,0FFFFH注意:注意:MOV CX,1 四、数值返回运算符四、数值返回运算符数值返回运算符也经常称作分析运算符数值返回运算符也经常称作分析运算符有:有:OFFSET、SEG、TYPE、LENGTH、SIZE 5种,它们加在变量或标号前,返回运种,它们加在变量或标号前,返回

13、运算对象的某个参数值,例如偏移地址值、段算对象的某个参数值,例如偏移地址值、段地址值、类型属性、变量包含的单元数等。地址值、类型属性、变量包含的单元数等。1.OFFSET格式:格式:OFFSET 变量或标号变量或标号OFFSET 返回标号或变量的偏移地址值。返回标号或变量的偏移地址值。例例4-7 DDD:MOV AX,BX;标号;标号 MOV BX,OFFSET DDD ARRAY DB 1,2,3,4;变量;变量 MOV BX,OFFSET ARRAY LEA BX,ARRAY2.SEG格式:格式:SEG 变量或标号变量或标号SEG 返回标号或变量的段地址值。返回标号或变量的段地址值。例例4

14、-8 DDD:MOV AX,BX;标号;标号 MOV AX,SEG DDD MOV CS,AXARRAY DB 1,2,3,4;变量;变量 MOV AX,SEG ARRAY MOV DS,AX3.TYPE格式:格式:TYPE 变量或标号变量或标号TYPE加在变量前,返回变量的类型属性。加在变量前,返回变量的类型属性。类型类型返回返回DB1 1DW2 2DD4 4DQ8 8DT1010NEARFFH或FFFFH(-1)FFH或FFFFH(-1)FARFEH或或FFFEH(-2)变量变量标号标号TYPE加在标号前,返回标号的距离属性。加在标号前,返回标号的距离属性。类型类型返回返回DB1 1DW2

15、 2DD4 4DQ8 8DT1010NEARFFH或FFFFH(-1)FFH或FFFFH(-1)FARFEH或或FFFEH(-2)变量变量标号标号例例4-9 A1 DB 1,2,3;变量;变量A2 DW 1234H;变量;变量A3 DD 6 DUP(?);变量(?);变量 L1:MOV AH,TYPE A1;标号;标号MOV BH,TYPE A2MOV CH,TYPE A3MOV DH,TYPE L1MOV DX,TYPE L1汇编成:汇编成:MOVAH,1汇编成:汇编成:MOVBH,2汇编成:汇编成:MOVCH,4汇编成:汇编成:MOVDH,0FFH汇编成:汇编成:MOVDX,0FFFFH4

16、.LENGTH格式:格式:LENGTH 变量变量当变量中使用当变量中使用DUP时,时,LENGTH返回此变返回此变量所包含的量所包含的单元数单元数,对其它变量则返回,对其它变量则返回1。例例4-10 M1 DW 100 DUP(?)(?)M2 DB 1,2,3,4M3 DW 1234H,12H,3456HMOV CX,LENGTH M1MOV BL,LENGTH M2MOV DL,LENGTH M3汇编成:汇编成:MOVCX,100 汇编成:汇编成:MOVBL,1 MOVBL,4 汇编成:汇编成:MOVDL,1 MOVDL,3 5.SIZE格式:格式:SIZE 变量变量SIZE加在变量前,返回

17、该变量包含的总字加在变量前,返回该变量包含的总字节数,节数,注意注意不能简单去数有多少个字节,而不能简单去数有多少个字节,而是利用公式是利用公式SIZE=LENGTHTYPE来计算。来计算。例例4-10 M1 DW 100 DUP(?)(?)M2 DB 1,2,3,4M3 DW 1234H,12H,3456HMOV CX,SIZE M1MOV BL,SIZE M2MOV DL,SIZE M3汇编成:汇编成:MOVCX,200 汇编成:汇编成:MOVBL,1 MOV BL,4 汇编成:汇编成:MOVDL,2 MOV DL,6 五、修改属性运算符五、修改属性运算符修改属性运算符也经常称作综合运算符

18、修改属性运算符也经常称作综合运算符有:有:段操作符段操作符、PTR、THIS、HIGH、LOW、SHORT 6种,可以在程序运行过程中,通种,可以在程序运行过程中,通过修改属性运算符来修改变量或标号的属性,过修改属性运算符来修改变量或标号的属性,包含段属性、偏移地址属性、类型属性等。包含段属性、偏移地址属性、类型属性等。1.段操作符段操作符格式:格式:段前缀:变量或地址表达式段前缀:变量或地址表达式段前缀有段寄存器段前缀有段寄存器CS、DS,ES,SS后跟冒号后跟冒号:,用来表示某个变量或地址被修改到哪个,用来表示某个变量或地址被修改到哪个段寄存器提供的段地址。段寄存器提供的段地址。例例4-1

19、2 MOV AX,BX ;DS:BXAX MOV AX,ES:BX;ES:BXAX2.PTR格式:格式:类型类型/距离:距离:PTR 变量或标号变量或标号功能:功能:是将是将PTR左边的类型属性赋给右边的左边的类型属性赋给右边的变量或标号。这样可以保证运算时操作数类变量或标号。这样可以保证运算时操作数类型的匹配,常与类型型的匹配,常与类型BYTE、WORD、DWORD、FAR、NEAR等连用。等连用。例例4-13N1 DB 12H,34HN2 DW 1122H,3344HLO:MOV AX,WORD PTR N1MOV BL,BYTE PTR N2例例4-14 MOV BX,10H MOV B

20、YTE PTRBX,10HMOV WORD PTRBX,12HMOV BX,ALMOV BX,AX这两条指令正确与否?这两条指令正确与否?JMP FAR PTR LO;修改标号的距离属性;修改标号的距离属性JMP NEAR PTR LO格式:变量或标号格式:变量或标号 EQU THIS 类型或距离类型或距离功能:功能:将类型或距离属性赋给变量或标号,将类型或距离属性赋给变量或标号,该变量或标号的段地址和偏移地址与下一个该变量或标号的段地址和偏移地址与下一个存储单元的地址相同。存储单元的地址相同。例例4-15 FIRST EQU THIS BYTE TABLE DW 200 DUP(?)(?)F

21、IRST的偏移地址值与的偏移地址值与TABLE的偏移地址值的偏移地址值相同,区别在于相同,区别在于FIRST变量为字节类型,而变量为字节类型,而TABLE为字类型。为字类型。例例4-16 SSP EQU THIS FAR MOV AX,200此时此时MOV AX,200前有标号前有标号SSP,并赋予,并赋予FAR属性,允许其它段的属性,允许其它段的JMP指令跳到本段指令跳到本段SSP标号地址处来。标号地址处来。相当于相当于 SP:MOV AX,200;SP是远标号是远标号格式:格式:SHORT 标号标号SHORT用来说明转移类指令中转向地址的用来说明转移类指令中转向地址的属性,指出转向的目标地

22、址与本指令之间的属性,指出转向的目标地址与本指令之间的距离在距离在-128+127之间,即限制在短转移范之间,即限制在短转移范围内。围内。例例4-17JMP SHORT L2L2:MOV AX,BX 和和LOW格式:格式:HIGH/LOW 变量或标号变量或标号HIGH和和LOW称为字节分离运算符,对一个称为字节分离运算符,对一个数或地址表达式,数或地址表达式,HIGH从中分离出高位字节从中分离出高位字节LOW从中分离出低位字节。从中分离出低位字节。例例4-18 K1 EQU 1234HK2 EQU 5678HMOV AH,HIGH K1MOV BL,LOW K2汇编成:汇编成:MOVAH,12

23、H 汇编成:汇编成:MOVBL,78H 六、其它运算符六、其它运算符有:有:、()()、.、MASK和和WIDTH等等七、优先级七、优先级表达式是常数、变量、标号和运算符的表达式是常数、变量、标号和运算符的组合,在计算表达式时,应按优先级高低进组合,在计算表达式时,应按优先级高低进行计算,同时遵循同级运算从左到右的原则行计算,同时遵循同级运算从左到右的原则计算。计算。4-3 伪指令语句伪指令语句 伪指令语句没有对应的机器代码,并不伪指令语句没有对应的机器代码,并不像指令语句那样由像指令语句那样由CPU来执行,它是来执行,它是MASM汇编程序对源程序汇编期间进行处理的。主汇编程序对源程序汇编期间

24、进行处理的。主要完成变量定义、存储器分配、指示程序开要完成变量定义、存储器分配、指示程序开始和结束、段定义、段分配等。伪指令有以始和结束、段定义、段分配等。伪指令有以下几种类型:下几种类型:数据定义语句数据定义语句DB、DW、DD等等标号赋值语句标号赋值语句EQU、=段定义语句段定义语句SEGMENTENDS段分配语句段分配语句ASSUME过程定义语句过程定义语句PROCENDP程序开始结束语句程序开始结束语句ORG、END、NAME一、数据定义语句一、数据定义语句格式格式1:变量名:变量名 助记符助记符 操作数,操作数操作数,操作数格式格式2:变量名:变量名 助记符助记符 n DUP(操作数

25、,操作数(操作数,操作数)A1 DB 1,2,3A3 DB 5 DUP(1,2)功能功能:将操作数存入变量名指定的存储单元:将操作数存入变量名指定的存储单元中,或者只分配存储空间不存入数据。中,或者只分配存储空间不存入数据。变量名变量名它用符号表示,可以省略,作用它用符号表示,可以省略,作用与指令语句中的标号相同,但后面不跟冒号与指令语句中的标号相同,但后面不跟冒号:。汇编程序汇编时将此变量的助记符后。汇编程序汇编时将此变量的助记符后的第一个字节的偏移地址作为它的符号地址。的第一个字节的偏移地址作为它的符号地址。助记符助记符主要有:主要有:DB:用来定义字节,表示每个操作数占一个字节:用来定义

26、字节,表示每个操作数占一个字节DW:用来定义字,表示每个操作数占一个字:用来定义字,表示每个操作数占一个字DD:用来定义双字,表示每个操作数占两个字:用来定义双字,表示每个操作数占两个字DQ:用来定义四个字,表示每个操作数四个字:用来定义四个字,表示每个操作数四个字DT:用来定义:用来定义10个字节,表示每个操作数个字节,表示每个操作数10个字节个字节操作数操作数操作数可以是常数、字符串、变操作数可以是常数、字符串、变量、标号、表达式等,多个操作数之间必须量、标号、表达式等,多个操作数之间必须用逗号用逗号,隔开。隔开。例例4-21 操作数是常数或表达式操作数是常数或表达式DA1 DB 10H,

27、20HDA2 DW 1122H,34HDA3 DD 5*10H,1234H101020201111222200003434DA1DA1DA2DA21122H1122H0034H0034H505000000000000012123434DA3DA300000050H00000050H0000000000001234H00001234H例例4-22 操作数是字符串操作数是字符串FIRST DB HELLOSECOND DW OKTHIRD DB OK注意:注意:用用DW定义字符定义字符串时,只允许包含两个串时,只允许包含两个字符,多于两个字符时,字符,多于两个字符时,只能用只能用DB来定义。来定义

28、。48(H)48(H)45(E)45(E)4C(L)4C(L)4C(L)4C(L)4B(K)4B(K)4F(O)4F(O)FIRSTFIRST4F(O)4F(O)SECONDSECONDTHIRDTHIRD4F(O)4F(O)4B(K)4B(K)例例4-23 操作数用?定义不确定值的变量,用操作数用?定义不确定值的变量,用作保留存储空间,以便存放运算结果。作保留存储空间,以便存放运算结果。M1 DB?,?,?M2 DW 1234H,?,?M1M1M2M2?12123434例例4-24 操作数用操作数用DUP来定义重复变量来定义重复变量ONE DB 5 DUP(0)TWO DW 10 DUP(?

29、)(?)THREE DB 3 DUP(1,2)0000000000000000?0000ONEONE?TWOTWO?共10个字共10个字THREETHREE010102020101010102020202FOUR DB 2 DUP(1,3 DUP(10H););DUP 嵌套嵌套FOURFOUR01011010101001011010101010101010操作数是变量或标号:操作数是变量或标号:用伪指令用伪指令DW和和DD可以将变量或标号的可以将变量或标号的偏移地址存入存储器中,当用偏移地址存入存储器中,当用DD来定义时,来定义时,原变量或标号的偏移地址存入低位字中,原原变量或标号的偏移地址存

30、入低位字中,原变量或标号的段地址存入高位字中。变量或标号的段地址存入高位字中。例例4-25 PP DB 1,2,3;变量;变量PPAD1:MOV AX,BX;标号;标号AD1、AD2AD2:MOV BX,CXONE DW PP;将变量;将变量PP的偏移地址值赋给的偏移地址值赋给 ;字变量;字变量ONE TWO DW AD1;将标号;将标号AD1的偏移地址值赋的偏移地址值赋 ;给字变量给字变量TWOTHREE DD AD2;将标号;将标号AD2的偏移地址值的偏移地址值 和段地址值赋给双字变量和段地址值赋给双字变量THREE假设变量的假设变量的PP的偏移地址为的偏移地址为1000H,标号,标号AD

31、1的偏移地址为的偏移地址为2000H,标号,标号AD2的偏移地址为的偏移地址为3000H,段地址为,段地址为4000H。00001010000000002020303000004040ONEONETWOTWOTHREETHREEPP的偏移地址PP的偏移地址AD1的偏移地址AD1的偏移地址AD2的偏移地址AD2的偏移地址AD2的段地址AD2的段地址二、表达式赋值语句二、表达式赋值语句 表达式赋值语句有两种,赋值语句表达式赋值语句有两种,赋值语句EQU和等号语句和等号语句=,它们均不占用内存。,它们均不占用内存。1.赋值语句赋值语句EQU格式:符号名格式:符号名 EQU 表达式表达式功能:用来给变

32、量、标号、常数、指令、表功能:用来给变量、标号、常数、指令、表达式等定义一个符号名,程序中用到达式等定义一个符号名,程序中用到EQU左左边的变量、标号时可用右边的常数值或表达边的变量、标号时可用右边的常数值或表达式代替,但一经定义在同一个程序模块中就式代替,但一经定义在同一个程序模块中就不能重新定义。不能重新定义。例例4-27 COUNT EQU 100 DATA EQU COUNT+2 A1 EQU BX+SI B1 EQU OFFSET A1 C1 EQU ADD如果有以下指令,则代表:如果有以下指令,则代表:MOV AX,COUNT MOV AX,100MOV BX,DATA MOV B

33、X,102MOV AL,A1 MOV AL,BX+SIMOV AX,A1 MOV AX,BX+SIMOV BX,B1 MOV BX,OFFSET BX+SIC1 AX,BX ADD AX,BX 在在EQU语句右边表达式中有变量或标语句右边表达式中有变量或标号的表达式,必须先给它们定义,如号的表达式,必须先给它们定义,如DATA EQU COUNT+2必须先定义必须先定义COUNT,否则,否则汇编程序将指示出错。汇编程序将指示出错。PURGE语句可以解除对某一个标号的语句可以解除对某一个标号的赋值,使它在后面可以重新定义。赋值,使它在后面可以重新定义。PURGE C1 ;C1不再代替不再代替AD

34、D2.等号语句等号语句=等号语句等号语句=与与EQU语句具有相同功能,语句具有相同功能,区别在于区别在于EQU中左边的标号不允许重新定义,中左边的标号不允许重新定义,而用而用=定义的语句允许重新定义。定义的语句允许重新定义。例例4-28 COUNT=100COUNT=COUNT+10A1=BX+SIMOV AX,A1B1=ADDA1=BX MOV CX,A1三、段定义语句三、段定义语句 前面讲过,存储器的物理地址由段地址前面讲过,存储器的物理地址由段地址和偏移地址组合而成,任何一个逻辑段,无和偏移地址组合而成,任何一个逻辑段,无论是代码段,数据段,堆栈段,附加段,都论是代码段,数据段,堆栈段,

35、附加段,都必须进行段定义,以便连接程序把不同段和必须进行段定义,以便连接程序把不同段和模块连成一个可执行程序。此外还必须明确模块连成一个可执行程序。此外还必须明确段和段寄存器之间的关系,这可使用段分配段和段寄存器之间的关系,这可使用段分配语句来完成。语句来完成。1.段定义语句段定义语句 SEGMENTENDS格式:格式:段名段名 SEGMENT 定位类型定位类型 组合类型组合类型 分类名分类名 段名段名 ENDS功能:将一个逻辑段定义成一个整体。功能:将一个逻辑段定义成一个整体。段名段名 SEGMENT 定位类型定位类型 组合类型组合类型 分类名分类名 段名段名 ENDS段名段名是逻辑段的标识

36、符,不可省略,它确是逻辑段的标识符,不可省略,它确定了逻辑段在存储器中的地址,定了逻辑段在存储器中的地址,SEGMENT和和ENDS前的段名必须相同。前的段名必须相同。SEGMENTENDS是段定义的伪指令助是段定义的伪指令助记符。任何一个逻辑段必须以记符。任何一个逻辑段必须以SEGMENT开始,开始,ENDS结束,不可省略,并且必须成对出现,结束,不可省略,并且必须成对出现,两者之间是本逻辑段的内容。两者之间是本逻辑段的内容。SEGMENT后面可以带三个参数:定位类型、后面可以带三个参数:定位类型、组合类型、组合类型、分类名分类名,三个参数必须按格式,三个参数必须按格式中规定的次序排列,分类

37、名必须用单引号中规定的次序排列,分类名必须用单引号 括起来。三个参数用来增加类型及属性说明,括起来。三个参数用来增加类型及属性说明,一般情况下可以省略,如果需要用连接程序把一般情况下可以省略,如果需要用连接程序把本程序与其它程序相连时,需要用到这些参数。本程序与其它程序相连时,需要用到这些参数。(1)定位类型)定位类型定位类型参数是对该段起始地址定位。通定位类型参数是对该段起始地址定位。通常段名确定了该段的首地址,整个逻辑段存放常段名确定了该段的首地址,整个逻辑段存放在首地址开始的一片连续存储单元中。一般情在首地址开始的一片连续存储单元中。一般情况下各个逻辑段的首地址在况下各个逻辑段的首地址在

38、节节的整数边界的整数边界上(上(MASM把把1M字节的存储空间从字节的存储空间从0开始,每开始,每16个存储单元叫一节),即每个逻辑段的起始个存储单元叫一节),即每个逻辑段的起始地址是地址是16的整数倍(末的整数倍(末4位为位为0)。)。(1)定位类型)定位类型 实际使用时,可由定位类型参数来定位各实际使用时,可由定位类型参数来定位各逻辑段的首地址。定位类型参数主要有下面逻辑段的首地址。定位类型参数主要有下面4种:种:PARA指定定位段的起始地址必须在指定定位段的起始地址必须在节的整数边界,当定位类型参数缺省时,就节的整数边界,当定位类型参数缺省时,就当成当成PARA。BYTE指定该段起始地址

39、定位在存储指定该段起始地址定位在存储单元的任何字节地址。单元的任何字节地址。WORD指定该段起始地址定位在字的指定该段起始地址定位在字的边界,即段的首地址必须是偶数。边界,即段的首地址必须是偶数。PAGE指定该段起始地址定位在页的指定该段起始地址定位在页的边界,即段的首地址必须是边界,即段的首地址必须是256的整数倍。的整数倍。(2)组合类型)组合类型 组合类型参数主要提出了各个逻辑段之组合类型参数主要提出了各个逻辑段之间的组合方式,例各段独立、各段覆盖或顺间的组合方式,例各段独立、各段覆盖或顺序组合等。主要参数有以下序组合等。主要参数有以下6种:种:NONE该段与其他同名段不进行连接,该段与

40、其他同名段不进行连接,各段独立存在于存储器中,各段独立存在于存储器中,NONE可作为缺可作为缺省参数。省参数。PUBLIC该段与其它模块中的同名段该段与其它模块中的同名段连接时,由低地址到高地址连接起来,组成连接时,由低地址到高地址连接起来,组成一个逻辑段,连接次序由连接命令指定,连一个逻辑段,连接次序由连接命令指定,连接时满足定位类型要求。接时满足定位类型要求。COMMON该段在连接时与其它模块该段在连接时与其它模块中的同名有相同的起始地址,采用覆盖的方中的同名有相同的起始地址,采用覆盖的方式在存储器中存放,连接长度为各分段中最式在存储器中存放,连接长度为各分段中最大长度。大长度。AT 表达

41、式表达式定位该段的起始地址在表定位该段的起始地址在表达式所指定的节边界上,一般情况下各个逻达式所指定的节边界上,一般情况下各个逻辑段在存储器中的位置由系统自动分配,当辑段在存储器中的位置由系统自动分配,当用户要求某个逻辑段在指定节的边界上时,用户要求某个逻辑段在指定节的边界上时,就要用到就要用到AT参数来实现,参数来实现,AT不能用来指定不能用来指定代码段。代码段。STACK指定该段为堆栈段,此参数在指定该段为堆栈段,此参数在堆栈段中不可省略,多个模块只需设置一个堆栈段中不可省略,多个模块只需设置一个堆栈段,各个模块中的堆栈段采用覆盖方式堆栈段,各个模块中的堆栈段采用覆盖方式组合,容量为各个模

42、块中所设置的最大堆栈组合,容量为各个模块中所设置的最大堆栈段容量。段容量。MEMORY定位该段与其它模块中的定位该段与其它模块中的同名段有相同的首地址,采用覆盖方式在存同名段有相同的首地址,采用覆盖方式在存储器中组合连接,其功能与储器中组合连接,其功能与COMMON参数参数类似,区别是第一个带类似,区别是第一个带MEMORY参数逻辑参数逻辑段覆盖在其它同名段的最上层,其它带此参段覆盖在其它同名段的最上层,其它带此参数的同名段按照数的同名段按照COMMON方式处理。方式处理。(3)分类名分类名段定义语句的第三个参数为分类名,必段定义语句的第三个参数为分类名,必须用单引号须用单引号 括起来,分类名

43、可选择不括起来,分类名可选择不超过超过40个字符的名称,主要作用是汇编程序个字符的名称,主要作用是汇编程序连接时将所有分类名相同的逻辑段组成一个连接时将所有分类名相同的逻辑段组成一个段组。段组。2.段分配语句段分配语句ASSUME 在在8086系统中存储器采用分段结构,各系统中存储器采用分段结构,各段容量段容量64K字节,用户可以设置多个逻辑段,字节,用户可以设置多个逻辑段,但只允许但只允许4个逻辑段同时有效,段分配语句个逻辑段同时有效,段分配语句用来完成将逻辑段分别定义成代码段、堆栈用来完成将逻辑段分别定义成代码段、堆栈段、数据段和附加段。段、数据段和附加段。ASSUME为伪指令助记符,放在

44、为伪指令助记符,放在代码段的开始,不可省略。提供给汇编程序,代码段的开始,不可省略。提供给汇编程序,说明当前代码段,数据段,堆栈段和附加段说明当前代码段,数据段,堆栈段和附加段4个如何定义。个如何定义。2.段分配语句段分配语句ASSUME格式:格式:ASSUME CS:段名,:段名,DS:段名,:段名,SS:段名,:段名,ES:段名:段名ASSUME为伪指令助记符,放在为伪指令助记符,放在代码段的开始,不可省略。提供给汇编程序,代码段的开始,不可省略。提供给汇编程序,说明当前代码段,数据段,堆栈段和附加段说明当前代码段,数据段,堆栈段和附加段4个如何定义。个如何定义。ASSUME后面有各段寄存

45、器的名后面有各段寄存器的名CS:,:,DS:,:,SS:,:,ES:,用来存放当前有效的:,用来存放当前有效的逻辑段的段地址,后面紧跟冒号逻辑段的段地址,后面紧跟冒号:及段及段名。各段寄存器之间用逗号名。各段寄存器之间用逗号,分开,段分开,段名必须是用段定义语句名必须是用段定义语句SEGMENTENDS定义过的名字。可以用定义过的名字。可以用ASSUME NOTHING取消前面由取消前面由ASSUME所指定的段所指定的段寄存器。寄存器。如:如:ASSUME ES:NOTHING4个逻辑段不一定全部要定义,通常代码个逻辑段不一定全部要定义,通常代码段和数据段是必须的,附加段可以省略。但段和数据段

46、是必须的,附加段可以省略。但当代码段中使用了串指令,必须设置附加段当代码段中使用了串指令,必须设置附加段作目标串基址用,附加段也可用来存放数据,作目标串基址用,附加段也可用来存放数据,增大数据段容量。增大数据段容量。由于由于ASSUME伪指令只指定某个段分伪指令只指定某个段分配给哪个寄存器,并将代码段的段地址自动配给哪个寄存器,并将代码段的段地址自动装入装入CS寄存器中而不能把其他段地址装入相寄存器中而不能把其他段地址装入相应的段寄存器中,所以在代码段的开始要有应的段寄存器中,所以在代码段的开始要有一段初始化程序完成这一工作。对于堆栈段一段初始化程序完成这一工作。对于堆栈段来说,除了将段地址装

47、入来说,除了将段地址装入SS寄存器外,还要寄存器外,还要将栈顶偏移地址装入堆栈指针寄存器将栈顶偏移地址装入堆栈指针寄存器SP中。中。例例4-29通过表转换指令来实现将通过表转换指令来实现将57的的7段显示段显示段码送到段码送到BX寄存器中。寄存器中。D1DATA SEGMENT ;数据段;数据段 TABLE DB 40H,79H,24H,30H,19H DB 12H,02H,78H,00H,18HD1DATA ENDSC1CODE SEGMENT;代码段;代码段 ASSUME CS:C1CODE,DS:D1DATASTART:MOV AX,D1DATA;将数据段地址;将数据段地址DSMOV D

48、S,AXMOV AL,5MOV BX,OFFSET TABLEXLAT TABLEMOV AH,ALMOV AL,7 (MOV BX,OFFSET TABLE)XLAT TABLEMOV BX,AXC1CODE ENDS END START四、过程定义语句四、过程定义语句 过程也称子程序。在主程序中,经常要过程也称子程序。在主程序中,经常要用到一些程序段,程序段的功能和结构相同,用到一些程序段,程序段的功能和结构相同,仅有一些变量赋值不同,此时可以将这些程仅有一些变量赋值不同,此时可以将这些程序段独立编写用过程定义语句进行定义,然序段独立编写用过程定义语句进行定义,然后在主程序中对它进行过程调

49、用。这样既节后在主程序中对它进行过程调用。这样既节省了内存空间,也便于进行模块化程序设计,省了内存空间,也便于进行模块化程序设计,使编程清晰,使用灵活。使编程清晰,使用灵活。格式:格式:过程名过程名 PROC 属性属性;过程内容;过程内容RET N 过程名过程名 ENDP 四、过程定义语句四、过程定义语句功能功能:定义一个过程,主程序可以用:定义一个过程,主程序可以用CALL指令调用它。指令调用它。过程名过程名是给所定义的过程取的名字,不是给所定义的过程取的名字,不可缺省。它是主程序调用指令的目的操作数,可缺省。它是主程序调用指令的目的操作数,即子程序入口的符号地址。像标号一样过程即子程序入口

50、的符号地址。像标号一样过程名具有三种属性:名具有三种属性:段属性:为该过程所在段的段地址。段属性:为该过程所在段的段地址。偏移地址属性:指该过程第一个字节与段偏移地址属性:指该过程第一个字节与段首址之间距离字节。首址之间距离字节。距离属性:为距离属性:为NEAR或或FAR。格式中的属。格式中的属性就是指距离属性,定义性就是指距离属性,定义NEAR允许过程在允许过程在段内调用,定义段内调用,定义FAR允许过程在段间调用,允许过程在段间调用,NEAR为缺省使用。为缺省使用。PROCENDP过程定义伪指令助记符,过程定义伪指令助记符,成对出现,不可缺省。二者前面有相同的过成对出现,不可缺省。二者前面

51、有相同的过程名,整个过程,整个过程内容包括在程名,整个过程,整个过程内容包括在PROCENDP之内。之内。RET N为过程内部的返回指令。过程为过程内部的返回指令。过程内部至少有一条内部至少有一条RET指令,它可以在过程的指令,它可以在过程的任何位置上,使过程返回到主程序调用它的任何位置上,使过程返回到主程序调用它的CALL指令之下一条指令。指令之下一条指令。RET NRET后面的后面的N为弹出值,可以为弹出值,可以缺省,缺省,N表示从过程返回后,堆栈中应有表示从过程返回后,堆栈中应有N个字节的值作废,个字节的值作废,N必须为正偶数。过程内必须为正偶数。过程内部可以有多个部可以有多个RET,表

52、示此过程具有多个返,表示此过程具有多个返回出口。回出口。在汇编语言源程序中,使用在汇编语言源程序中,使用CALL指令指令调用过程,过程调用允许嵌套和递归调用。调用过程,过程调用允许嵌套和递归调用。嵌套调用指在一个被调用的过程中,又调用嵌套调用指在一个被调用的过程中,又调用另一个过程;递归调用是指在一个被调用的另一个过程;递归调用是指在一个被调用的过程中,又调用了本身的过程。嵌套与递归过程中,又调用了本身的过程。嵌套与递归的深度由堆栈段的容量决定因为过程调用时的深度由堆栈段的容量决定因为过程调用时必须将当前的地址压入堆栈保护起来,使调必须将当前的地址压入堆栈保护起来,使调用返回时能返回到正确的返

53、回地址。另外在用返回时能返回到正确的返回地址。另外在子程序入口也有许多参数要保护,以免影响子程序入口也有许多参数要保护,以免影响主程序原来的运行状态。主程序原来的运行状态。例例4-30 近过程定义及调用格式近过程定义及调用格式CCODE SEGMENT ABC PROC NEAR RETABC ENDP CALL ABC CCODE ENDS例例4-31 远过程定义及调用格式远过程定义及调用格式C1CODE SEGMENT KKK PROC FAR RETKKK ENDP C1CODE ENDSC2CODE SEGMENT CALL KKK C2CODE ENDS例例4-32 过程嵌套调用格式

54、过程嵌套调用格式CCODE SEGMENT KKK PROC NEAR CALL LLL RETKKK ENDP LLL PROC NEAR RETLLL ENDPCCODE ENDS五、程序开始和结束语句五、程序开始和结束语句1.NAME格式:格式:NAME 程序名程序名功能:为源程序目标模块赋名字。功能:为源程序目标模块赋名字。2.TITLE格式:格式:TITLE 文本名文本名功能:将文本名赋给源程序目标模块作名字。功能:将文本名赋给源程序目标模块作名字。3.ORG格式:格式:ORG 表达式表达式功能功能:给汇编程序设置位置指针,指定下面:给汇编程序设置位置指针,指定下面语句的起始偏移地址

55、。语句的起始偏移地址。ORG是伪指令助记符,不可缺省。是伪指令助记符,不可缺省。表达式表达式给定的偏移地址值,表达式的计给定的偏移地址值,表达式的计算结果必须是正整数。一般情况下,段定义算结果必须是正整数。一般情况下,段定义语句语句SEGMENT指出了段的起点,偏移地址指出了段的起点,偏移地址为为0,段内各个语句或数据的地址由段地址开,段内各个语句或数据的地址由段地址开始依次类推可确定。当用户要求某条指令或始依次类推可确定。当用户要求某条指令或数据为某个指定地址时,可用数据为某个指定地址时,可用ORG语句来改语句来改变,变,ORG语句可以放在程序的任何位置。语句可以放在程序的任何位置。例例4-

56、33 用用ORG指定代码段起始地址指定代码段起始地址CODE SEGMENTORG 100H ASSUME CS:CODE,DS:DATASTART:;此代码段起始偏移地址为;此代码段起始偏移地址为100HMOV AX,DATACODE ENDS例例4-34 用用ORG改变数据段起始地址改变数据段起始地址DATA SEGMENTORG 100H A1 DB 1,2,3;A1偏移地址为偏移地址为100HORG 200HA2 DW 7,8,9;A2 偏移地址为偏移地址为200HDATA ENDS格式:格式:END 标号名标号名功能:标记汇编源程序结束功能:标记汇编源程序结束END是伪指令助记符,不

57、可缺省,放在是伪指令助记符,不可缺省,放在源程序的最后一行,每个模块只有一个源程序的最后一行,每个模块只有一个END。汇编程序到汇编程序到END语句停止汇编。语句停止汇编。标号名标号名是该程序中第一条可执行语句的是该程序中第一条可执行语句的标号名,可以缺省,若一个程序包含多个模标号名,可以缺省,若一个程序包含多个模块,块,END后面带的标号为主程序模块中的标后面带的标号为主程序模块中的标号名称。号名称。例例4-35CODE SEGMENTASSUME CS:CODE,DS:DATASTART:CODE ENDSEND START六、结构定义语句六、结构定义语句七、外部伪指令及对准伪指令七、外部

58、伪指令及对准伪指令1.外部伪指令外部伪指令 程序中包含多个模块时,有些程序或程序中包含多个模块时,有些程序或数据在各个模块间要相互共享,可用外部数据在各个模块间要相互共享,可用外部伪指令伪指令PUBLIC和和EXTRN来实现此功能。来实现此功能。其中其中PUBLIC用来定义共享模块,用来定义共享模块,EXTRN用来引用共享模块。用来引用共享模块。格式格式:PUBLIC 名称,名称,名称,名称,EXTRN 名称:类型,名称:类型,名称:类型,名称:类型,PUBLIC伪指令助记符,不可缺省。伪指令助记符,不可缺省。名称名称本语句的操作数,它是本模块中已本语句的操作数,它是本模块中已经定义过的变量、

59、标号或常数,可供其它模经定义过的变量、标号或常数,可供其它模块共享。块共享。EXTRN伪指令助记符,不可缺省。伪指令助记符,不可缺省。名称名称其它模块中用其它模块中用PUBLIC语句定义过语句定义过的变量、标号或常数,供本模块引用,不可的变量、标号或常数,供本模块引用,不可缺省。名称后面紧跟冒号缺省。名称后面紧跟冒号:。类型属性类型属性是指该名称应具有的属性,若是指该名称应具有的属性,若所定义的名称是变量,则类型为所定义的名称是变量,则类型为BYTE或或WORD;若名称是标号,则类型为;若名称是标号,则类型为NEAR或或FAR;若名称是常数,则类型为;若名称是常数,则类型为ABS。类型。类型属

60、性应与在其它模块中被定义时的属性相同。属性应与在其它模块中被定义时的属性相同。EXTRN语句的引用,必须与已用语句的引用,必须与已用PUBLIC语句定义过的名称相呼应。语句定义过的名称相呼应。例例4-42DATA SEGMENTA1 DB 10H,20HA2 DW 4 DUP(0)A3 EQU 1000HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATATMF LABEL FARPUBLIC A2,A3,TMF CODE ENDS模块模块CODE中定义共享资源中定义共享资源PDATA SEGMENTP1 DB 0AH,0BH

61、P2 DB 2 DUP(?)(?)PDATA ENDSPCODE SEGMENTEXTRN A2:WORD,A3:ABS,TMF:FARMAIN:MOV AX,PDATAMOV BX,OFFSET A2MOV CX,A3JMP TMF PCODE ENDSEND MAIN声明资源来自其它模块声明资源来自其它模块引用引用CODE模块中模块中A2、A3和和TMF。2.对准伪指令对准伪指令格式:格式:EVEN功能功能:EVEN伪指令使下一条语句的地址伪指令使下一条语句的地址调整为偶数。调整为偶数。EVEN直接放在某一语句前,直接放在某一语句前,汇编程序汇编时就会完成将地址调整在偶汇编程序汇编时就会完

62、成将地址调整在偶地址上。地址上。例例4-43XDATA SEGMENTORG 100HX1 DB 12HEVEN ;将变量;将变量X2的偏移的偏移 地址调整为地址调整为102HX2 DW 1122H,3344HXDATA ENDS100H102HX1X212H22H11H33H44H$:地址计数器,用来保存当前地址的偏移量。:地址计数器,用来保存当前地址的偏移量。例例4-44 ORG 1000HABC DW 1,2,$+4 DW 0AH,0DH,$+3ABC DW 1,2,1008H DW 0AH,0DH,100DH0101000002020000080810100A0A000000000D0

63、D0D0D10101000H1000H1004H1004H100AH100AH(相当于(相当于THIS伪指令)伪指令)LABLE伪指令给已定义的变量或标号伪指令给已定义的变量或标号取一个名字,并可重新定义它的类型属性,取一个名字,并可重新定义它的类型属性,使同一变量或标号在不同地方被引用时,可使同一变量或标号在不同地方被引用时,可采用不同的名字,具有不同的类型属性,这采用不同的名字,具有不同的类型属性,这样提高了程序的灵活性。样提高了程序的灵活性。格式:名称格式:名称 LABLE 类型属性类型属性名称名称为为LABLE语句下一行所使用的语句语句下一行所使用的语句中的变量或标号取的别名。中的变量

64、或标号取的别名。LABLE伪指令助记符,不可缺省。伪指令助记符,不可缺省。类型属性类型属性规定了所起别名的变量或标号规定了所起别名的变量或标号的类型,此别名与原变量或标号具有相同的的类型,此别名与原变量或标号具有相同的段地址和偏移地址。段地址和偏移地址。(1)LABLE与变量连用与变量连用LABLE与变量连用时,给下一个变量取一个与变量连用时,给下一个变量取一个别名,类型属性可修改成别名,类型属性可修改成BYTE、WORD等。等。例例4-45DATB LABEL BYTE;;(DATB为为DATW的别名,类型为字节)的别名,类型为字节)DATW DW 3031H,3233H;(DATW变量类型

65、为字)变量类型为字)MOV AL,DATBMOV BX,DATW+2例例4-46 堆栈段中经常使用堆栈段中经常使用LABLE。STACK SEGMENT STACK STACKDW 100 DUP(?)(?)TOP LABLE WORDSTACK ENDS 此处定义此处定义100个字的堆栈,个字的堆栈,TOP为栈底的为栈底的名,类型为字。名,类型为字。(2)LABLE与标号连用与标号连用 LABLE与标号连用时,给下一个语句定与标号连用时,给下一个语句定义的标号取一个别名,并可改变距离属性为义的标号取一个别名,并可改变距离属性为FAR或或NEAR。例例4-47DISF LABLE FARDIS

66、N:MOV AX,BX DISF和和DISN指向同一条指令,指向同一条指令,DISF是是DISN的别名,但距离属性改为的别名,但距离属性改为FAR,当其它,当其它代码段对它调用时,可以使用。代码段对它调用时,可以使用。4-4 DOS系统功能调用和系统功能调用和BIOS中断调用中断调用 和所有的计算机一样,微型计算机的硬和所有的计算机一样,微型计算机的硬件环境必须在操作系统的管理下,才能进行件环境必须在操作系统的管理下,才能进行工作。缺少操作系统的计算机,即所谓裸机,工作。缺少操作系统的计算机,即所谓裸机,是一个无生命的壳体。微机上所配的磁盘操是一个无生命的壳体。微机上所配的磁盘操作系统(作系统(Disk Operating System)简称)简称DOS或或MS-DOS。DOS向用户提供了许多命令及系统功能,向用户提供了许多命令及系统功能,其中命令有内部命令,如其中命令有内部命令,如DIR,TYPE,CD等,用户可以在等,用户可以在DOS提示符下键入这些命令提示符下键入这些命令来使用。另外有外部命令,如来使用。另外有外部命令,如PRINT、XCOPY、FORMAT等,用户也可以键入它们

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