微机原理与接口技术第6章.ppt

上传人:wuy****n92 文档编号:53979665 上传时间:2022-10-27 格式:PPT 页数:46 大小:213KB
返回 下载 相关 举报
微机原理与接口技术第6章.ppt_第1页
第1页 / 共46页
微机原理与接口技术第6章.ppt_第2页
第2页 / 共46页
点击查看更多>>
资源描述

《微机原理与接口技术第6章.ppt》由会员分享,可在线阅读,更多相关《微机原理与接口技术第6章.ppt(46页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第6章章汇编语言程序设计汇编语言程序设计用汇编语言编程属结构化程序设计。用汇编语言编程属结构化程序设计。需按照结构化的思想来进行汇编程需按照结构化的思想来进行汇编程序的设计序的设计分析题意,确定算法分析题意,确定算法根据算法画出程序框图根据算法画出程序框图根据框图编写程序根据框图编写程序上机调试程序上机调试程序执行程序执行程序按照自上而下的设计方法,设计一个汇编程序的步骤:按照自上而下的设计方法,设计一个汇编程序的步骤:顺序程序顺序程序分支程序分支程序循环程序循环程序从结构上来讲,一般的汇编程序可分为:从结构上来讲,一般的汇编程序可分为:Eg:从键盘输入一个字符并存储到字节变从键盘输入一个字

2、符并存储到字节变量量BUF单元中单元中.分析:分析:用用DOS功能调用完成键入,输入功能调用完成键入,输入的字符保存在的字符保存在AL寄存器中寄存器中将将AL中的内容存到定义在数据中的内容存到定义在数据段的变量段的变量BUF所指单元中所指单元中顺序程序设计顺序程序设计.486DATASEGMENTUSE16BUF DB?DATAENDS源程序清单:源程序清单:CODESEGMENTUSE16ASSUMECS:CODE,DS:DATABEG:MOVAX,DATAMOVDS,AXMOVAH,1INT 21H;AL=键入字符的键入字符的MOVBUF,ALASIIC码码MOVAH,4CHINT 21H

3、CODEENDSEND BEG分支程序设计分支程序设计转移指令可用来实现分支程序设计转移指令可用来实现分支程序设计分支程序分三种:分支程序分三种:简单分支简单分支复合分支复合分支多分支多分支简单分支简单分支即两路分支,该分支程序结构为:即两路分支,该分支程序结构为:条件满足否条件满足否?程序段程序段1程序段程序段2YN Eg:Eg:将将BXBX寄存器的内容以二进制数格式显在寄存器的内容以二进制数格式显在屏幕上屏幕上简单分支简单分支RCLRCL0 0SALSALROLROLCFCFCFCFCFCF486CODESEGMENTUSE16ASSUMECS:CODEBEG:MOVBX,5678HMOV

4、CX,16LAST:MOVAL,0ROLBX,1JNCNEXTMOVAL,1NEXT:MOVAH,0EHINT10HLOOPLASTMOVAH,4CHINT21HCODEENDSENDBEGADCAL,0数数BX,16 CXBX,16 CXC C标标=?=?1AL1AL调调BIOS.0EHBIOS.0EHCX-1CXCX-1CXCX=0CX=00AL0ALBXBX左移一位左移一位10NY返返DOSDOS源程序清单:源程序清单:复合分支复合分支判断的条件是复合条件,称复合判断判断的条件是复合条件,称复合判断复合分支程序结构为:复合分支程序结构为:条件条件1和条件和条件2.满足否?满足否?程序段程

5、序段1程序段程序段2YNEg:Eg:某科室某科室9人,统计月收入在人,统计月收入在800900间的人数,并用十进制数显示间的人数,并用十进制数显示复合分支复合分支 分析:月收入是无符号数,对一批数处理应该用间址。分析:月收入是无符号数,对一批数处理应该用间址。数轴数轴:N1(800)N2(900)N1(800)N2(900)多分支多分支判断条件后有多个出口,判断一次只能选择判断条件后有多个出口,判断一次只能选择一个分支。一个分支。多分支程序结构为:多分支程序结构为:1条件属哪种条件属哪种情况?情况?程序段程序段1程序段程序段n+m.程序段程序段nnn+m例例.多分支段内转移多分支段内转移要求:

6、键入要求:键入0 0,转,转P0P0程序段程序段 键入键入1 1,转,转P1P1程序段程序段 键入键入9 9,转,转P9P9程序段程序段思路:思路:用比较指令配合直接转移指令实现用比较指令配合直接转移指令实现 CMP CMP 键入字符,键入字符,00 JE P0 JE P0 CMP CMP 键入字符,键入字符,11 JE P1 JE P1 用转移地址表配合间接转移指令实现用转移地址表配合间接转移指令实现多分支多分支486DATASEGMENTUSE16TABDWP0,P1,P9;汇编后自动装入相应的偏移地址汇编后自动装入相应的偏移地址MESGDB0DH,0AH,strike09:$DATAEN

7、DSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATABEG:MOVAX,DATAMOVDS,AXAGA:MOVAH,9MOVDX,OFFSETMESGINT21HMOVAH,1INT21HCMPAL,0JCAGACMPAL,9JAAGASUBAL,30HMOVZXBX,ALADDBX,BX;2BXBXMOVSI,OFFSETTABJMPBX+SI;DS:BX+SIIPP0:P1:P9:CODEENDSENDBEG或或:MOVBX,BX+SIJMPBX;BXIP源程序清单:源程序清单:循环程序设计循环程序设计循环程序的组成:循环程序的组成:循环准备循环准备 循环体循环体

8、 循环控制循环控制1.1.循环程序的结构循环程序的结构Y Y预置循环次数预置循环次数其他准备工作其他准备工作循环体循环体循环减循环减1 1计数计数退出循环退出循环结果为结果为0?0?N N(a(a)单单循循环环结结构构(b(b)双双循循环环结结构构结果为结果为0?0?循环体循环体内循环减内循环减1 1计数计数结果为结果为0?0?外循环减外循环减1 1计数计数退出循环退出循环预置外循环次数预置外循环次数其他准备工作其他准备工作预置内循环次数预置内循环次数其他准备工作其他准备工作N NN NY YY YEg:Eg:假设从假设从BUFBUF单元单元开始为一个开始为一个 ASCII ASCII码字符串

9、码字符串,找出其中找出其中的最大数送屏幕显的最大数送屏幕显示。示。循环程序设计循环程序设计思路:思路:ASCASC码数为无符号数,码数为无符号数,无符号数的最小数为无符号数的最小数为0 0Y YN NN N数据区首址数据区首址DS:BXDS:BX无符号最小数无符号最小数ALAL数据个数数据个数CXCXBX ALBX ALBX=AL?BX=AL?BX+1 BXBX+1 BXCX-1 CXCX-1 CX显示结果显示结果返回返回DOSDOSCX=0CX=0?Y Y486DATASEGMENTUSE16BUFDBQWERTYUIOP123COUNTEQU$-BUF;统计串长度统计串长度MAXDBMAX

10、=,?,0DH,0AH,$DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATABEG:MOVAX,DATAMOVDS,AXMOVAL,0;无符号最小数无符号最小数 0 AL 0 ALLEABX,BUF;串首址偏移量串首址偏移量BXBXMOVCX,COUNT;串长度串长度CXCX LAST:CMPBX,AL;比较比较JCNEXTMOVAL,BX;大数大数ALALNEXT:INCBXLOOPLAST;循环计数循环计数MOVMAX+4,AL ;最大数最大数MAX+4 MAX+4 单元单元MOVAH,9MOVDX,OFFSETMAXINT21H;显示结果显示结果M

11、OVAH,4CHINT21H;返回返回 DOS DOSCODEENDSENDBEG 源程序清单源程序清单1:486DATASEGMENTUSE16BUFDBQWERTYUIOP123FLAGDB1;设置串结束标志设置串结束标志MAXDBMAX=,?,0DH,0AH,$DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATABEG:MOVAX,DATAMOVDS,AXMOVAL,0;无符号最小数无符号最小数 0 AL 0 ALLEABX,BUF;串首址偏移量串首址偏移量BXBXLAST:CMPBYTEPTRBX,-1;BX=;BX=串结束标志串结束标志?JEDI

12、SP;是是,转转CMPBX,ALJCNEXTMOVAL,BX;大数大数ALALNEXT:INCBXJMPLASTDISP:MOVMAX+4,AL;最大数最大数MAX+4 MAX+4 单元单元MOVAH,9MOVDX,OFFSETMAXINT21H;显示结果显示结果MOVAH,4CHINT21H;返回返回 DOS DOSCODEENDSENDBEG 源程序清单源程序清单2:汇编程序设计举例汇编程序设计举例 代代 码码 转转 换换代码转换代码转换 常见的代码转换有:常见的代码转换有:二进制数二进制数显示显示 二进制数二进制数十进制数十进制数显示显示 二进制数二进制数十六进制数十六进制数显示显示 B

13、CD BCD码数码数二进制数二进制数代码转换代码转换A一.一.二进制数显示:二进制数显示:二.二.例例.把键盘输入的一位数把键盘输入的一位数(0(09),9),转换成等值二进数显示转换成等值二进数显示显示的格式要求如下:显示的格式要求如下:PleaseEnter:ERROR!PleaseEnter:9=00001001B代码转换代码转换思路:思路:键盘缓冲区中是键入字符的键盘缓冲区中是键入字符的ASCASC码。码。0 09 9的的ASCASC码为码为30H30H39H39H。二进制数每一位代码的判断:二进制数每一位代码的判断:本程序采用两种格式设计源程序:本程序采用两种格式设计源程序:一种是一

14、种是EXEEXE文件编程格式,文件编程格式,另一种是另一种是COMCOM文件编程格式。文件编程格式。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.486DATASEGMENTUSE16MESG1DBPle

15、aseEnter!,0DH,0AH,$MESG2DB-Error!$DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATABEG:MOVAX,DATAMOVDS,AXMOVAH,9MOVDX,OFFSETMESG1INT21H;显示操作提示显示操作提示MOVAH,1INT21H;等待键入等待键入CMPAL,3AHJNCERROR;99转转CMPAL,30HEXEEXE格式程序清单格式程序清单 JCERROR;00转转SUBAL,30HMOVBL,AL;BL=0;BL=09 9 的二进制数的二进制数MOVAH,2MOVDL,=INT21HCALLDISPMOV

16、AH,2MOVDL,BINT21HJMPEXITERROR:MOVAH,9MOVDX,OFFSETMESG2INT21H;显示错误信息显示错误信息EXIT:MOVAH,4CHINT21H;-DISPPROC;显示显示BLBL中的二进制数中的二进制数MOVCX,8LAST:MOVDL,0RCLBL,1JNCNEXTMOVDL,1NEXT:MOVAH,2INT21HLOOPLASTRETDISPENDPCODEENDSENDBEGEXEEXE格式程序清单格式程序清单 .486CODESEGMENTUSE16ASSUMECS:CODEORG100HSTART:JMPBEGMESG1DBPleaseE

17、nter!,0DH,0AH,$MESG2DB-Error!$BEG:MOVAH,9MOVDX,OFFSETMESG1INT21H;显示操作提示显示操作提示 MOVAH,1INT21H;等待键入等待键入CMPAL,3AHJNCERROR;9 9 转转CMPAL,30HJCERROR;0 0 转转SUBAL,30HMOVBL,AL;BL=0;BL=09 9 的二进制数的二进制数MOVAH,2MOVDL,=INT21HCALLDISPMOVAH,2MOVDL,BINT21HJMPEXITMOVDX,OFFSETMESG2INT21H;显示错误信息显示错误信息INT21HERROR:MOVAH,9EX

18、IT:MOVAH,4CHCOMCOM格式程序清单格式程序清单;-DISPPROC;显示显示BLBL中的二进制数中的二进制数MOVCX,8LAST:MOVDL,0RCLBL,1JNCNEXTMOVDL,1NEXT:MOVAH,2INT21HLOOPLASTRETDISPENDPCODEENDSENDSTARTCOMCOM格式程序清单格式程序清单 问题:问题:键入的是两位十进制数时,键入的是两位十进制数时,如何将该十进制数的二进制数显如何将该十进制数的二进制数显示在屏幕上?示在屏幕上?代码转换代码转换二二.二进制数二进制数十六进制数显示十六进制数显示算法:算法:四位二进制数四位二进制数等值的十六进

19、制数等值的十六进制数十六进制数十六进制数 ASC ASC码码算法算法000010011010111109AF30H39H41H46H四位二进制数四位二进制数+30H+30H=等值的十六进制等值的十六进制数数ASCASC码码四位二进制数四位二进制数+37H+37H=等值的十六进等值的十六进制数制数ASCASC码码代码转换代码转换编程技巧:编程技巧:8 8位二进制数位二进制数截取高截取高4 4位位显示显示显示显示截取低截取低4 4位位XXXX XXXXXXXX0000XXXX00001616进制数进制数ASCASC码码1616进制数进制数ASCASC码码代码转换代码转换例例.设从设从BNUM单元开

20、始,有单元开始,有4个个16位的二进制数,要求位的二进制数,要求把它们转换成把它们转换成16进制数,并送屏幕显示。进制数,并送屏幕显示。程序清单程序清单.486DATASEGMENTUSE16;1234H;5678H;1A2BH;3C4DHBUFDB4DUP(?),H$;输出缓冲区输出缓冲区COUNTDB4DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATABEG:MOVAX,DATAMOVDS,AXMOVCX,4MOVBX,OFFSETBNUMAGA:MOVDX,BXSALEDX,16CALLN2_16ASCMOVAH,9MOVDX,OFFSETBUFI

21、NT21H;显示一个显示一个1616进数进数ADDBX,2;地址加地址加 2 2LOOPAGAMOVAH,4CHINT21H;二进数二进数十六进数十六进数ACSIIACSII码码N2_16ASCPROCMOVSI,OFFSETBUF;输出缓冲区地址输出缓冲区地址SISIMOVCOUNT,4LAST:ROLEDX,4ANDDL,0FHCMPDL,10JCNEXTADDDL,7NEXT:ADDDL,30HMOVSI,DLINCSI;地址加地址加1 1DECCOUNT;计数计数JNZLASTRETN2_16ASCENDPCODEENDSENDBEGEXEEXE格式程序清单格式程序清单 代码转换代码转

22、换三三.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,十位,十位N

23、1,N1,个位个位N0N0设计一个设计一个AX10+BX AXAX10+BX AX的子程序供调用,首次调用的子程序供调用,首次调用时,令时,令AX=0,BX=N3,AX=0,BX=N3,共调用共调用4 4次,则次,则AXAX中即为等值的二进中即为等值的二进制数。制数。486CODESEGMENTUSE16ASSUMECS:CODENUMDW4567H;BCD;BCD码表示码表示BEG:MOVCX,4;4;4次调用次调用 MOVAX,0AGA:ROLNUM,4MOVBX,NUMANDBX,000FHIMULAX,10ADDAX,BXLOOPAGA显示显示AX中的二进制数中的二进制数返回返回DOS

24、CODEENDSENDBEG本例数据放在代码段!本例数据放在代码段!本例:本例:因为因为AXAX的的D D1515=0,=0,是正是正的有符号数,所以可用的有符号数,所以可用IMUL指令指令AX10+BXAXEXEEXE格式程序清单格式程序清单 代码转换代码转换三三.二进制数二进制数十进制数十进制数方法方法:比较法,恢复余数法,除法比较法,恢复余数法,除法 8 8位二进制数最大为位二进制数最大为1111111111111111,等值的等值的十十进制数为进制数为255255,比较法的关键:比较法的关键:判断某二进制判断某二进制数数(假设为假设为BEN单元的内容单元的内容)包含包含几个几个1001

25、00,几个,几个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屏幕屏幕 0DL 0DL DL+30H DL+30H屏幕屏幕(BEN)+30H(BEN)+30H屏幕屏幕 返回返回DOSDOS.486CMPDISPMACRONNLOCALLAST,NEXTMOVDL

26、,0;DL;DL清清0 0LAST:CMPBEN,NN;比较比较JCNEXT;BEN;BENNNNN转转INCDL;DL;DL加加1 1SUBBEN,NNJMPLASTNEXT:ADDDL,30HMOVAH,2INT21H;显示显示ENDMCODESEGMENTUSE16ASSUMECS:CODEBENDB10101110B;=174BEG:CMPDISP100CMPDISP10CMPDISP1MOVAH,4CHINT21HCODEENDSENDBEGEXEEXE格式程序清单格式程序清单 代码转换代码转换2.2.8 8位二进制数位二进制数十进制数,恢复余数法(请自学)十进制数,恢复余数法(请自

27、学)3.3.8 8位二进制数位二进制数十进制数,十进制数,“除权值求商除权值求商”的算法分析的算法分析把把1111010111110101B十进制数十进制数245245算法:算法:依次用权值依次用权值100,10,1100,10,1去除去除上次的余数,直到余数为上次的余数,直到余数为0 0时停止。时停止。每次除法所得的商数顺序每次除法所得的商数顺序排列,即为十进制数。排列,即为十进制数。1111010111001001100100101101102权值权值(100)(100)101010151011010余数为余数为0 0时止时止1权值权值(1)(1)100410110110101011010

28、权值权值(10)(10)1010例例.将将NUMNUM单元中的单元中的1616位二进制数,转换成十进制位二进制数,转换成十进制数显示。数显示。思路:思路:16 16 位二进制数:最大为位二进制数:最大为1111,其等值的十进制,其等值的十进制数为数为6553565535,故应判断,故应判断NUMNUM单元的数包含几个单元的数包含几个1000010000,几个几个10001000,几个,几个100100,几个,几个1010,几个,几个 1 1设计一个设计一个XXYYXXYY并显示商值的宏指令供调用,并显示商值的宏指令供调用,XXXX为为3232位,位,YYYY为为1616为二进制数。为二进制数。

29、DX,AXDX,AX为被除数为被除数486DIVIDEMACROXX,YYMOVAX,XXMOVDX,0MOVCX,YY;CX;CX为除数为除数DIVCX;AX=;AX=商商,且且1010B,DX=1010B,DX=余数余数MOVAH,0EHADDAL,30HINT10HENDMCODESEGMENTUSE16ASSUMECS:CODENUMDW65530 ;汇编后为二进制数汇编后为二进制数BEG:DIVIDENUM,10000DIVIDEDX,1000本题在代码段中设置数据,本题在代码段中设置数据,这是这是COMCOM格式?格式?EXEEXE格式?格式?如果改为:如果改为:BEG:MOV B

30、X,OFFSET NUMBEG:MOV BX,OFFSET NUM DIVIDE BX,10000 DIVIDE BX,10000 是错误的,为什么?是错误的,为什么?DIVIDEDX,100DIVIDEDX,10DIVIDEDX,1MOVAH,4CHINT21HCODEENDSENDBEG显示一位商值显示一位商值不能不能颠倒颠倒分析:分析:应写成应写成:DIVIDE CS:BX,10000DIVIDE CS:BX,10000 程序清单程序清单 代码转换代码转换4.84.8位二进制数位二进制数十进制数,十进制数,“除十取余除十取余”的算法分析的算法分析 把把1111010111110101十进

31、制数十进制数245245算法:算法:NN被被(10)(10)1010除,商再被除,商再被(10)(10)1010除除,直到商数为,直到商数为0 0时止。时止。每次所得的余数按倒序方式每次所得的余数按倒序方式排列显示。排列显示。编程技巧:编程技巧:每次除法的余数每次除法的余数栈,栈,除法结束后,再从堆栈中除法结束后,再从堆栈中依次弹出余数依次弹出余数+30H+30H屏。屏。110001111010110101010101010151010即即(10)1010110001010100410100商为商为0 0时止时止100010210108 8位位3232位二进制数位二进制数转换成十进制数,转换成

32、十进制数,通用的除法求余框通用的除法求余框图图:(书程序书程序,自学自学)设设N N为待转换的为待转换的8 8位位3232位二进制数位二进制数EAX=EAX=商,商,EDX=EDX=余数,余数,且余数肯定且余数肯定1010B1010B统计除法的次数统计除法的次数CX=0?CX=0?弹出余数弹出余数+30H+30H 显示显示 CX-1 CX CX-1 CX N EAX N EAX除数除数 1010B EBX 1010B EBX 0 CX 0 CX计数器计数器 0 EDX 0 EDX(EDX,EAX)EBX(EDX,EAX)EBX 余数余数堆栈堆栈 CX+1 CX CX+1 CX商为商为0 0?转

33、换完毕转换完毕Y YY YN NN NCODE SEGMENT USE16CODE SEGMENT USE16 ASSUME CS:CODE ASSUME CS:CODEBEN DB 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 SEGM

34、ENT USE16CODE SEGMENT USE16 ASSUME CS:CODE ASSUME CS:CODEBEN DB 10101110B ;=174BEN DB 10101110B ;=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

35、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 ;DL INC 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 ;显示显示 RET RETCMPDISP ENDPCMPDISP ENDPCODE ENDSCODE ENDS END BEG END BEG代码转换代码转换

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 初中资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁