第四章 宏汇编子程序 .ppt

上传人(卖家):hyngb9260 文档编号:6160773 上传时间:2023-06-04 格式:PPT 页数:32 大小:231.50KB
下载 相关 举报
第四章 宏汇编子程序 .ppt_第1页
第1页 / 共32页
第四章 宏汇编子程序 .ppt_第2页
第2页 / 共32页
第四章 宏汇编子程序 .ppt_第3页
第3页 / 共32页
第四章 宏汇编子程序 .ppt_第4页
第4页 / 共32页
第四章 宏汇编子程序 .ppt_第5页
第5页 / 共32页
点击查看更多>>
资源描述

1、1.1.串操作串操作:5种,对串中的元素进行相同的操作。注意对串中的元素进行相同的操作。注意方向、字或字节、操作对象、结束条件(由前缀决定)。方向、字或字节、操作对象、结束条件(由前缀决定)。2.2.子程序:子程序:关注入口参数、出口参数、传递方式。特别注意堆栈的使用及其内容。能描述堆栈变化。本次课内容本次课内容 串串(string):顺序放在内存中一组相同类型数据顺序放在内存中一组相同类型数据(字字/字节字节)串操作串操作:对串中的元素进行相同的操作。对串中的元素进行相同的操作。串操作的寻址方式(隐含):串操作的寻址方式(隐含):源源操作数指针操作数指针DS:SI 目的目的操作数指针操作数指

2、针ES:DI(同一段内操作则须同一段内操作则须ES=DSES=DS)每次串操作后自动修改指针每次串操作后自动修改指针SI和和DI :字节字节串操作后自动串操作后自动1,字字串操作后自动串操作后自动2 (指下一个指下一个)CLD令令DF=0作作,STD令令DF=1作作 。重复前缀:重复前缀:REP CX0 则重复执行则重复执行 MOVS/STOS CX减减1 REPE/REPZ CX0ZF=1则重复执行则重复执行CMPS/SCAS CX减减1 上次比较上次比较相等相等则继续重复则继续重复 直至直至CX=0CX=0为止为止REPNE/REPNZ CX0ZF=0则重复执行则重复执行CMPS/SCAS

3、 CX减减1 上次比较上次比较不相等不相等则继续重复则继续重复 直至直至CX=0CX=0为止为止3.3.5 3.3.5 串操作指令串操作指令串操作指令串操作指令 串是由字节、字、或双字组成的字符或数据序列,存放在存储器中。串是由字节、字、或双字组成的字符或数据序列,存放在存储器中。基本指令集处理的串长度不超过基本指令集处理的串长度不超过64K。串操作常用于数据块的快速移动、比较、搜索和存取,执行一次操作串中一个元串操作常用于数据块的快速移动、比较、搜索和存取,执行一次操作串中一个元 素,配上重复前缀可按条件完成对整个串的操作。素,配上重复前缀可按条件完成对整个串的操作。重复前缀重复前缀 重复前

4、缀指令的名称、汇编格式、重复条件、后续的串指令及操作见下表。重复前缀指令的名称、汇编格式、重复条件、后续的串指令及操作见下表。重复前缀也是一条指令,但不能单独使用,需加在串操作指令之前,使重复前缀也是一条指令,但不能单独使用,需加在串操作指令之前,使 串操作指令重复或条件重复执行,相当于运行一个循环程序;串操作指令重复或条件重复执行,相当于运行一个循环程序;取串指令取串指令LODS一般不加重复前缀,因为重复取出串中的元素送到累加一般不加重复前缀,因为重复取出串中的元素送到累加 器器Acc无意义(后面取出的数冲掉前面取出的数)。无意义(后面取出的数冲掉前面取出的数)。串指令使用的一般方法串指令使

5、用的一般方法设置源串地址设置源串地址设置目标串地址设置目标串地址设置串长度设置串长度设置操作方向设置操作方向DF串指令串指令 MOV SI,源串首地址源串首地址(或(或LEA SI,源串)源串)MOV DI,目的串首地址目的串首地址(或(或LEA DI,目的串)目的串)MOV CX,串长度串长度CLD(或(或STD)加重复前缀或循环编程实现批处理加重复前缀或循环编程实现批处理重复执行?重复执行?MOVSB :(ES:DI)(DS:SI)(ES:DI)(DS:SI),SI SI1,DI1 MOVSW:(ES:DI+1(ES:DI+1、DI)(DS:SI+1DI)(DS:SI+1、SI),SISI

6、),SI2,DI2 例例 将将10001000个字符的字符串从内存的个字符的字符串从内存的BUFFER1BUFFER1搬移到内存的搬移到内存的BUFFER2BUFFER2中去。中去。MOV SI MOV SI,OFFSET BUFFER1 OFFSET BUFFER1 ;BUFFER1BUFFER1偏移地址送偏移地址送SI SI MOV DI MOV DI,OFFSET BUFFER2 OFFSET BUFFER2 ;BUFFER2BUFFER2偏移地址送偏移地址送DI DI MOV CX MOV CX,10001000 ;传送个数送传送个数送CXCX CLD CLD ;令令DF=0DF=0,

7、地址自动递增地址自动递增LR:REP LR:REP MOVSBMOVSB ;重复搬移重复搬移10001000个字节个字节LC:.LC:.1.1.串传送指令串传送指令 MOVSB/MOVSW CLD CLDLR:LR:MOVSBMOVSB DEC CXDEC CX JNZ LR JNZ LR LC:.LC:.用串传送指令实现数据块传送用串传送指令实现数据块传送MOVSB :(ES:DI)(DS:SI)(ES:DI)(DS:SI),SI SI1,DI1 MOVSW:(ES:DI+1(ES:DI+1、DI)(DS:SI+1DI)(DS:SI+1、SI),SISI),SI2,DI2 例例 将将1000

8、1000个字符的字符串从内存的个字符的字符串从内存的BUFFER1BUFFER1搬移到内存的搬移到内存的BUFFER2BUFFER2中去。中去。MOV SI MOV SI,OFFSET BUFFER1 OFFSET BUFFER1 ;BUFFER1BUFFER1偏移地址送偏移地址送SI SI MOV DI MOV DI,OFFSET BUFFER2 OFFSET BUFFER2 ;BUFFER2BUFFER2偏移地址送偏移地址送DI DI MOV CX MOV CX,10001000 ;传送个数送传送个数送CXCX CLD CLD ;令令DF=0DF=0,地址自动递增地址自动递增LR:REP

9、LR:REP MOVSBMOVSB ;重复搬移重复搬移10001000个字节个字节LC:.LC:.1.1.串传送指令串传送指令 MOVSB/MOVSW (move)MOV 暂存,暂存,SI MOV DI,暂存暂存 INC SI INC DI DEC CX JNZ LRLC:.CMPSB:(DS:SI)(DS:SI)(ES:DI)(ES:DI),SI SI1,DI1 CMPSW:(DS:SI+1(DS:SI+1、SI)SI)(ES:DI+1(ES:DI+1、DI)DI),SISI2,DI2 例例 比较比较DESTDEST和和SOURCESOURCE中的中的500500个字节,找出第一个不相同的字

10、节,个字节,找出第一个不相同的字节,如果找到,则将如果找到,则将SOURCESOURCE中的这个数送中的这个数送ALAL中。中。LEA DI LEA DI,DEST DEST;DEST DEST偏移地址送偏移地址送DI DI LEA SI LEA SI,SOURCE SOURCE;SOURCE SOURCE偏移地址送偏移地址送SI SI MOV CX MOV CX,500500;比较次数送比较次数送CXCX CLDCLD;令令DF=0DF=0,地址自动递增地址自动递增 REPE REPE CMPSBCMPSB;相同则重复比较直至最后相同则重复比较直至最后 JZ NEXTJZ NEXT;遇不同或

11、比完遇不同或比完:判相同则不存判相同则不存MACH:DEC SIMACH:DEC SI;SI;SI退指最后比较不同的那个源数退指最后比较不同的那个源数 MOV AL MOV AL,SISI;送送ALALNEXTNEXT:.本指令可用来检查两个串是否相等本指令可用来检查两个串是否相等2.2.串比较指令串比较指令 CMPSB/CMPSW compare)SCASB:(AL)(AL)(ES:DI)(ES:DI),DI1 (search)SCASW:(AX)(AX)(ES:DI+1(ES:DI+1、DI)DI),DI2 例例 在包含在包含100100个字符的字符串中寻找第一个回车符个字符的字符串中寻找

12、第一个回车符CRCR(其其ASCIIASCII码为码为0 0DHDH),),找到后将其地址保留在(找到后将其地址保留在(DSDS:DIDI)中,并在屏幕上中,并在屏幕上显示显示“Y”Y”,否则显示否则显示“N”N”。LEA DI LEA DI,STRING STRING ;STRING STRING偏移地址送偏移地址送DI DI MOV AL MOV AL,0DH 0DH ;关键字送关键字送AL AL MOV CX MOV CX,100100 ;比较次数送比较次数送CXCX CLDCLD;令令DF=0DF=0,地址自动递增地址自动递增 REPNE REPNE SCASBSCASB;不同则重复比

13、较直至最后不同则重复比较直至最后 JZ FOUNDJZ FOUND ;遇相同或比完遇相同或比完:判相同则转判相同则转 MOV DL MOV DL,NN;不存在回车:显示不存在回车:显示“N”N”JMP DSPYJMP DSPYFOUND:DEC DIFOUND:DEC DI;SI;SI退指找到回车的那个单元退指找到回车的那个单元 MOV DL MOV DL,YY;显示显示“Y”Y”DSPYDSPY:MOV AHMOV AH,02H02H;调用调用2 2号软中断输出显示号软中断输出显示 INT 21H INT 21H .本指令用于在串中查找指定的信息本指令用于在串中查找指定的信息3.3.串搜索串

14、搜索(扫描扫描)指令指令 SCASB/SCASWMOV AX,DATAMOV AX,DATAMOV DS,AXMOV DS,AXMOV ES,AXMOV ES,AX;在在100个字符中找回车符个字符中找回车符.MODEL SMALL ;小模式小模式.DATA ;数据段数据段STRING DB HOW DO YOU DO!,0DH,34H,43H,37H,41H,0DH.STACK 200;堆栈段,预留堆栈段,预留200字节字节.CODE ;代码段代码段START:MOV AX,DATA MOV DS,AX;数据段赋值数据段赋值MOV ES,AX;附加段赋值附加段赋值MOV DI,OFFSET

15、STRING;STRING偏移地址送偏移地址送DI MOV AL,0DH;关键字送关键字送AL MOV CX,100;比较次数送比较次数送CX CLD;令令DF=0,地址自动递增地址自动递增 REPNE SCASB;不同则重复比较直至最后不同则重复比较直至最后 JZ FOUND;遇相同或比完遇相同或比完:判相同则转判相同则转 MOV DL,N;不存在回车:显示不存在回车:显示“N”JMP DSPYFOUND:DEC DI;SI退指找到回车的那个单元退指找到回车的那个单元 MOV DL,Y;显示显示“Y”DSPY:MOV AH,02H;调用调用2号软中断输出显示号软中断输出显示 INT 21H

16、MOV AH,4CH ;返回返回DOS INT 21H END START;汇编结束汇编结束LODSB:(AL)(DS:SI)(AL)(DS:SI),SI SI1LODSW:(AX)(DS:SI+1(AX)(DS:SI+1、SI)SI),SISI2例例 内存中以内存中以BUFFERBUFFER为首址的缓冲区有为首址的缓冲区有1010个以非压缩型个以非压缩型BCDBCD码形式码形式存放的十进制数,它们的值可能是存放的十进制数,它们的值可能是0909中的任意一个,将这些十中的任意一个,将这些十进制数按顺序显示在屏幕上。进制数按顺序显示在屏幕上。LEA SILEA SI,BUFFER BUFFER;

17、BUFFERBUFFER偏移地址送偏移地址送DI DI MOV CXMOV CX,1010;数据个数送数据个数送CXCXMOV AHMOV AH,02H02H;置置2 2号号DOSDOS功能调用功能调用 CLDCLD ;令令DF=0DF=0,地址自动递增地址自动递增GETGET:LODSBLODSB ;用串装入指令取一个用串装入指令取一个BCDBCD码到码到ALAL OR AL,30HOR AL,30H;转换为转换为ASCIIASCII码码 MOV DLMOV DL,ALAL;送送DLDLINT 21HINT 21H;输出显示输出显示DEC CXDEC CX;循环计数循环计数 JNZ JNZ

18、GETGET;未完继续未完继续MOV AH,4CHMOV AH,4CH;返回返回DOSINT 21HINT 21H .4.4.串装入指令串装入指令 LODSB/LODSW (load)从内存串数据逐个装入到从内存串数据逐个装入到CPUCPU的的ALAL里来,使用重复前缀没有意义里来,使用重复前缀没有意义MOV AL,SIMOV AL,SIINC SIINC SI STOSB :(ES:DI)AL(ES:DI)AL,DI1 STOSW:(ES:DI+1(ES:DI+1、DI)AXDI)AX,DI2 例例 用用STOS STOS 指令将字符指令将字符“#”“#”装入到以装入到以AREAAREA为首

19、地址的为首地址的 100 100个字节中。个字节中。LEA DILEA DI,AREA AREA LEA DI LEA DI,AREA AREA MOV AXMOV AX,#MOV AX MOV AX,#MOV CXMOV CX,5050 MOV CX MOV CX,5050 CLDCLD CLDCLDREPREP STOSWSTOSW REPREP STOSBSTOSB MOV AH,4CH MOV AH,4CH MOV AH,4CH MOV AH,4CH INT 21H INT 21HINT 21H INT 21H STOSSTOS指令加重复前缀指令加重复前缀通常用于初始化一个内存区域通常

20、用于初始化一个内存区域5.5.串存储指令串存储指令 STOSB/STOSW (store)例例 求求100100个个8 8位补码数平均值及小于平均值的数的个数位补码数平均值及小于平均值的数的个数.MODEL SMALL ;小模式小模式.DATA ;数据段数据段 BM DB 34,-38,43,-51,96 DUP(?)N EQU 4 PJ DB?XG DB?.STACK 200;堆栈段,预留堆栈段,预留200字节字节.CODE ;代码段代码段START:MOV AX,DATA ;数据段赋值数据段赋值 MOV DS,AXMOV SI,OFFSET BM ;SI指向数组首地址指向数组首地址 MOV

21、 BX,0;累加寄存器清累加寄存器清0 MOV CX,N;对对N个数累加个数累加LB1:MOV AL,SI;取当前单字节补码数到取当前单字节补码数到ALCBW;扩展为字在扩展为字在AXADD BX,AX;加到加到BX中中INC SI;SI指向下一个数指向下一个数LOOP LB1;循环循环MOV AX,BX;累加和送累加和送AXMOV CL,N;置除数置除数NIDIV CL;除以除以+100得平均值于得平均值于ALCBW;扩展为字在扩展为字在AXMOV PJ,AL;存平均值存平均值MOV BL,0;计个数寄存器清计个数寄存器清0MOV SI,OFFSET BM ;SI重新指向数组首地址重新指向数

22、组首地址MOV CX,N;对对100个数统计个数统计LB2:CMP AL,SI;平均值与当前补码数比较平均值与当前补码数比较JLE LB3;:不计不计INC BL;当前补码数小当前补码数小:BX计数加计数加1LB3:INC SI;SI指向下一个数指向下一个数LOOP LB2;循环循环MOV XG,BL;存小于平均值的个数存小于平均值的个数MOV AH,4CH;返回返回DOSINT 21HEND START4.6.4 4.6.4 子程序设计子程序设计 P.142 P.142 子程序子程序(过程过程)的定义及结构的定义及结构(设过程名设过程名SUB1,NEAR属性属性)SUB1 PROC NEAR

23、 ;过程定义伪指令过程定义伪指令 PUSH AX;保护现场保护现场PUSHFPUSH BX .POP BX;恢复现场恢复现场POPFPOP AX RET;子程序返回子程序返回SUB1 ENDP 过程的类型属性缺省为过程的类型属性缺省为NEARNEAR(段内),段间调用则为段内),段间调用则为FARFAR属性属性子程序中会发生改变的子程序中会发生改变的寄存器才需要保护寄存器才需要保护后进先出才能正确恢复后进先出才能正确恢复关于子程序的一些要素关于子程序的一些要素子程序:子程序:保护现场与恢复现场(子程序内会破坏的寄存器);保护现场与恢复现场(子程序内会破坏的寄存器);利用主程序传递的入口参数;利

24、用主程序传递的入口参数;子程序的处理功能(公用性、专门化);子程序的处理功能(公用性、专门化);处理结果数据通过出口参数传递给主程序。处理结果数据通过出口参数传递给主程序。主程序调用过程:主程序调用过程:入口参数初始化;入口参数初始化;调用子程序:调用子程序:CALL 过程名过程名 ;出口参数利用与处理;出口参数利用与处理;例例1:寄存器传递参数。求数组寄存器传递参数。求数组ARRAY 中所有元素之和并存中所有元素之和并存于于SUM单元中。单元中。STACK SEGMENT PARA STACK STACK DB 100 DUP(?)?)STACK ENDS DATA SEGMENT ARRA

25、Y DB 61,52,43,34,25 COUNT EQU$ARRAY SUM DW?DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX$代表代表什么?什么?LEA SI,ARRAY ;入口参数准备,入口参数准备,MOV CX,COUNT CALL SUM1 ;调用子程序求和,返回值在调用子程序求和,返回值在AX中中 MOV SUM,AX ;和存于和存于SUM单元单元 MOV AH,4CH ;返回返回DOS INT 21H 传给传给SUM1子程序的参数是什么?子程序的参数是什么?子程序子程序SUM1

26、送回结果是通过什么?送回结果是通过什么?本例通过本例通过寄存器寄存器传递参数传递参数!;子程序名:;子程序名:SUM1。程序功能:求字节数组和。程序功能:求字节数组和。;入口参数:;入口参数:SI=数组首址,数组首址,CX=数组长度数组长度;出口参数:;出口参数:AX=数组和。使用寄存器:数组和。使用寄存器:AX,CX,SI。SUM1 PROC NEAR CMP CX,0 JZ EXIT MOV AX,0 ;数组和通过数组和通过AX寄存器回送到主程序寄存器回送到主程序 AGAIN:ADD AL,SI ADC AH,0 INC SI LOOP AGAIN EXIT:RET SUM1 ENDP C

27、ODE ENDS END START例例2:问题同例:问题同例1 STACK SEGMENT PARA STACK STACK DB 100 DUP (?)?)STACK ENDS DATA SEGMENT ARRAY DW d1,d2,d3,dn COUNT DW($-ARRAY)/2 SUM DW?TABLE DW 3 DUP(?)?);定义地址表定义地址表 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATA MOV DS,AX 本例通过建立的本例通过建立的参数表参数表传递参数传递参数!MOV T

28、ABLE,OFFSET ARRAY ;参数地址送地址表参数地址送地址表 MOV TABLE+2,OFFSET COUNT MOV TABLE+4,OFFSET SUM LEA BX,TABLE ;地址表首地址地址表首地址 BX CALL PROADD ;求和并存储求和并存储 MOV AH,4CH INT 21H ;返回返回DOS调用子程序调用子程序PRO-ADDPRO-ADD时的地址表情况时的地址表情况:ARRAYCOUNTSUMTABLE;子程序名:;子程序名:PROADD。程序功能:求字数据和并保存。程序功能:求字数据和并保存。;入口参数:;入口参数:BX为地址表首地址,参数地址在地址表中

29、为地址表首地址,参数地址在地址表中.;出口参数:和在;出口参数:和在SUM单元。使用寄存器:单元。使用寄存器:AX,CX,BP,SI,DIPROADD PROC NEAR PUSH AX ;保护现场保护现场 PUSH DI MOV SI,BX ;数组首地址数组首地址 SI MOV BP,BX+2 ;数组长度单元地址数组长度单元地址 BP MOV CX,DS:BP ;数组长度数组长度 CX MOV DI,BX+4 ;存储和单元地址存储和单元地址 DI MOV AX,0 ADDIT:ADD AX,SI ADD SI,2 LOOP ADDIT ;循环求和循环求和 MOV DI,AX ;存储和存储和

30、POP DI POP AX ;恢复现场恢复现场 RETPROADD ENDPCODE ENDS END START STACK SEGMENT PARA STACK STACK DB 100 DUP (?)?)STACK ENDS DATA SEGMENT ARRAY DW d1,d2,d3,dn COUNT DW N SUM DW?DATA ENDS EXTRN PROADD:FAR ;主程序和子程序在两个不同的段中,别处定义,本处使用主程序和子程序在两个不同的段中,别处定义,本处使用 CODE1 SEGMENT ASSUME CS:CODE1,DS:DATA START:MOV AX,DA

31、TA MOV DS,AX LEA BX,ARRAY ;地址参数地址参数1进栈进栈 PUSH BX LEA BX,COUNT ;地址参数地址参数2进栈进栈 PUSH BX LEA BX,SUM ;地址参数地址参数3进栈进栈 PUSH BX CALL FAR PTR PROADD ;段间调用,求和段间调用,求和 MOV AH,4CH INT 21H CODE1 ENDS END START 子程序设计例子程序设计例3 3:本例通过堆栈传送参数:本例通过堆栈传送参数PUBLIC PROADD;本处定义,别处使用本处定义,别处使用 CODE2 SEGMENT ASSUME CS:CODE2;子程序名:

32、;子程序名:PROADD。程序功能:数组求和。入口参数:数组长度及存和单元地址在栈中。程序功能:数组求和。入口参数:数组长度及存和单元地址在栈中。;出口参数:和在;出口参数:和在SUM单元。使用寄存器:单元。使用寄存器:AX,BX,CX,BP,SIPROADD PROC FAR ;子程序类型定义为子程序类型定义为FAR PUSH AX ;保护现场保护现场AX、BX、CX、BP PUSH BX PUSH CX PUSH BP MOV BP,SP MOV BX,BP+14 ;取得地址参数取得地址参数 MOV CX,BX MOV BX,BP+12 MOV SI,BP+16 MOV AX,0ADDIT

33、:ADD AX,SI ;求和求和 ADD SI,2 LOOP ADDIT MOV BX,AX ;保存和保存和 POP BP POP CX ;恢复现场恢复现场BP、CX、BX、AX POP BX POP AX RET 6 ;返回并废除地址参数返回并废除地址参数PROADD ENDPCODE2 ENDS END子程序返回后的子程序返回后的SP位置位置子程序调用时的堆栈状况子程序调用时的堆栈状况断点断点IP值值断点断点CS值值SUMCOUNTARRAYBPCXBXAXBP保护现场后的保护现场后的SP位置位置进入子程序后的进入子程序后的SP位置位置BP+14BP+16BP+12高地址高地址低地址低地址

34、6字节字节P176第10题:数据data segmentstring db 20db?db 20 dup(?)tab1 db 7,5,9,1,3,6,8,0,2,4buff db 20 dup(?),$data endsP176第10题:主程序code segment assume cs:code,ds:data,ss:stackstart:mov ax,datamov ds,axmov dx,offset stringmov ah,10int 21hcall jiamiP176第10题:主程序lea dx,buffmov ah,9int 21hmov ah,4chint 21hP176第10

35、题:子程序jiamiproc nearmov al,string+1cbwmov cx,axlea si,string+2lea bx,tab1lea di,buffP176第10题:子程序again:mov al,sisub al,30hxlatadd al,30hmov ds:di,alinc siinc diloop againret P176第10题:结束jiami endpcode endsend start 系统调用与中断调用当80X86CPU执行 int n时,从内存最低的4n4n+3中找出地址,作为中断子程序的入口地址,转入该子程序中执行,执行完后再返回。简单地说,执行系统调用就是调用一个现成的子程序。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(第四章 宏汇编子程序 .ppt)为本站会员(hyngb9260)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|