1、第第6章章 汇编语言程序设计汇编语言程序设计 用汇编语言编程属结构化程序设计。用汇编语言编程属结构化程序设计。需按照结构化的思想来进行汇编程需按照结构化的思想来进行汇编程序的设计序的设计 分析题意,确定算法分析题意,确定算法 根据算法画出程序框图根据算法画出程序框图 根据框图编写程序根据框图编写程序 上机调试程序上机调试程序 执行程序执行程序按照自上而下的设计方法,设计一个汇编程序的步骤:按照自上而下的设计方法,设计一个汇编程序的步骤:顺序程序顺序程序 分支程序分支程序 循环程序循环程序从结构上来讲,一般的汇编程序可分为:从结构上来讲,一般的汇编程序可分为:Eg:从键盘输入一个字符并存储到字节
2、变从键盘输入一个字符并存储到字节变量量BUF单元中单元中.分析:分析:用用DOS功能调用完成键入,输入功能调用完成键入,输入 的字符保存在的字符保存在AL寄存器中寄存器中 将将AL中的内容存到定义在数据中的内容存到定义在数据 段的变量段的变量BUF所指单元中所指单元中 顺序程序设计顺序程序设计.486DATA SEGMENT USE16 BUF DB?DATA ENDS源程序清单:源程序清单:CODESEGMENT USE16 ASSUME CS:CODE,DS:DATABEG:MOV AX ,DATAMOV DS ,AXMOV AH ,1INT 21H ;AL=键入字符的键入字符的MOV B
3、UF,AL ASIIC码码MOV AH ,4CHINT 21HCODEENDSEND BEG 分支程序设计分支程序设计 转移指令可用来实现分支程序设计转移指令可用来实现分支程序设计分支程序分三种:分支程序分三种:简单分支简单分支 复合分支复合分支 多分支多分支 简单分支简单分支 即两路分支,该分支程序结构为:即两路分支,该分支程序结构为:条件满足否?条件满足否?程序段程序段1程序段程序段2YN Eg:Eg:将将BXBX寄存器的内容以二进制数格式显在寄存器的内容以二进制数格式显在屏幕上屏幕上BX=1110010011100110B 简单分支简单分支 RCLRCL0 0SALSALROLROLCF
4、CFCFCFCFCF 486CODE SEGMENT USE16 ASSUME CS:CODE BEG:MOV BX,5678H MOV CX,16 LAST:MOV AL,0 ROL BX,1 JNC NEXT MOV AL,1 NEXT:MOV AH,0EH INT 10H LOOP LAST MOV AH,4CH INT 21H CODE ENDS END BEG ADC AL,0 数数BX,16 CXBX,16 CXC C标标=?=?1AL1AL调调BIOS.0EHBIOS.0EHCX-1CXCX-1CXCX=0CX=00AL0ALBXBX左移一位左移一位10NY返返DOSDOS源程序
5、清单:源程序清单:复合分支复合分支判断的条件是复合条件,称复合判断判断的条件是复合条件,称复合判断 复合分支程序结构为:复合分支程序结构为:条件条件1和条件和条件2.满足否?满足否?程序段程序段1程序段程序段2YNEg:Eg:某科室某科室9人,统计月收入在人,统计月收入在800900间的人数,并用十进制数显示间的人数,并用十进制数显示 复合分支复合分支 分析:月收入是无符号数,对一批数处理应该用间址。分析:月收入是无符号数,对一批数处理应该用间址。数轴数轴:N1(800)N2(900)N1(800)N2(900)多分支多分支判断条件后有多个出口,判断一次只能选择判断条件后有多个出口,判断一次只
6、能选择一个分支。一个分支。多分支程序结构为:多分支程序结构为:1条件属哪种条件属哪种情况?情况?程序段程序段1程序段程序段n+m.程序段程序段nnn+m例例.多分支段内转移多分支段内转移要求:键入要求:键入0 0,转,转P0P0程序段程序段 键入键入1 1,转,转P1P1程序段程序段 键入键入9 9,转,转P9P9程序段程序段思路:思路:用比较指令配合直接转移指令实现用比较指令配合直接转移指令实现 CMP CMP 键入字符,键入字符,00 JE P0 JE P0 CMP CMP 键入字符,键入字符,11 JE P1 JE P1 用转移地址表配合间接转移指令实现用转移地址表配合间接转移指令实现
7、多分支多分支 486DATA SEGMENT USE16TAB DW P0,P1,P9;汇编后自动装入相应的偏移地址汇编后自动装入相应的偏移地址MESG DB 0DH,0AH,strike 09:$DATA ENDSCODE SEGMENT USE16 ASSUME CS:CODE,DS:DATABEG:MOV AX,DATA MOV DS,AXAGA:MOV AH,9 MOV DX,OFFSET MESG INT 21H MOV AH,1 INT 21H CMP AL,0 JC AGACMP AL,9JA AGASUB AL,30HMOVZX BX,ALADD BX,BX;2BXBXMOV
8、SI,OFFSET TABJMP BX+SI;DS:BX+SI IPP0:P1:P9:CODE ENDS END BEG 或或:MOV BX,BX+SI JMP BX ;BX IP源程序清单:源程序清单:循环程序设计循环程序设计循环程序的组成:循环程序的组成:循环准备循环准备 循环体循环体 循环控制循环控制1.1.循环程序的结构循环程序的结构Y Y预置循环次数预置循环次数其他准备工作其他准备工作循环体循环体循环减循环减1 1计数计数退出循环退出循环结果为结果为0?0?N N(a)(a)单单循循环环结结构构(b)(b)双双循循环环结结构构结果为结果为0?0?循环体循环体内循环减内循环减1 1计数
9、计数结果为结果为0?0?外循环减外循环减1 1计数计数退出循环退出循环预置外循环次数预置外循环次数其他准备工作其他准备工作预置内循环次数预置内循环次数其他准备工作其他准备工作N NN NY YY YEg:Eg:假设从假设从BUFBUF单元单元开始为一个开始为一个 ASCIIASCII码字符串码字符串,找出其中找出其中的最大数送屏幕显的最大数送屏幕显示。示。循环程序设计循环程序设计思路:思路:ASCASC码数为无符号码数为无符号数,无符号数的最小数为数,无符号数的最小数为0 0Y YN NN N数据区首址数据区首址DS:BXDS:BX无符号最小数无符号最小数ALAL数据个数数据个数CXCXBX
10、ALBX ALBX=AL?BX=AL?BX+1 BXBX+1 BXCX-1 CXCX-1 CX显示结果显示结果返回返回DOSDOSCX=0?CX=0?Y Y 486 DATA SEGMENT USE16 BUF DB QWERTYUIOP123 COUNT EQU$-BUF;统计串长度统计串长度 MAX DB MAX=,?,0DH,0AH,$DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA BEG:MOV AX,DATA MOV DS,AX MOV AL,0 ;无符号最小数无符号最小数 0 AL0 AL LEA BX,BUF ;串首址偏移量
11、串首址偏移量BXBX MOV CX,COUNT ;串长度串长度CXCX LAST:CMP BX,AL;比较比较 JC NEXT MOV AL,BX;大数大数ALALNEXT:INC BX LOOP LAST ;循环计数循环计数 MOV MAX+4,AL ;最大数最大数MAX+4 MAX+4 单元单元 MOV AH,9 MOV DX,OFFSET MAX INT 21H ;显示结果显示结果 MOV AH,4CH INT 21H ;返回返回 DOSDOSCODE ENDS END BEG 源程序清单源程序清单1:486DATA SEGMENT USE16BUF DB QWERTYUIOP123FL
12、AG DB 1;设置串结束标志设置串结束标志MAX DB MAX=,?,0DH,0AH,$DATA ENDSCODE SEGMENT USE16 ASSUME CS:CODE,DS:DATABEG:MOV AX,DATA MOV DS,AX MOV AL,0 ;无符号最小数无符号最小数 0 AL0 AL LEA BX,BUF ;串首址偏移量串首址偏移量BXBXLAST:CMP BYTE PTR BX,-1 ;BX=;BX=串结束标志串结束标志?JE DISP ;是是,转转 CMP BX,AL JC NEXT MOV AL,BX ;大数大数ALALNEXT:INC BX JMP LASTDISP
13、:MOV MAX+4,AL ;最大数最大数MAX+4 MAX+4 单元单元 MOV AH,9 MOV DX,OFFSET MAX INT 21H ;显示结果显示结果 MOV AH,4CH INT 21H ;返回返回 DOSDOSCODE ENDS END BEG 源程序清单源程序清单2:汇编程序设计举例汇编程序设计举例 代代 码码 转转 换换代码转换代码转换 常见的代码转换有:常见的代码转换有:二进制数二进制数显示显示 二进制数二进制数十进制数十进制数显示显示 二进制数二进制数十六进制数十六进制数显示显示 BCDBCD码数码数二进制数二进制数代码转换代码转换A二进制数显示:二进制数显示:例例.
14、把键盘输入的一位数把键盘输入的一位数(0(09),9),转换成等值二进数显示转换成等值二进数显示显示的格式要求如下:显示的格式要求如下:Please Enter:ERROR!Please Enter:9=00001001B代码转换代码转换思路:思路:键盘缓冲区中是键入字符的键盘缓冲区中是键入字符的ASCASC码。码。0 09 9的的ASCASC码为码为30H30H39H39H。二进制数每一位代码的判断:二进制数每一位代码的判断:本程序采用两种格式设计源程序:本程序采用两种格式设计源程序:一种是一种是EXEEXE文件编程格式,文件编程格式,另一种是另一种是COMCOM文件编程格式。文件编程格式。
15、RCLRCL0 0SALSALROLROLCFCFCFCFCFCF程序框图:程序框图:AL-30HBL AL-30HBL=屏幕屏幕,8CX,8CX 0 0 屏屏幕幕1 1 屏屏幕幕CX-1 CXCX-1 CXB B 屏幕屏幕,返回返回DOSDOSN NN N给出操作提示给出操作提示键盘输入键盘输入ALALAL=0AL=09?9?CF=?CF=?CX=0?CX=0?BLBL左移一位左移一位Y Y显示错误信息显示错误信息 Y Y0 01 1 .486DATA SEGMENT USE16MESG1 DB Please Enter!,0DH,0AH,$MESG2 DB -Error!$DATA END
16、SCODE SEGMENT USE16 ASSUME CS:CODE,DS:DATABEG:MOV AX,DATA MOV DS,AX MOV AH,9 MOV DX,OFFSET MESG1 INT 21H ;显示操作提示显示操作提示 MOV AH,1 INT 21H ;等待键入等待键入 CMP AL,3AH JNC ERROR ;99转转 CMP AL,30H EXEEXE格式程序清单格式程序清单 JC ERROR ;00转转 SUB AL,30H MOV BL,AL ;BL=0;BL=09 9 的二进制数的二进制数 MOV AH,2 MOV DL,=INT 21H CALL DISP M
17、OV AH,2 MOV DL,B INT 21H JMP EXITERROR:MOV AH,9 MOV DX,OFFSET MESG2 INT 21H ;显示错误信息显示错误信息EXIT:MOV AH,4CH INT 21H;-DISP PROC ;显示显示BLBL中的二进制数中的二进制数 MOV CX,8LAST:MOV DL,0 RCL BL,1 JNC NEXT MOV DL,1NEXT:MOV AH,2 INT 21H LOOP LAST RETDISP ENDPCODE ENDS END BEG EXEEXE格式程序清单格式程序清单 .486CODE SEGMENT USE16 AS
18、SUME CS:CODE ORG 100HSTART:JMP BEGMESG1 DB Please Enter!,0DH,0AH,$MESG2 DB -Error!$BEG:MOV AH,9 MOV DX,OFFSET MESG1 INT 21H ;显示操作提示显示操作提示 MOV AH,1 INT 21H ;等待键入等待键入 CMP AL,3AH JNC ERROR ;9 9 转转 CMP AL,30H JC ERROR;0 0 转转 SUB AL,30H MOV BL,AL ;BL=0;BL=09 9 的二进制数的二进制数 MOV AH,2 MOV DL,=INT 21H CALL DIS
19、P MOV AH,2 MOV DL,B INT 21H JMP EXIT MOV DX,OFFSET MESG2 INT 21H ;显示错误信息显示错误信息 INT 21H ERROR:MOV AH,9EXIT:MOV AH,4CHCOMCOM格式程序清单格式程序清单;-DISP PROC ;显示显示BLBL中的二进制数中的二进制数 MOV CX,8LAST:MOV DL,0 RCL BL,1 JNC NEXT MOV DL,1NEXT:MOV AH,2 INT 21H LOOP LAST RETDISP ENDPCODE ENDS END START COMCOM格式程序清单格式程序清单 问
20、题:问题:键入的是两位十进制数时,键入的是两位十进制数时,如何将该十进制数的二进制数显如何将该十进制数的二进制数显示在屏幕上?示在屏幕上?代码转换代码转换二二.二进制数二进制数十六进制数显示十六进制数显示算法:算法:四位二进制数四位二进制数等值的十六进制数等值的十六进制数十六进制数十六进制数 ASCASC码码算法算法000010011010111109AF30H39H41H46H四位二进制数四位二进制数+30H+30H=等值的十六进制等值的十六进制数数ASCASC码码四位二进制数四位二进制数+37H+37H=等值的十六进等值的十六进制数制数ASCASC码码代码转换代码转换编程技巧:编程技巧:8
21、 8位二进制数位二进制数截取高截取高4 4位位显示显示显示显示截取低截取低4 4位位XXXX XXXXXXXX0 0 0 0XXXX0 0 0 01616进制数进制数ASCASC码码1616进制数进制数ASCASC码码代码转换代码转换例例.设从设从BNUM单元开始,有单元开始,有4个个16位的二进制数,要求位的二进制数,要求把它们转换成把它们转换成16进制数,并送屏幕显示。进制数,并送屏幕显示。程序清单程序清单 .486 DATA SEGMENT USE16 BNUM DW 0001001000110100B ;1234H DW 0101011001111000B ;5678H DW 0001
22、101000101011B ;1A2BH DW 0011110001001101B ;3C4DH BUF DB 4 DUP(?),H$;输出缓冲区输出缓冲区 COUNT DB 4 DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATABEG:MOV AX,DATA MOV DS,AX MOV CX,4 MOV BX,OFFSET BNUMAGA:MOV DX,BX SAL EDX,16 CALL N2_16ASC MOV AH,9 MOV DX,OFFSET BUF INT 21H ;显示一个显示一个1616进数进数 ADD BX,2 ;地址加地
23、址加 2 2 LOOP AGA MOV AH,4CH INT 21H;二进数二进数十六进数十六进数ACSIIACSII码码N2_16ASC PROC MOV SI,OFFSET BUF ;输出缓冲区地址输出缓冲区地址SISI MOV COUNT,4LAST:ROL EDX,4 AND DL,0FH CMP DL,10 JC NEXT ADD DL,7NEXT:ADD DL,30H MOV SI,DL INC SI ;地址加地址加1 1 DEC COUNT;计数计数 JNZ LAST RETN2_16ASC ENDPCODE ENDS END BEGEXEEXE格式程序清单格式程序清单 代码转换
24、代码转换三三.BCD.BCD码码二进制数二进制数例例.4 4位位BCDBCD码数码数二进制数显示二进制数显示算法:设算法:设4 4位位BCDBCD码数列为码数列为:N3 N2 N1 N0N3 N2 N1 N0,等值二进制数等值二进制数=N31000+N2100+N110+N0 =(010+N3)10+N2)10+N1)10+N0编程考虑:编程考虑:4 4位位BCDBCD码最大为码最大为9999H,9999H,等值的二进制数最大为等值的二进制数最大为1616位位(超过超过8 8位位),而且,而且D D1515位肯定为位肯定为0 0分离出分离出BCDBCD千位千位N3,N3,百位百位N2N2,十位
25、,十位N1,N1,个位个位N0N0设计一个设计一个AXAX10+BX AX10+BX AX的子程序供调用,首次调用的子程序供调用,首次调用时,令时,令AX=0,BX=N3,AX=0,BX=N3,共调用共调用4 4次,则次,则AXAX中即为等值的二进中即为等值的二进制数。制数。486CODE SEGMENT USE16 ASSUME CS:CODENUM DW 4567H ;BCD;BCD码表示码表示BEG:MOV CX,4 ;4;4次调用次调用 MOV AX,0AGA:ROL NUM,4 MOV BX,NUM AND BX,000FH IMUL AX,10 ADD AX,BX LOOP AGA
26、 显示显示AX中的二进制数中的二进制数 返回返回DOSCODE ENDS END BEG本例数据放在代码段!本例数据放在代码段!本例:本例:因为因为AXAX的的D D1515=0,=0,是正是正的有符号数,所以可用的有符号数,所以可用IMUL指令指令AX10+BXAXEXEEXE格式程序清单格式程序清单 代码转换代码转换三三.二进制数二进制数十进制数十进制数方法方法:比较法,恢复余数法,除法比较法,恢复余数法,除法 8 8位二进制数最大为位二进制数最大为1111111111111111,等值的等值的十十进制数为进制数为255255,比较法的关键:比较法的关键:判断某二进制判断某二进制数数(假设
27、为假设为BEN单元的内容单元的内容)包含包含几个几个100100,几个,几个1010,几个,几个1 1 1.1.8 8位二进制数位二进制数十进制数,十进制数,比较法:比较法:DL+1DL DL+1DL(BEN)-10BEN(BEN)-10BEN(BEN)=100?(BEN)=100?N NY Y(BEN)=10?(BEN)=10?N NY Y0 DL0 DL DL+1DL DL+1DL(BEN)-100BEN(BEN)-100BENDL+30HDL+30H屏幕屏幕 0DL0DL DL+30H DL+30H屏幕屏幕(BEN)+30H(BEN)+30H屏幕屏幕 返回返回DOSDOS .486CMP
28、DISP MACRO NN LOCAL LAST,NEXT MOV DL,0 ;DL;DL清清0 0LAST:CMP BEN,NN ;比较比较 JC NEXT;BEN;BENNNNN转转 INC DL ;DL;DL加加1 1 SUB BEN,NN JMP LASTNEXT:ADD DL,30H MOV AH,2 INT 21H ;显示显示 ENDM CODE SEGMENT USE16 ASSUME CS:CODEBEN DB 10101110B ;=174BEG:CMPDISP 100 CMPDISP 10 CMPDISP 1 MOV AH,4CH INT 21HCODE ENDS END
29、BEGEXEEXE格式程序清单格式程序清单 代码转换代码转换2.2.8 8位二进制数位二进制数十进制数,恢复余数法(请自学)十进制数,恢复余数法(请自学)3.3.8 8位二进制数位二进制数十进制数,十进制数,“除权值求商除权值求商”的算法分析的算法分析把把1111010111110101B十进制数十进制数245245算法:算法:依次用权值依次用权值100,10,1100,10,1去除去除上次的余数,直到余数为上次的余数,直到余数为0 0时停止。时停止。每次除法所得的商数顺序每次除法所得的商数顺序排列,即为十进制数。排列,即为十进制数。1 1 1 1 0 1 0 111001001 1 0 0
30、1 0 01 0 1 1 0 11 02权值权值(100)(100)1010 1 0 1 5 1 0 1 1 0 1 0余数为余数为0 0时止时止1权值权值(1)(1)1 0 0 4 1 0 1 1 0 1 1 0 1 0 1 0 11010权值权值(10)(10)1010例例.将将NUMNUM单元中的单元中的1616位二进制数,转换成十进制位二进制数,转换成十进制数显示。数显示。思路:思路:16 16 位二进制数:最大为位二进制数:最大为1111,其等值的十进,其等值的十进制数为制数为6553565535,故应判断,故应判断NUMNUM单元的数包含几个单元的数包含几个1000010000,几
31、个几个10001000,几个,几个100100,几个,几个1010,几个,几个 1 1设计一个设计一个XXXXYYYY并显示商值的宏指令供调用,并显示商值的宏指令供调用,XXXX为为3232位,位,YYYY为为1616为二进制数。为二进制数。DX,AXDX,AX为被除数为被除数 486DIVIDE MACRO XX,YY MOV AX,XX MOV DX,0 MOV CX,YY ;CX;CX为除数为除数 DIV CX ;AX=;AX=商商,且且1010B,DX=1010B,DX=余数余数 MOV AH,0EH ADD AL,30H INT 10H ENDMCODE SEGMENT USE16
32、ASSUME CS:CODENUM DW 65530 ;汇编后为二进制数汇编后为二进制数BEG:DIVIDE NUM,10000 DIVIDE DX,1000 本题在代码段中设置数据,本题在代码段中设置数据,这是这是COMCOM格式?格式?EXEEXE格式?格式?如果改为:如果改为:BEG:MOV BX,OFFSET NUMBEG:MOV BX,OFFSET NUM DIVIDE BX,10000 DIVIDE BX,10000 是错误的,为什么?是错误的,为什么?DIVIDE DX,100 DIVIDE DX,10 DIVIDE DX,1 MOV AH,4CH INT 21HCODE END
33、S END BEG显示一位商值显示一位商值不能不能颠倒颠倒分析:分析:应写成应写成:DIVIDE CS:BX,10000DIVIDE CS:BX,10000 程序清单程序清单 代码转换代码转换4.84.8位二进制数位二进制数十进制数,十进制数,“除十取余除十取余”的算法分析的算法分析 把把1111010111110101十进制数十进制数245245算法:算法:N N被被(10)(10)1010除,商再被除,商再被(10)(10)1010除除,直到商数为,直到商数为0 0时止。时止。每次所得的余数按倒序方式每次所得的余数按倒序方式排列显示。排列显示。编程技巧:编程技巧:每次除法的余数每次除法的余
34、数栈,栈,除法结束后,再从堆栈中除法结束后,再从堆栈中依次弹出余数依次弹出余数+30H+30H屏。屏。1 1 0 0 0 1 1 1 1 0 1 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 151010即即(10)10 1 0 1 1 0 0 0 1 0 1 0 1 0 041010 0商为商为0 0时止时止 1 0 0 0 1 0210108 8位位 3232位二进制位二进制数转换成十进制数,数转换成十进制数,通用的除法求余框通用的除法求余框图图:(书程序书程序,自学自学)设设N N为待转换的为待转换的8 8位位3232位二进制数位二进制数EAX=EAX=商,商,EDX=
35、EDX=余数,余数,且余数肯定且余数肯定1010B1010B统计除法的次数统计除法的次数CX=0?CX=0?弹出余数弹出余数+30H+30H 显示显示 CX-1 CXCX-1 CX N EAX N EAX除数除数 1010B EBX1010B EBX 0 CX 0 CX计数器计数器 0 EDX 0 EDX(EDX,EAX)(EDX,EAX)EBXEBX 余数余数堆栈堆栈 CX+1 CXCX+1 CX商为商为0 0?转换完毕转换完毕Y YY YN NN NCODE SEGMENT USE16CODE SEGMENT USE16 ASSUME CS:CODE ASSUME CS:CODEBEN D
36、B 10101110B ;=174BEN DB 10101110B ;=174BEG:CMPDISP 100BEG:CMPDISP 100 CMPDISP 10 CMPDISP 10 CMPDISP 1 CMPDISP 1 MOV AH,4CH MOV AH,4CH INT 21H INT 21HCODE ENDSCODE ENDS END BEG END BEG代码转换代码转换 .486 .486CODE SEGMENT USE16CODE SEGMENT USE16 ASSUME CS:CODE ASSUME CS:CODEBEN DB 10101110B ;=174BEN DB 1010
37、1110B ;=174BEG:MOV BL,100BEG:MOV BL,100 CALL CMPDISP CALL CMPDISP MOV BL,10 MOV BL,10 CALL CMPDISP CALL CMPDISP MOV BL,1 MOV BL,1 CALL CMPDISP CALL CMPDISP MOV AH,4CH MOV AH,4CH INT 21H INT 21H代码转换代码转换 CMPDISP PROCCMPDISP PROC MOV DL,0 ;DL MOV DL,0 ;DL清清0 0LAST:CMP BEN,BL ;LAST:CMP BEN,BL ;比较比较 JC NEXT ;BEN JC NEXT ;BEN BX BX 转转 INC DL ;DLINC DL ;DL加加1 1 SUB BEN,BL ;BEN-BXBEN SUB BEN,BL ;BEN-BXBEN JMP LAST JMP LASTNEXT:ADD DL,30HNEXT:ADD DL,30H MOV AH,2 MOV AH,2 INT 21H ;INT 21H ;显示显示 RETRETCMPDISP ENDPCMPDISP ENDPCODE ENDSCODE ENDS END BEG END BEG代码转换代码转换
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。