计算器说明书.doc_第1页
计算器说明书.doc_第2页
计算器说明书.doc_第3页
计算器说明书.doc_第4页
计算器说明书.doc_第5页
已阅读5页,还剩55页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

汇编语言实训任务书题目: 计算器 学生姓名学号: 杜政毅12730102,惠攀龙12730108, 郭益婷13730104 班级: 13软件工程1班 题目类型:软件工程(R) 指导教师: 刘树群 一、设计目的用汇编语言编程设计一个简单的计算器,实现四则运算数的交互式输入,并显示运算结果。通过设计,掌握键盘和鼠标控制、显示输出和基本算术运算指令的应用,进一步提高综合运用知识的能力。二、设计内容(包括原始数据、技术参数、条件、设计要求等):使用按键式操作,对任意给定的正确四则运算序列,能按照意图分部计算出其计算的有效结果数值并输出。三、设计要求题目的选择是根据汇编语言的特点主要针对系统内部的一些中断调用、系统功能调用、系统数据处理、文件数据处理、以及相关的API而设计的,是对所学课程知识较为系统的应用。由于汇编语言编程相对其他语言编程比较复杂,因此,在设计上应把重点放在程序的功能实现上,不要太在意程序的结构和显示界面的设计。不要局限于题目所规定的要求,可以灵活裁减,设计出功能更完善程序。另外,也可以自己设计题目,同时,提出详细的功能描述,经指导老师审查同意后也可作为课程设计的题目。四、提交的成果1. 设计说明书一份,内容包括:包含任务书一份1) 中文摘要100字,关键词3-5个。2) 实训题目、内容、要求。3)总体设计(包含几大功能模块)。4)详细设计(各功能模块的具体实现算法流程图)5)数据结构设计描述,各模块(函数)的功能介绍,参数说明等。6)调试分析(包含各模块的测试用例,及测试结果。)7)总结(实训完成了哪些功能,还有哪些地方需要改进,及通过实训有何收获,调试程序的体会等)8) 参考文献、致谢等。五、主要参考资料1李敬兆等编.汇编语言程序设计.合肥:中国科学技术大学出版社,2008.92李敬兆等编.汇编语言程序设计实验教程及习题解答.合肥:中国科学技术大学出版社,2008.93王爽等编.汇编语言.北京:清华大学出版社,2003.54曹加恒等编.新一代汇编语言课程设计.北京:高等教育出版社,2003.65杨路明等编.汇编语言程序设计.长沙:中南大学出版社,2005.86詹仕华等编.汇编语言程序设计.北京:中国电力出版社,2008.27詹仕华等编.汇编语言程序设计习题解答及课程设计、设计辅导.北京:中国电力出版社,2008.28宋彩莉等编.汇编语言程序设计学习指导.西安:西安交通大学出版社,2008.2六、各阶段时间安排(共1周)日期内容地点星期一教师讲解设计要求,准备参考资料实验室星期二分析系统,方案设计实验室星期三方案设计,编程实验室星期四调试程序,书写实训说明书实验室星期五完成实训说明书,答辩实验室摘要本次课程设计的题目是用汇编语言实现一个简单的计算器,要求:编写一个程序,每运行一次可执行程序,可 以实现加减乘除四则运算。计算器是最简单的计算工具,简单计算器具有加、减 乘、除四项运算功能。想要用汇编语言实现简单的计算器,就必须通过对数据存储,寄存器的使用 加减乘除相关指令以及模块的调用等汇编语言知识进行运用,以实现一个基本功能完善,界面友好,操作简便易行的计算器。用汇编语言实现简单计算器还涉及到输入输出模块的设计,加减乘除运算的判断以及退出程序的判断的设计。通过对各种指令的合理使用,设计各个功能模块。当实现各个程序模块后,通过程序的调用最终实现一个简单的计算器。关键字:汇编语言,仿Windows计算器,四则运算,调用,功能模块目录一、程序设计目的及要求- 3 -1.1设计目的- 3 -1.2设计内容- 3 -1.3设计要求- 3 -二、系统总体分析- 4 -三、详细设计- 5 -3.1主程序及窗口主程序结构- 5 -3.2各功能模块的具体实现- 5 -3.3源文件(Calculator.asm)中各个模块分析- 8 -四、调试过程及分析- 17 -4.1窗口检测- 17 -4.2四则运算、开方以及倒数运算测试- 17 -五、说明书- 19 -六、心得体会- 20 -七、参考文献- 21 -八、致谢- 22 -附录(源程序)- 23 -一、程序设计目的及要求1.1设计目的本次程序的设计题目是使用汇编实现设计一个功能及界面风格类似于Windows计算器的计算器程序,要求实现标准型计算器,其中包含基本的四则运算、倒数运算、开方运算。支持存储区的存储、清除、调出、累加等功能。计算器是最简单的计算工具,简单计算器具有加、减、乘、除四项运算功能。通过使用汇编语言设计实现简单计算器,以此进一步了解和掌握对数据存储,寄存器的使用,加减乘除相关指令以及模块的调用等汇编语言知识的有效运用。本次课程设计以实现一个基本功能完善,界面友好,操作简便易行的计算器为最终目的。通过对具有加减乘除基本功能的计算器的设计实现,学会使用汇编语言实现输入输出模块的设计,模块合理调用的设计,加减乘除运算的判断以及退出程序的判断的设计。通过对各种指令的合理使用,熟悉并加深对各种指令的用法。学会使用汇编语言设计各个功能模块。当实现各个程序模块后,学会通过程序的调用最终实现一个具有基本计算功能的简单计算器。1.2设计内容使用按键式操作,对任意给定的正确四则运算序列,能按照意图分部计算出其计算的有效结果数值并输出。1.3设计要求a. 遵循模块化、结构化的编程思路,用汇编实现简单的算法。 u b.程序必须正确运行 u c.程序简明易懂,多标明注释,具有良好的程序书写风格d.适当优化程序,提高程序的运行效率二、系统总体分析本次汇编语言课程设计的最终目的是要实现一个简单计算器,要求编写一个程序,每运行一次可执行程序,可以实现数的加减乘除四则运算。比如,十进制数的加减乘除四则运算。我们曾经学习过两个具体数字进行加减法运算,但是对于简单计算器用汇编语言实现难点在于这两个要做运算的数是未知的,是由自己调用中断输入到屏幕上并要用程序存储起来的数,然后才能对这两个数进行运算,而且做的是加法运算、减法运算乘法运算还是除法运算也未可知,为此我们还要判断用户所输入的运算是四则运算中的哪一个运算。此外,运算过程中的进位或是借位,选择用什么样的方式进行输出,如何实现清屏等也是要解决的问题。设计程序进行判断所输入的算式是做加法运算、减法运算、乘法运算还是除法运算,即判断输入的运算符是+号、-号、*号、/号中的哪一个,因为输入的格式固定了,所以只需要把存进数据区的第三个字符拿来与加减乘除四个运算符号进行比较,和哪一个运算符号一样就调用相对应的运算模块进行计算。根据计算器程序所要实现的功能完成各个功能模块。设计程序主体部分,根据主体部分所需的功能模块对各个子模块一一进行设计编写。子模块中包含有:do_add加法运算模块,do_sub减法运算模块,do_mul乘法运算模块,do_div除法运算模块,input输入模块等。 最后还要对这个简易计算器进行功能完善。为了使程序符合我们使用者的操作习惯,设计当用户根据提示信息输入一个算式后,按下enter键或是=符号键时,程序依据输入的算式进行计算,并将结果显示在屏幕上。如果用户输入错误,则返回,提示信息让用户重新输入算式,当用户按下Q或q键时退出程序。在各个子功能模块设计好的情况下,通过主题模块的合理调用,最终实现一个具有简单运算功能的计算器。三、详细设计3.1主程序及窗口主程序结构按照系统总体分析,主程序用于获得并保存本程序的句柄,并调用窗口主程序WinMain创建窗口并进入消息循环。WinMain程序将获取的消息分发给消息处理程序Calculate进行处理。消息处理程序Calculate用于相应窗口创立、销毁、按键等消息并进行处理。主程序和窗口主程序结构及消息处理程序Calculate结构图如3-1所示:图3-1主程序和窗口主程序及消息处理程序结构图主程序流程图及原代码如下:invoke GetModuleHandle,NULL ;获得并保存本程序的句柄mov hInstance,eaxinvoke WinMain,hInstance,0,0,SW_SHOWDEFAULTinvoke ExitProcess,eax ;退出程序,返回eax值3.2各功能模块的具体实现(1) 将Calculator.inc头文件中统一定义程序所需的头文件及引入库。源程序如下:;- 头文件声明 include windows.inc include user32.inc include kernel32.inc include comctl32.inc include masm32.inc include shell32.inc;- 引入库声明 includelib user32.lib includelib comctl32.lib includelib masm32.lib(2) 在Calculator.inc中定义程序所需常量如下: ID_NUM0 equ 300 ID_NUM1 equ 301 ID_NUM2 equ 302 ID_NUM3 equ 303 ID_NUM4 equ 304 ID_NUM5 equ 305 ID_NUM6 equ 306 ID_NUM7 equ 307 ID_NUM8 equ 308 ID_NUM9 equ 309 ID_NEG equ 310 ID_POINT equ 311 ID_MUL equ 312 ID_DIV equ 313 ID_SUB equ 314 ID_ADD equ 315 ID_EQU equ 316 ID_PER equ 317 ID_DAO equ 318 ID_SQRT equ 319 ID_MC equ 320 ID_MR equ 321 ID_MS equ 322 ID_MPLUS equ 323 ID_M equ 324 ID_BACK equ 325 ID_CE equ 326 ID_C equ 327 ID_RESULT equ 328 ID_COPY equ 1001 ID_PASTE equ 1002 ID_STANDARD equ 1003 ID_SCIENCE equ 1004 ID_PACKET equ 1006 ID_HELP equ 1007 ID_ABOUT equ 1008 ID_EXIT equ 1009 ID_NOTIFYICON equ 2000 WM_SHELLNOTIFY equ WM_USER+1(3)在Calculator.inc声明了自定义函数的原型,主要有窗口主程序 Calculate、消息处理程序、数字分组子程序、数字不分组子程序、数字按键消息处理程序、显示数据子程序、显示存储信息子程序、计算结果子程序、双目运算符消息处理程序、初始化计算器子程序、等于消息处理程序等函数声明如下:;- 函数声明WinMainPROTO :DWORD, :DWORD, :DWORD, :DWORD ; 窗口主程序 Calculate PROTO :DWORD,:DWORD,:DWORD,:DWORD ; 消息处理程序PackNum PROTO ; 数字分组子程序UnpackNum PROTO ; 数字不分组子程序 BtnNum PROTO :DWORD ; 数字按键消息处理程序ShowNum PROTO ; 显示数据子程序ShowTextM PROTO ; 显示存储信息子程序Init PROTO ; 初始化计算器子程序GetResult PROTO ; 计算结果子程序BtnOperator PROTO ; 双目运算符消息处理程序BtnEqual PROTO ; 等于消息处理程序(4)数据段定义如下:.dataHelpFile db rc.hlp,0 ;帮助文档hInstance dd ? ;主程序句柄hEdit dd ? ;输出文本框句柄hTextM dd ? ;记忆标签句柄hMenu dd ? ;菜单句柄hIcon dd ? ;Icon句柄DialogName db Calculator,0 ;对话框名称MenuName db Menu,0 ;菜单名称IconName db Icon,0 ;Icon名称TextM db M,0 ;MOutput db 0.,0,30 dup(0) ;输出字符串IsStart db 1 ;判断是否运算开始HasPoint db 0 ;判断是否存在小数点HasEqueal db 0 ;判断是否存在等号Remember dq 0.0 ;记忆数据Number dq 0.0 ;记录临时数据Result dq 0.0 ;记录结果Operand dq 0.0 ;记录操作数IsPacket db 0 ;数字分组Operator db . ;记录运算符IsError db 0 ;记录是否出现异常Div0 db 除数不能为零。,0FunctionError db 函数输入无效。,0hGlobal HANDLE ? ;剪切板内存块句柄pGlobal dd ? ;pointer to allocate memoryNumLittle REAL8 1.0E-12 Num10 REAL8 10.0 ;实数10Num100 REAL8 100.0 ;实数100NotifyIcon NOTIFYICONDATA ;通知栏图标3.3源文件(Calculator.asm)中各个模块分析(1) WinMain主程序用于创建窗口并获取和分发消息。a.窗口创建,主要包括窗口类的注册、窗口的风格以及窗口消息处理和更新窗口等。WinMain proc hInst:DWORD, hPrevInst:DWORD, CmdLine:DWORD, CmdShow:DWORDLOCAL wc:WNDCLASSEX ;窗口类LOCAL msg:MSG ;消息LOCAL hWnd:HWND ;对话框句柄mov wc.cbSize,sizeof WNDCLASSEX ;WNDCLASSEX的大小mov wc.style,CS_BYTEALIGNWINDOW or CS_BYTEALIGNWINDOW ;窗口风格or CS_HREDRAW or CS_VREDRAWmov wc.lpfnWndProc,OFFSET Calculate ;窗口消息处理函数地址mov wc.cbClsExtra,0 ;在窗口类结构后的附加字节数,共享内存mov wc.cbWndExtra,DLGWINDOWEXTRA ;在窗口实例后的附加字节数(!注意点)mov eax,hInstmov wc.hInstance,eax ;窗口所属程序句柄mov wc.hbrBackground,COLOR_BTNFACE+1 ;背景画刷句柄mov wc.lpszMenuName,NULL ;菜单名称指针mov wc.lpszClassName,OFFSET DialogName ;类名称指针invoke LoadIcon,hInst,addr IconName ;加载Iconmov wc.hIcon,eax ;图标句柄invoke LoadCursor,NULL,IDC_ARROWmov wc.hCursor,eax ;光标句柄mov wc.hIconSm,0 ;窗口小图标句柄invoke RegisterClassEx,addr wc ;注册窗口类invoke CreateDialogParam,hInst,addr DialogName,0,addr Calculate,0 ;调用对话框窗口mov hWnd,eax ;保存对话框句柄invoke ShowWindow,hWnd,CmdShow ;最后一个参数可设置为b.消息处理,主要包含窗口的更新、消息循环、获取消息以及键盘转换消息、消息的分发和消息循环的结束。SW_SHOWNORMALinvoke UpdateWindow,hWnd ;更新窗口StartLoop: ;消息循环invoke GetMessage,addr msg,0,0,0 ;获取消息cmp eax,0je ExitLoopinvoke TranslateMessage,addr msg ;转换键盘消息invoke DispatchMessage,addr msg ;分发消息jmp StartLoopExitLoop: ;结束消息循环mov eax,msg.wParamretWinMain endp(2)消息处理程序用于处理用户消息,其中包括窗口的显示、关闭、隐藏和最小化以及数字按钮、开方按钮、粘贴复制等热键操作。a.窗口消息处理,窗口最大化、最小化、隐藏和显示窗口等消息处理。.if aParam=SIZE_MINIMIZED ;最小化mov NotifyIcon.cbSize,sizeof NOTIFYICONDATApush hWinpop NotifyIcon.hwndmov NotifyIcon.uID,ID_NOTIFYICONmov NotifyIcon.uFlags,NIF_ICON+NIF_MESSAGE+NIF_TIPmov NotifyIcon.uCallbackMessage,WM_SHELLNOTIFYmov eax,hIconmov NotifyIcon.hIcon,eaxinvoke lstrcpy,addr NotifyIcon.szTip,addr ProgramNameinvoke ShowWindow,hWin,SW_HIDE ;隐藏窗口;invoke Shell_NotifyIcon,NIM_ADD,addr NotifyIcon.endif.elseif uMsg = WM_SHELLNOTIFY.if aParam=ID_NOTIFYICON.if (bParam=WM_LBUTTONDOWN) ;单击通知栏图标invoke ShowWindow,hWin,SW_SHOW ;显示窗口invoke Shell_NotifyIcon,NIM_DELETE,addr NotifyIcon ;删除通知栏图标.elseif (bParam=WM_RBUTTONDOWN) ;右键通知栏图标invoke GetCursorPos,addr ptinvoke GetSubMenu,hMenu,3invoke TrackPopupMenu,eax,TPM_LEFTALIGN,pt.x,pt.y,NULL,hWin,NULL.endif invoke ShowNum.endifb.部分按钮的热键操作,数字按钮和运算按钮的操作。.elseif uMsg = WM_CHAR ;热键操作mov eax,aParamsub eax,0add eax,ID_NUM0.if (eax=ID_NUM0) & (eax= ID_MUL) & (eax = ID_ADD) ;双目运算符按钮invoke BtnOperator.elseif eax = ID_EQU ;等于按钮invoke BtnEqual.elseif eax = ID_PER ;百分号按钮mov Operator,*invoke GetResultinvoke UnpackNuminvoke StrToFloat,addr Output, addr Numberfinitfld Numberfld Num100fdivfstp Numberinvoke FloatToStr2,Number,addr Outputinvoke ShowNum.elseif eax = ID_DAO ;倒数按钮invoke UnpackNuminvoke StrToFloat,addr Output, addr Numberfinitfld Numberfldzfcomi ST(0),ST(1)jnz NotZeromov IsError,1invoke SendMessage,hEdit,WM_SETTEXT,0,addr Div0retNotZero: fstp Numberfstp Numberfld1fld Numberfdiv.if HasEqueal=1fst Result.endiffstp Numberinvoke FloatToStr2,Number,addr Outputinvoke ShowNumc 复制粘贴按钮,主要包括字符串的复制粘贴、剪切板的清空等功能的实现。 .elseif eax = ID_COPY ;复制invoke GlobalAlloc,GMEM_MOVEABLE,35 ;配置一个内存块mov hGlobal ,eaxinvoke GlobalLock,hGlobal ;锁定内存块mov pGlobal ,eaxlea esi,Outputmov edi,pGlobalmov ecx,35rep movsb ;复制字符串invoke GlobalUnlock,hGlobal ;解锁内存块invoke OpenClipboard, NULL ;打开剪切板invoke EmptyClipboard ;清空剪切板invoke SetClipboardData,CF_TEXT,hGlobal ;把内存句柄交给剪贴簿invoke CloseClipboard ;关闭剪切板.elseif eax = ID_PASTE ;粘贴invoke IsClipboardFormatAvailable,CF_TEXT ;确定剪贴簿是否含有CF_TEXT格式的数据invoke OpenClipboard,NULL ;打开剪切板invoke GetClipboardData,CF_TEXT ;得到代表文字的内存块代号mov hGlobal,eaxinvoke GlobalLock ,hGlobal ;解锁内存块mov pGlobal,eaxmov ecx,35lea edi,Outputmov esi,eaxrep movsb ;复制字符串invoke GlobalUnlock ,hGlobal ;解锁内存块invoke CloseClipboard ;关闭剪切板invoke ShowNum(3)PackNum函数将输出数据的字符串Output进行数字分组。它首先获取小数点以前的数字位数并保存在寄存器eax中,然后将(eax-1)/3即为需要添加的字符,数目,并保存在eax中,对于小数点以后的字符都向后移动eax位,对于小数点以前的字符,向后移动eax位并用ecx计数,当ecx计数到3是添加字符,并将ecx设为1且eax减一,重复上述步骤直到eax等于0。函数源代码如下:PackNum proc USES eax ebx ecx edx lea esi,Output mov eax,0 .while (BYTE PTResi!=.) inc eax inc esi .endw .while (BYTE PTResi!=0) inc esi .endw dec eax mov edx,0 mov ecx,3 div ecx .while (BYTE PTResi!=.) mov bx,esi mov esi+eax,bx dec esi .endw mov bx,esi mov esi+eax,bx dec esi mov ecx,0 .while (eax!=0) .if(ecx3) mov bx,esi mov esi+eax,bx inc ecx .else mov BYTE PTResi+eax, dec eax mov ecx,1 .endif dec esi .endw lea esi,Output .while (BYTE PTResi!=0) mov bx,esi inc esi .endw retPackNum endp(4)UnpackNum函数将进行数字分组输出的字符串Output解分组。它首先获取Output地址存在esi中,然后ecx赋0,并将Output中字符向前移动ecx个单位,遇见,字符则将ecx加1,直到字符串结束。函数源代码如下:UnpackNum proc USES ecx lea esi,Output mov ecx,0 .while (BYTE PTResi+ecx!=0) .if(BYTE PTResi=,) inc ecx .endif mov bx,esi+ecx mov esi,bx inc esi .endw retUnpackNum endp(5) ShowNum函数将Output字符串处理后在文本框中显示出来。它首先调UnpackNum函数对Output解分组,然后获取Output地址存在esi、edi中,通过循环将Output尾地址存在esi中,将字符.地址存在edi中,如果edi等于esi则表明Output中无字符.,则在结尾添加字符.。如果IsPacked等于1则对Output调用UnpackNum函数对其分组,最后向文本框发送WM_SETTEXT消息显示数据。 函数源代码如下:ShowNum proc invoke UnpackNum lea esi,Output lea edi,Output .while (BYTE PTResi!=0) inc esi .endw .while (BYTE PTRedi!=.) & (ediesi) inc edi .endw .if esi=edi mov BYTE PTResi,. mov BYTE PTResi+1,0 .endif .if IsPacket=1 invoke PackNum .endif invoke SendMessage,hEdit,WM_SETTEXT,0,addr Output retShowNum endp(6)BtnNum函数响应数字按钮消息,向文本框中添加字符。函数源代码如下:BtnNum proc USES eax,Num:DWORD lea esi,Output mov eax,Num sub eax,252 .if IsStart=1 mov esi,eax inc esi mov BYTE PTResi,. inc esi mov BYTE PTResi,0 mov IsStart,0 .else .while BYTE PTResi!=. inc esi .endw .if HasPoint=1 .while BYTE PTResi!=0 inc esi .endw mov esi,ax inc esi mov BYTE PTResi,0 .else .if BYTE PTROutput=0 lea esi,Output mov esi,eax mov BYTE PTResi+1,. mov BYTE PTResi+2,0 .else mov esi,eax inc esi mov BYTE PTResi,. inc esi mov BYTE PTResi,0 .endif .endif .endif invoke ShowNum ret BtnNum endp(7)BtnOperator函数响应运算符按钮消息,进行运算并输出结果。首先判断是否为等号,如果不是则调用GetResult函数先进行一次运算,然后将当前操作符存入Operator变量中。函数源代码如下:BtnOperator proc USES eax .if HasEqueal!=1 invoke GetResult .endif .if eax = ID_MUL mov Operator,* .elseif eax = ID_DIV mov Operator,/ .elseif eax = ID_SUB mov Operator,- .elseif eax = ID_ADD mov Operator,+ .endif mov HasEqueal,0 retBtnOperator endp(8)BtnEqual函数响应等号按钮消息,进行运算并输出结果。首先判断是否为起始状态,如果不是则调用GetResult函数,并将HasEqual变量置1。函数源代码如下:BtnEqual proc .if (IsStart=1) & (HasEqueal=0) fstp Number fst Number fld Number .endif invoke GetResult mov HasEqueal,1 retBtnEqual endp(9)ShowTextM函数判断Remember中的值是否为0,如果不是是则在标签中显示M,否则清空标签中内容。函数源代码如下:ShowTextM proc fld NumLittle fldz fsub Remember fabs fcomi ST(0),ST(1) ja NotZero invoke SendMessage,hTextM,WM_SETTEXT,0,NULL jmp PopNumLittleNotZero:invoke SendMessage,hTextM,WM_SETTEXT,0,addr TextMPopNumLittle:fstp Operand fstp Operand mov IsStart,1 mov HasPoint,0 retShowTextM endp(10)Init函数负责进行必要的初始化操作,如对状态变量的初始化以及的FPU的初始化。函数源代码如下:Init proc mov IsStart,1 ;初始化 mov HasPoint,0 ;清除小数点 mov HasEqueal,0 fldz fst Number ;清除结果 fst Operand mov Operator,. ;清除运算符 mov IsError,0 finit ;初始化FPU retIn

温馨提示

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

评论

0/150

提交评论