汇编语言课程设计打字计时练习_第1页
汇编语言课程设计打字计时练习_第2页
汇编语言课程设计打字计时练习_第3页
汇编语言课程设计打字计时练习_第4页
汇编语言课程设计打字计时练习_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

前言汇编语言是计算机能够提供应用户使用的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。因而,对程序的空间和时间的要求很高的场合,汇编语言的应用是必不可少的。至于很多需要直接控制硬件的应用场合,那么更是非用汇编语言不可了。随着科学技术迅速开展,理工科大学生不仅需要掌握计算机方面的根本理论知识,而且还需要掌握根本的实验技能及一定的科学研究能力。通过课程设计,使学生稳固和加深微型计算机原理理论知识,通过实践进一步加强学生独立分析问题和解决问题的能力、综合设计及创新能力的培养,同时注意培养学生实事求是、严肃认真的科学作风和良好的实验习惯,为今后工作打下良好的根底。中文摘要在IBM-PC系统中,驻留的ROM中有8KB的BIOS。它实现对系统中种种常用设备的输入输出操作的管理。其中的16H中断调用即为键盘输入输出中断调用,实现从键盘输入字符到AL存放器、读键盘缓冲区字符到AL存放器、读取特殊功能键的状态等功能。本程序是一个在键盘上练习打字并能统计时间的程序,在缓冲区中预放了一些字母,运行时,可按照屏幕上显示的字母输入练习,每输入完一行按回车键后,可显示出练习输入的时间。通过它练习英文打字练习,并能够统计时间。程序运行时,使用自编的中断向量处理程序。程序退出时,恢复中断向量。关键词打字计时,存放器,缓冲区,中断向量目录1、系统分析…………11.1问题提出及功能要…………………11.2运行环境……………11.3本课题涉及的知识点………………12、系统总体设计………22.1设计思路……………22.2程序流程图…………33、详细设计……………43.1功能模块说明…………43.1.1定义数据段,设置主要参数………………43.1.2代码段………43.1.3使用子程序分化各子功能…………………43.2源程序…………………44、系统测试……………154.1实验步骤………………154.2运行程序………………164.3调试中出现的问题……175、软件使用说明………186、设计总结………197、参考文献………208、致谢………………211、系统分析1.1问题提出及功能要求设计一个在键盘上练习打字并能统计时间的程序。通过它练习英文打字练习,并能够统计时间。屏幕上显示出提示信息和练习例句,按照例句从键盘上输入字母即可,每输入完一行后按回车键,可显示出练习输入的时间和下一行例句。按Esc键可退出程序。1.2运行环境WindowsXP/98/2000操作系统、文本编辑器使用EDIT或NOTEPAD,汇编程序使用MASM.EXE,连接程序使用LINK.EXE,调试程序使用DEBUG.EXE。1.3本课题涉及的知识点定义数据段,设置主要参数:设置9号中断向量地址,9号中断向量首址,1C向量地址;定义时间参数为秒、分、小时。在代码段,调用中断8259、键盘中断、时钟中断、并设置打字计时文件程序顺序。整个程序使用序分化各子功能。2、系统总体设计2.1设计思路在键盘上练习的打字例句及其地址表、计时单元等预先放在DATA数据段中,自编的中断程序kbint检测按键时产生的中断,并把按键的扫描码转换为ASCII码存入缓存区buffer,这个工作和ROM09类型的键盘中断例行程序所完成的工作大致相同,只是在解释各个键时作了简化,即只解释了可显示字符,如英文字母、数字及一些符号;其他特殊键,如组合键、双态键、功能键等都未作解释,只作为字符码0来处理。在主程序局部保存原09类型的中断向量,设置自编例行程序的中断向量,设置中断屏蔽位,然后开中断。当键盘中断处理后,主程序中安排指令读取缓冲区中的字符并显示在屏幕上。在主程序的末尾,利用DOS功能恢复原09类型的中断向量,然后返回DOS。在显示键入的字符时,还应判断字符是否为回车(0DH)。如为回车符,说明一个句子输入完毕,此时调用显示时间的子程序显示出打字时间,然后顺序显示下一个例句。如果所存放的例句都已显示完,那么又从第一个例句开始显示,直至键入某一功能键〔如Esc键、Shift键等〕退出程序,结束打字练习。打字时间统计利用自定时器中断处理程序clint来完成。每输完一例句,计时一次。在此中断例行程序中,定时器中断的次数记录在计数单元count中,当count计数值为18时,sec计数单元加1,当sec计数值到达60时,min计数单元加1。因为输入完一个句子无论如何也不会到达小时级,所以对hours计数值的调整判断,实际上只起到退出定时器中断的作用。显示时间的子程序disptime分别将各遍野单元的二进制数转换为十进制数,并以min:sec:msec的形式显示出来。其中msec是由count记数值转换成的:count×1秒/18.2=count×55ms2.2程序流程图3、详细设计3.1功能模块说明3.1.1定义数据段,设置主要参数:缓冲区:BUFFER,BUFPT1,BUFPT23.1.2代码段调用中断8259,键盘中断,时钟中断,设置打字计时文件程序顺序3.1.3使用子程序分化各子功能DISPTIMEPROCNEARBINDECPROCNEAR;将二进制转化为十进制显示时间DECDIVPROCNEAR;转化成字符显示DISPCHARPROCNEARKBGETPROCNEAR;获取键盘键入的信息KBINTPROCNEAR;查表查到相应的字符RESET09PROC;重新设置09号中断RESET1CPROC;重新设置1c功能RESETPROC;回复1C与093.2源程序STACKSEGMENTPARASTACK'STACK'DB256DUP(0)TOPLABELWORDSTACKENDSDATASEGMENTPARAPUBLIC'DATA'BUFFERDB16HDUP(0);缓冲区大小BUFPT1DW0;缓冲区1BUFPT2DW0;缓冲区2KBFLAGDB0;参数,80H表示允许,00表示不允许PROMPTDB'*PLEASEPRACTISETYPING*',0DH,0AH,'$';定义提示语句SCANTABDB0,0,'1234567890-=',8,0;定义键盘DB'QWERTYUIOP[]',0DH,0;定义键盘第一行英文字母及符号DB'ASDFGHJKL;',0,0,0,0;键盘第二行英文字母及符号DB'ZXCVBNM,./',0,0,0;键盘第三行英文字母及符号DB'',0,0,0,0,0,0,0,0,0,0,0,0,0DB'789-456+1230.'******设置一些存储地址便于理解******EVENOLDCS9DW?;9号中断向量地址OLDIP9DW?;9号中断向量首地址******预设置打字练习的句子******STR1DB'ABCDEFGHIJKLMNOPQRSTUVWXYZ.';句子1DB0DH,0AH,'$'STR2DB'THEREARESOMENEWSPAPERSONTHETABLE.'DB0DH,0AH,'$'STR3DB'THEREARESOMECLOUDSINTHESKY.'DB0DH,0AH,'$'STR4DB'SHEALWAYSEATSHERLUNCHATNOON.'DB0DH,0AH,'$'STR5DB'IDONOTLIKEAUTUMNANDWINTER.'CRLFDB0DH,0AH,'$'COLONDB':','$'EVENSADDRDWSTR1,STR2,STR3,STR4,STR5******定义时间参数******COUNTDW0;记时器记数SECDW0;秒MINDW0;分HOURSDW0;小时SAVE_LCDW2DUP(?);1C向量地址DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKMAINPROCFARSTART:MOVAX,STACKMOVSS,AXMOVSP,OFFSETTOPPUSHDS;现场保护SUBAX,AXPUSHAXMOVAX,DATAMOVDS,AXMOVES,AX;*******将原中断向量09H保存在自设的单元中******MOVAH,0MOVAL,4INT21HMOVAH,0BHMOVBH,0MOVBL,4INT11HMOVAH,35H;取中断向量的功能调用MOVAL,09HINT21HMOVOLDCS9,ESMOVOLDIP9,BX;******设置自编处理程序的中断向量******PUSHDSMOVDX,SEGKBINT;自编中断类型程序段地址放入DSMOVDS,DXMOVDX,OFFSETKBINT;自编中断类型程序偏移地址放入DXMOVAL,09HMOVAH,25H;设置中断向量功能调用INT21HPOPDS;******将原中断向量1CH保存在自设的单元中******MOVAH,35HMOVAL,1CHINT21HMOVSAVE_LC,BXMOVSAVE_LC+2,ES;******设置自编处理程序的中断向量******PUSHDSMOVDX,SEGCLINTMOVDS,DXMOVDX,OFFSETCLINTMOVAL,1CHMOVAH,25HINT21HPOPDS;******允许键盘和定时器中断******INAL,21H;允许键盘和定时器中断ANDAL,11111100BOUT21H,AL;******设置显示方式******FIRST:MOVAH,0MOVAL,3INT10H;******显示提示信息******MOVDX,OFFSETPROMPT;显示提示信息MOVAH,9INT21H;******在屏幕上显例如句******MOVSI,0NEXT:MOVDX,SADDR[SI];显例如句MOVAH,09HINT21H;******初始化变量******MOVCOUNT,0;设置初值MOVSEC,0MOVMIN,0MOVHOURS,0;******允许更高一级的中断******STIFOREVER:CALLKBGETTESTKBFLAG,80HJNZENDINTPUSHAXCALLDISPCHARPOPAXCMPAL,0DHJNZFOREVERMOVAL,0AHCALLDISPCHAR;******显示时间******CALLDISPTIMELEADX,CRLFMOVAH,09HINT21H;******显例如句结束否?******ADDSI,2CMPSI,5*2JNENEXTJMPFIRST;******原来的中断向量******ENDINT:CLIPUSHDSMOVDX,SAVE_LCMOVAX,SAVE_LC+2MOVDS,AXMOVAL,1CH;恢复中断向量1CHMOVAH,25HINT21HPOPDSPUSHDSMOVDX,OLDIP9MOVAX,OLDCS9MOVDS,AXMOVAL,09HMOVAH,25HINT21HPOPDSSTIRETMAINENDP;******定时器中断处理程序******CLINTPROCNEARPUSHDSMOVBX,DATAMOVDS,BXLEABX,COUNTINCWORDPTR[BX]CMPWORDPTR[BX],18;初始化记数JNERETURNCALLINCTADJ:CMPHOURS,12;是否满12小时JLERETURNSUBHOURS,12;满足减去12RETURN:POPDSSTIIRETCLINTENDPINCTPROCNEARMOVWORDPTR[BX],0ADDBX,2INCWORDPTR[BX];BX内容自增1CMPWORDPTR[BX],60;和60比拟JNEEXITCALLINCTEXIT:RETINCTENDP;******显示打字练习时间******DISPTIMEPROCNEAR;显示时间主段MOVAX,MIN;分移动到AX存放器CALLBINDEC;显示数字MOVBX,0MOVAL,':'MOVAH,0EH;显示冒号INT10HMOVAX,SEC;秒移动到AXCALLBINDECMOVBX,0MOVAL,':'MOVAH,0EHINT10HMOVBX,COUNTMOVAL,55D;百分秒MULBLCALLBINDECRETDISPTIMEENDP******将二进转化为十进显示时间******BINDECPROCNEARMOVCX,100D;显示百位CALLDECDIVMOVCX,10D;显示十位CALLDECDIVMOVCX,1;显示个位CALLDECDIVRETBINDECENDPDECDIVPROCNEAR;转化成字符显示MOVDX,0DIVCXMOVBX,0ADDAL,30H;转换成ASCIIMOVAH,0EHINT10H;显示一个字符MOVAX,DXRETDECDIVENDP******获取键盘键入的信息******KBGETPROCNEARPUSHBXCLIMOVBX,BUFPT1;标志缓冲区的大小CMPBX,BUFPT2JNZKBGET2CMPKBFLAG,0;!=00H的时候,一直获取键盘JNZKBGET3STIPOPBXJMPKBGETKBGET2:MOVAL,[BUFFER+BX]INCBXCMPBX,16HJCKBGET3MOVBX,0KBGET3:MOVBUFPT1,BXPOPBXRETKBGETENDP;******键盘中断处理程序******KBINTPROCNEARPUSHBXPUSHAXINAL,60H;键盘输入存放器端口地址PUSHAXINAL,61H;控制商品存放器地址ORAL,80HOUT61H,AL;读数据ANDAL,7FH;第八位清0,ASCII只有7位OUT61H,ALPOPAXTESTAL,80HJNZKBINT2MOVBX,OFFSETSCANTAB;查表输出字符XLATSCANTAB;查表CMPAL,0JNZKBINT4MOVKBFLAG,80HJMPKBINT2KBINT4:MOVBX,BUFPT2MOV[BUFFER+BX],ALINCBXCMPBX,16HJCKBINT3MOVBX,0KBINT3:CMPBX,BUFPT1JZKBINT2MOVBUFPT2,BXKBINT2:CLIMOVAL,20HOUT20H,AL;送825920H端口POPAXPOPBXSTIIRETKBINTENDPDISPCHARPROCNEAR;显示字符PUSHBXMOVBX,0MOVAH,0EH;显示一个字符在AL里INT10H;显示一个字条符POPBXRETDISPCHARENDPCODEENDSENDSTART4、系统测试4.1实验步骤:翻开windows命令窗口进入masm程序的安装目录,汇编源文件,如图:图4.1.2汇编程序连接程序,并查看生成可执行文件weijia.exe。图4.1.3查看生成可执行文件关闭对话框,翻开可执行文件weijia.exe,开始打字计时练习。4.2运行程序:1〕设置主程序段显示提示信息,程序功能应该实现下列图所示:图4.2.1程序调试2〕调用DISPCHARPROCNEAR显示用户字条,调用DISPTIMEPROCNEAR显示时间,然后输出下一句提示程序应该实现下列图所示:图4.2.2程序调试3〕如此循环屡次,当第五个例句输入完成后,再返回第一句继续打字计时。图4.2.3程序调试4.3调试中出现的问题没有注意到要操作的目标数据〔内存中的数据〕的大小和使用的操作容器〔存放器〕的大小没有一致。另外,对于处理数据的ds:[bx]方式,如movds:[bx],dxaddbx,2在循环中应注意bx的递增或递减大小,如果处理字节,比方用dl,循环中就加或减1;如果处理字,比方用dx,就加或减2。在以后应该留意这个一致性。在8086上,ss和sp都是16位的,栈所处理数据的最小单位也是16位的,即最小是一个字,栈一次读和一次写,都至少是一个字那么大。5、软件使用说明书程序设计时,在预先设置的堆栈中存放一些字符串例句,每次打字之前,屏幕上先显示出一个例句,然后打字员按照例句,将句中字符通过键盘输入。这个过程可反复进行,当键入一个功能键时,退出打字计时程序。自行编制键盘中断和时间中断处理程序,并保存原中断向量。程序运行时,使用自编的中断向量处理程序。程序退出时,恢复中断向量。6、设计总结课程设计对我们多数初学汇编的学生来说,确实是个一座顶峰。翻越它是要付出诸多努力的。我也是摸索了好久才弄明白它的。在此做个小结,也许对自己今后的学习有一些借鉴的作用。为了防止存放器冲突的问题,在设计子程序时,应把所有用到的存放器都入栈保存,但用来传递参数和结果的存放器那么要注意,不必入栈的就不入栈了,以免得不到预期的结果。可以把存放器当作变量来看待,有时候它存储的是数据变量〔如把BP当作字符个数的记录器〕,而有时候它存储的是地址变量〔如DI、SI〕;内存中的数据,按它们的结构关系,那么可以把它们看待成数组,我们对数组,可以通过首地址来访问它们。传递参数和结果的,一般可以用存放器,也可以用一段内存空间来传递,特别是需要传递的数据较多的时候。在设计子程序时,往往涉及到许多的循环,这时候就要注意把不该循环的变量要放在循环体外。一周的汇编语言课程设计结束了,我的收获是很大的。通过课程设计的编程和对编程过程中遇到的问题的思考,有效的提高了我对汇编的认识和理解,切实的提高了我的编程能力,补全了我的缺乏。通过这次课程设计,我稳固所了学过的知识,能用汇编语言熟练地运用顺序、选择、循环三大结构,进一步掌握了各个指令的功能,特别是转向指令,掌握了子程序的定义及调用,以及正确地运用DEBUG指令。在整个程序的编写中,调试占了很大局部的时间。要想写好汇编语言的程序,必须认真对待代码的每一个细节,还必须熟练的掌握debug命令,这对程序的调试是非常重要的。通过这次实际动手能力的培养,我进一步熟悉了汇编语言的结构和使用方法,根本到达了能独立阅读、编制和调试一定规模的汇编语言程序的水平另外,我觉得,学习汇编有一个比拟大的好处,就是可以了解到在电脑中每一个字节数据的来龙去脉,我觉得学习汇编可以发挥一下自己的空间想像力,特别是对内存中数据的组织、存储关系的想像。当然,学习汇编还有另一个重要的收获,就是如何处理数据的问题。7、参考文献《IBM-PC汇编语言程序设计》,沈美明、温冬蝉,清华大学出版社,2001。《IBM-PC汇编语言程序设计实验教程》,沈美明、温冬蝉,清华大学出版社1992《80X86汇编语言程序设计教程》,杨季文等,清华大学出版社,1998。《Windows环境下32位汇编语言程序设计》,罗云彬,电子工业出版社,2002。《汇编语言程序设计》,张志明等,重庆大学出版社,1997《汇编语言程序设计》,吴向军等,高等教育出版社,2002《汇编语言程序设计》,钱晓捷等,电子工业出版社,2000《IBM-PC80×86汇编语言程序设计》,王保恒,国防科技大学出版社,1992《汇编语言程序设计》,钱晓捷,电子工业出版社,2003《汇编语言程序设计教程与实训》赵润林、范国渠,北京大学出版社,2006《微机原理、汇编语言与接口技术》,唐瑞庭,中国水利水电出版社,20068、致谢在这次汇编语言课程设计中,我的课设题目是打字计时练习。在这次课设中,我对汇编语言的语法和指令有了进一步的认识,对汇编语言的编程有进一步的掌握,这都归功于刘老师和同学的帮助。在此,我对在课设中对我有帮助的同学和老师表示衷心的感谢。STACKSEGMENTPARASTACK'STACK'DB256DUP(0)TOPLABELWORDSTACKENDSDATASEGMENTPARAPUBLIC'DATA'BUFFERDB16HDUP(0);缓冲区大小BUFPT1DW0;缓冲区1BUFPT2DW0;缓冲区2KBFLAGDB0;参数,80H表示允许,00表示不允许PROMPTDB'*PLEASEPRACTISETYPING*',0DH,0AH,'$';定义提示语句SCANTABDB0,0,'1234567890-=',8,0;定义键盘DB'QWERTYUIOP[]',0DH,0;定义键盘第一行英文字母及符号DB'ASDFGHJKL;',0,0,0,0;键盘第二行英文字母及符号DB'ZXCVBNM,./',0,0,0;键盘第三行英文字母及符号DB'',0,0,0,0,0,0,0,0,0,0,0,0,0DB'789-456+1230.'******设置一些存储地址便于理解******EVENOLDCS9DW?;9号中断向量地址OLDIP9DW?;9号中断向量首地址******预设置打字练习的句子******STR1DB'ABCDEFGHIJKLMNOPQRSTUVWXYZ.';句子1DB0DH,0AH,'$'STR2DB'THEREARESOMENEWSPAPERSONTHETABLE.'DB0DH,0AH,'$'STR3DB'THEREARESOMECLOUDSINTHESKY.'DB0DH,0AH,'$'STR4DB'SHEALWAYSEATSHERLUNCHATNOON.'DB0DH,0AH,'$'STR5DB'IDONOTLIKEAUTUMNANDWINTER.'CRLFDB0DH,0AH,'$'COLONDB':','$'EVENSADDRDWSTR1,STR2,STR3,STR4,STR5******定义时间参数******COUNTDW0;记时器记数SECDW0;秒MINDW0;分HOURSDW0;小时SAVE_LCDW2DUP(?);1C向量地址DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKMAINPROCFARSTART:MOVAX,STACKMOVSS,AXMOVSP,OFFSETTOPPUSHDS;现场保护SUBAX,AXPUSHAXMOVAX,DATAMOVDS,AXMOVES,AX;*******将原中断向量09H保存在自设的单元中******MOVAH,0MOVAL,4INT21HMOVAH,0BHMOVBH,0MOVBL,4INT11HMOVAH,35H;取中断向量的功能调用MOVAL,09HINT21HMOVOLDCS9,ESMOVOLDIP9,BX;******设置自编处理程序的中断向量******PUSHDSMOVDX,SEGKBINT;自编中断类型程序段地址放入DSMOVDS,DXMOVDX,OFFSETKBINT;自编中断类型程序偏移地址放入DXMOVAL,09HMOVAH,25H;设置中断向量功能调用INT21HPOPDS;******将原中断向量1CH保存在自设的单元中******MOVAH,35HMOVAL,1CHINT21HMOVSAVE_LC,BXMOVSAVE_LC+2,ES;******设置自编处理程序的中断向量******PUSHDSMOVDX,SEGCLINTMOVDS,DXMOVDX,OFFSETCLINTMOVAL,1CHMOVAH,25HINT21HPOPDS;******允许键盘和定时器中断******INAL,21H;允许键盘和定时器中断ANDAL,11111100BOUT21H,AL;******设置显示方式******FIRST:MOVAH,0MOVAL,3INT10H;******显示提示信息******MOVDX,OFFSETPROMPT;显示提示信息MOVAH,9INT21H;******在屏幕上显例如句******MOVSI,0NEXT:MOVDX,SADDR[SI];显例如句MOVAH,09HINT21H;******初始化变量******MOVCOUNT,0;设置初值MOVSEC,0MOVMIN,0MOVHOURS,0;******允许更高一级的中断******STIFOREVER:CALLKBGETTESTKBFLAG,80HJNZENDINTPUSHAXCALLDISPCHARPOPAXCMPAL,0DHJNZFOREVERMOVAL,0AHCALLDISPCHAR;******显示时间******CALLDISPTIMELEADX,CRLFMOVAH,09HINT21H;******显例如句结束否?******ADDSI,2CMPSI,5*2JNENEXTJMPFIRST;******原来的中断向量******ENDINT:CLIPUSHDSMOVDX,SAVE_LCMOVAX,SAVE_LC+2MOVDS,AXMOVAL,1CH;恢复中断向量1CHMOVAH,25HINT21HPOPDSPUSHDSMOVDX,OLDIP9MOVAX,OLDCS9MOVDS,AXMOVAL,09HMOVAH,25HINT21HPOPDSSTIRETMAINENDP;******定时器中断处理程序******CLINTPROCNEARPUSHDSMOVBX,DATAMOVDS,BXLEABX,COUNTINCWORDPTR[BX]CMPWORDPTR[BX],18;初始化记数JNERETURNCALLINCTADJ:CMPHOURS,12;是否满12小时JLERETURNSUBHOURS,12;满足减去12RETURN:POPDSSTIIRETCLINTENDPINCTPROCNEARMOVWORDPTR[BX],0ADDBX,2INCWORDPTR[BX];BX内容自增1CMPWORDPTR[BX],60;和60比拟JNEEXITCALLINCTEXIT:RETINCTENDP;******显示打字练习时间******DISPTIMEPROCNEAR;显示时间主段MOVAX,MIN;分移动到AX存放器CALLBINDEC;显示数字MOVBX,0MOVAL,':'MOVAH,0EH;显示冒号INT10HMOVAX,SEC;秒移动到AXCALLBINDECMOVBX,0MOVAL,':'MOVAH,0EHINT10HMOVBX,COUNTMOVAL,55D;百分秒MULBL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论