收藏 分销(赏)

汇编语言实验.pptx

上传人:天**** 文档编号:4224227 上传时间:2024-08-26 格式:PPTX 页数:23 大小:457KB 下载积分:10 金币
下载 相关 举报
汇编语言实验.pptx_第1页
第1页 / 共23页
汇编语言实验.pptx_第2页
第2页 / 共23页


点击查看更多>>
资源描述
实验一实验一MASMMASM上机练习实验上机练习实验vv实验目的实验目的实验目的实验目的 vv实验预习要求实验预习要求实验预习要求实验预习要求 vv实验环境实验环境实验环境实验环境 vv实验原理实验原理实验原理实验原理 vv实验内容实验内容实验内容实验内容 vv实验习题实验习题实验习题实验习题 实验目的实验目的1 1学习及掌握汇编语言源程序的书写格式和要求。学习及掌握汇编语言源程序的书写格式和要求。学习及掌握汇编语言源程序的书写格式和要求。学习及掌握汇编语言源程序的书写格式和要求。2 2学会使用学会使用学会使用学会使用EDITEDIT、MASMMASM、LINKLINK、DEBUGDEBUG等软件等软件等软件等软件工具。工具。工具。工具。3 3熟练掌握在计算机上编辑、汇编、连接及运行汇熟练掌握在计算机上编辑、汇编、连接及运行汇熟练掌握在计算机上编辑、汇编、连接及运行汇熟练掌握在计算机上编辑、汇编、连接及运行汇编语言程序的方法。编语言程序的方法。编语言程序的方法。编语言程序的方法。实验预习要求实验预习要求vv复习复习复习复习80868086指令系统中的各类指令及指令系统中的各类指令及指令系统中的各类指令及指令系统中的各类指令及DOSDOS功能调用。功能调用。功能调用。功能调用。vv按照题目要求在实验前编写好实验中的程序段。按照题目要求在实验前编写好实验中的程序段。按照题目要求在实验前编写好实验中的程序段。按照题目要求在实验前编写好实验中的程序段。实验环境实验环境vv微型计算机一台微型计算机一台微型计算机一台微型计算机一台 vvDOSDOS或或或或WINDOWSWINDOWS操作系统操作系统操作系统操作系统MASMMASM开发套件开发套件开发套件开发套件 实验原理实验原理vvDOSDOS功能调用功能调用功能调用功能调用为了使用方便为了使用方便为了使用方便为了使用方便,将将将将DOSDOS层功能模块所提供的层功能模块所提供的层功能模块所提供的层功能模块所提供的8888个子程序个子程序个子程序个子程序统一顺序编号从统一顺序编号从统一顺序编号从统一顺序编号从00H00H到到到到57H57H。DOSDOS系统功能调用方式如:系统功能调用方式如:系统功能调用方式如:系统功能调用方式如:(1 1)置入口参数;)置入口参数;)置入口参数;)置入口参数;(2 2)将子程序编号送入)将子程序编号送入)将子程序编号送入)将子程序编号送入AHAH寄存器;寄存器;寄存器;寄存器;(3 3)执行中断指令:)执行中断指令:)执行中断指令:)执行中断指令:INT21HINT21H。1 1、接收单个字符的输入并显示、接收单个字符的输入并显示、接收单个字符的输入并显示、接收单个字符的输入并显示格式:格式:格式:格式:movah,01hmovah,01hint21hint21h说明:说明:说明:说明:1 1)执行该功能调用首先扫描键盘,等待按键。)执行该功能调用首先扫描键盘,等待按键。)执行该功能调用首先扫描键盘,等待按键。)执行该功能调用首先扫描键盘,等待按键。2 2)若有键按下,则检查所按键码。)若有键按下,则检查所按键码。)若有键按下,则检查所按键码。)若有键按下,则检查所按键码。3 3)当按)当按)当按)当按CTRL-BREAKCTRL-BREAK键瞬时,则推出命令执行。键瞬时,则推出命令执行。键瞬时,则推出命令执行。键瞬时,则推出命令执行。4 4)当为其它键时,则将对应)当为其它键时,则将对应)当为其它键时,则将对应)当为其它键时,则将对应ACSIIACSII码送码送码送码送ALAL寄存器,同时送显寄存器,同时送显寄存器,同时送显寄存器,同时送显示器显示。示器显示。示器显示。示器显示。2 2、单个字符的输出、单个字符的输出、单个字符的输出、单个字符的输出这个调用将送入这个调用将送入这个调用将送入这个调用将送入dldl寄存器中的字符输出显示到屏幕上。寄存器中的字符输出显示到屏幕上。寄存器中的字符输出显示到屏幕上。寄存器中的字符输出显示到屏幕上。格式:格式:格式:格式:movdl,movdl,待显示字符的待显示字符的待显示字符的待显示字符的ASCIIASCII码码码码movah,02hmovah,02hint21hint21h说明:说明:说明:说明:1 1)完成从标准输出设备显示器上输出显示一个字符。)完成从标准输出设备显示器上输出显示一个字符。)完成从标准输出设备显示器上输出显示一个字符。)完成从标准输出设备显示器上输出显示一个字符。2 2)如果)如果)如果)如果DLDL中是中是中是中是CTRL-BREAKCTRL-BREAK的的的的ASCIIASCII,则从本调用的执行中,则从本调用的执行中,则从本调用的执行中,则从本调用的执行中退出。退出。退出。退出。3 3、显示字符串(、显示字符串(、显示字符串(、显示字符串(9 9号调用)号调用)号调用)号调用)格式:格式:格式:格式:movdx,movdx,字符串首偏移地址字符串首偏移地址字符串首偏移地址字符串首偏移地址movah,09hmovah,09hint21hint21h 说明:说明:说明:说明:该功能调用完成在标准输出设备显示器上输出显示一字该功能调用完成在标准输出设备显示器上输出显示一字该功能调用完成在标准输出设备显示器上输出显示一字该功能调用完成在标准输出设备显示器上输出显示一字符串,字符串必须以字符符串,字符串必须以字符符串,字符串必须以字符符串,字符串必须以字符“$”$”(24H24H)为结束标志。但)为结束标志。但)为结束标志。但)为结束标志。但“$”$”字符不显示。字符不显示。字符不显示。字符不显示。4 4、接收字符串的输入、接收字符串的输入、接收字符串的输入、接收字符串的输入格式:格式:格式:格式:movmovdx,dx,缓冲区首偏移地址缓冲区首偏移地址缓冲区首偏移地址缓冲区首偏移地址movah,0Ahmovah,0Ahint21hint21h说明:说明:说明:说明:1 1)该功能调用完成从键盘接收字符串存到指定内存的)该功能调用完成从键盘接收字符串存到指定内存的)该功能调用完成从键盘接收字符串存到指定内存的)该功能调用完成从键盘接收字符串存到指定内存的输入缓冲区,直到输入回车符时为止。输入缓冲区,直到输入回车符时为止。输入缓冲区,直到输入回车符时为止。输入缓冲区,直到输入回车符时为止。2 2)须事先在内存数据段中定义一缓冲区,其格式一般为:须事先在内存数据段中定义一缓冲区,其格式一般为:须事先在内存数据段中定义一缓冲区,其格式一般为:须事先在内存数据段中定义一缓冲区,其格式一般为:BufBuf db20db20db?db?db20dup(?)db20dup(?)第一字节给出缓冲区能存放的字符个数;第二字节为实际第一字节给出缓冲区能存放的字符个数;第二字节为实际第一字节给出缓冲区能存放的字符个数;第二字节为实际第一字节给出缓冲区能存放的字符个数;第二字节为实际键入的字符个数,从第三字节开始,存放键入的字符串,以键入的字符个数,从第三字节开始,存放键入的字符串,以键入的字符个数,从第三字节开始,存放键入的字符串,以键入的字符个数,从第三字节开始,存放键入的字符串,以回车键结束。如实际键入的字符数超过缓冲区容量,则超出回车键结束。如实际键入的字符数超过缓冲区容量,则超出回车键结束。如实际键入的字符数超过缓冲区容量,则超出回车键结束。如实际键入的字符数超过缓冲区容量,则超出部分将被丢失。部分将被丢失。部分将被丢失。部分将被丢失。3 3)若实际输入的字符数少于定义的字节数,则缓冲区)若实际输入的字符数少于定义的字节数,则缓冲区)若实际输入的字符数少于定义的字节数,则缓冲区)若实际输入的字符数少于定义的字节数,则缓冲区内其余字节补零。若实际输入多于定义的字节数,则多余字内其余字节补零。若实际输入多于定义的字节数,则多余字内其余字节补零。若实际输入多于定义的字节数,则多余字内其余字节补零。若实际输入多于定义的字节数,则多余字符丢弃,且响铃。符丢弃,且响铃。符丢弃,且响铃。符丢弃,且响铃。vv源程序的格式源程序的格式源程序的格式源程序的格式DATASEGMENTDATASEGMENTBUFDBHello,world!$BUFDBHello,world!$DATAENDSDATAENDSSTACKSEGMENTSTACKSTACKSEGMENTSTACKDW36DUP(?)DW36DUP(?)STACKENDSSTACKENDSCODESEGMENTCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKASSUMECS:CODE,DS:DATA,SS:STACK段的定义以段的定义以段的定义以段的定义以segmentsegment开始以开始以开始以开始以endsends结束。结束。结束。结束。前面是段的名称,必须成对出前面是段的名称,必须成对出前面是段的名称,必须成对出前面是段的名称,必须成对出现现现现变量的定义用伪指令变量的定义用伪指令变量的定义用伪指令变量的定义用伪指令DBDB、DWDW等。等。等。等。变量名称必须符合标识符的要求。变量名称必须符合标识符的要求。变量名称必须符合标识符的要求。变量名称必须符合标识符的要求。必须在段中定义。必须在段中定义。必须在段中定义。必须在段中定义。堆栈段后必须带上堆栈段后必须带上堆栈段后必须带上堆栈段后必须带上STACKSTACK标识为堆标识为堆标识为堆标识为堆栈。栈。栈。栈。ASSUMEASSUME分配段与段寄存器之间的关系。分配段与段寄存器之间的关系。分配段与段寄存器之间的关系。分配段与段寄存器之间的关系。所定义的段只有分配好段后才能与相应的所定义的段只有分配好段后才能与相应的所定义的段只有分配好段后才能与相应的所定义的段只有分配好段后才能与相应的段对应起来。分配后代码段的段首址自动段对应起来。分配后代码段的段首址自动段对应起来。分配后代码段的段首址自动段对应起来。分配后代码段的段首址自动置值。数据段与附加数据段必须由用户置值。数据段与附加数据段必须由用户置值。数据段与附加数据段必须由用户置值。数据段与附加数据段必须由用户置置置置值。值。值。值。START:MOVAX,DATASTART:MOVAX,DATAMOVDS,AXMOVDS,AXMOVDX,OFFSETBUFMOVDX,OFFSETBUFMOVAH,9MOVAH,9INT21HINT21HMOVAH,4CHMOVAH,4CHINT21HINT21HCODEENDSCODEENDSENDSTARTENDSTARTSTARTSTART标号是程序开始的第一条指令的标号是程序开始的第一条指令的标号是程序开始的第一条指令的标号是程序开始的第一条指令的符号地址,符号地址,符号地址,符号地址,将数据段的段首地址置入段寄存器将数据段的段首地址置入段寄存器将数据段的段首地址置入段寄存器将数据段的段首地址置入段寄存器DSDS中。中。中。中。中间必须借助字寄存器。因为中间必须借助字寄存器。因为中间必须借助字寄存器。因为中间必须借助字寄存器。因为DATADATA在这在这在这在这里得到的是一个立即数不能直接放入段寄里得到的是一个立即数不能直接放入段寄里得到的是一个立即数不能直接放入段寄里得到的是一个立即数不能直接放入段寄存器中。存器中。存器中。存器中。9 9号功能调用在屏幕上输出一串字符。号功能调用在屏幕上输出一串字符。号功能调用在屏幕上输出一串字符。号功能调用在屏幕上输出一串字符。4CH4CH功能调用,结束程序返回功能调用,结束程序返回功能调用,结束程序返回功能调用,结束程序返回DOSDOS命令命令命令命令行。行。行。行。ENDEND语句标识程序到此为此,其后带的语句标识程序到此为此,其后带的语句标识程序到此为此,其后带的语句标识程序到此为此,其后带的标号名指名程序从哪开始。标号名指名程序从哪开始。标号名指名程序从哪开始。标号名指名程序从哪开始。ENDEND后的其他语句不会再汇编。后的其他语句不会再汇编。后的其他语句不会再汇编。后的其他语句不会再汇编。实验内容实验内容1 1汇编语言源程序的建立汇编语言源程序的建立汇编语言源程序的建立汇编语言源程序的建立程序要求是:在屏幕上显示程序要求是:在屏幕上显示程序要求是:在屏幕上显示程序要求是:在屏幕上显示“Hello,world!”Hello,world!”。设定源程。设定源程。设定源程。设定源程序的文件名为序的文件名为序的文件名为序的文件名为ABC.ASMABC.ASM。参考程序如前面。参考程序如前面。参考程序如前面。参考程序如前面。在在在在DOSDOS状态下键入以下命令:状态下键入以下命令:状态下键入以下命令:状态下键入以下命令:C:MASMEDITABC.ASMC:MASMEDITABC.ASM此时屏幕的显示状态如下图所示。此时屏幕的显示状态如下图所示。此时屏幕的显示状态如下图所示。此时屏幕的显示状态如下图所示。进入进入进入进入EDITEDIT后,屏幕的第一行是菜单栏。可以选用后,屏幕的第一行是菜单栏。可以选用后,屏幕的第一行是菜单栏。可以选用后,屏幕的第一行是菜单栏。可以选用AltAlt键激活菜单,然后用光标和回车键选择所需功能项,在弹出键激活菜单,然后用光标和回车键选择所需功能项,在弹出键激活菜单,然后用光标和回车键选择所需功能项,在弹出键激活菜单,然后用光标和回车键选择所需功能项,在弹出下拉菜单中选择所需功能,或按下拉菜单中选择所需功能,或按下拉菜单中选择所需功能,或按下拉菜单中选择所需功能,或按EscEsc键退出菜单选择,用键退出菜单选择,用键退出菜单选择,用键退出菜单选择,用FileFile主菜单下的主菜单下的主菜单下的主菜单下的“Save”Save”存盘功能保存文件。最后通过选择存盘功能保存文件。最后通过选择存盘功能保存文件。最后通过选择存盘功能保存文件。最后通过选择FileFile菜单下的菜单下的菜单下的菜单下的ExitExit项退出项退出项退出项退出EDITEDIT编辑环境。编辑环境。编辑环境。编辑环境。2 2 将源程序文件汇编成目标程序文件将源程序文件汇编成目标程序文件将源程序文件汇编成目标程序文件将源程序文件汇编成目标程序文件C:MASMMASMC:MASMMASMABC.ASMABC.ASMMASMMASM宏汇编程序的主要功能有以下宏汇编程序的主要功能有以下宏汇编程序的主要功能有以下宏汇编程序的主要功能有以下3 3点:点:点:点:(1 1)检查源程序中存在的语法错误,并给出错误信息。)检查源程序中存在的语法错误,并给出错误信息。)检查源程序中存在的语法错误,并给出错误信息。)检查源程序中存在的语法错误,并给出错误信息。(2 2)若源程序经汇编后没有语法错误,则产生扩展名为)若源程序经汇编后没有语法错误,则产生扩展名为)若源程序经汇编后没有语法错误,则产生扩展名为)若源程序经汇编后没有语法错误,则产生扩展名为.OBJ.OBJ的目标程序文件。的目标程序文件。的目标程序文件。的目标程序文件。(3 3)若源程序中使用了宏指令,则汇编程序将展开宏指令。)若源程序中使用了宏指令,则汇编程序将展开宏指令。)若源程序中使用了宏指令,则汇编程序将展开宏指令。)若源程序中使用了宏指令,则汇编程序将展开宏指令。源程序建立以后,在源程序建立以后,在源程序建立以后,在源程序建立以后,在DOSDOS状态下,采用宏汇编程序状态下,采用宏汇编程序状态下,采用宏汇编程序状态下,采用宏汇编程序MASMMASM对源程序文件进行汇编,其操作过程如下图所示。对源程序文件进行汇编,其操作过程如下图所示。对源程序文件进行汇编,其操作过程如下图所示。对源程序文件进行汇编,其操作过程如下图所示。要求输入目标文件名,要求输入目标文件名,要求输入目标文件名,要求输入目标文件名,中已经中已经中已经中已经有默认文件名,通常直接按回车有默认文件名,通常直接按回车有默认文件名,通常直接按回车有默认文件名,通常直接按回车键予以确认即可,当然也可以输键予以确认即可,当然也可以输键予以确认即可,当然也可以输键予以确认即可,当然也可以输入其它文件名,要注意其扩展名入其它文件名,要注意其扩展名入其它文件名,要注意其扩展名入其它文件名,要注意其扩展名是是是是.OBJ.OBJ 默认产生的列表文件名为默认产生的列表文件名为默认产生的列表文件名为默认产生的列表文件名为空,需要时输入文件名。空,需要时输入文件名。空,需要时输入文件名。空,需要时输入文件名。不要直接按回车键。不要直接按回车键。不要直接按回车键。不要直接按回车键。要求输入交叉引用文件名,默认情要求输入交叉引用文件名,默认情要求输入交叉引用文件名,默认情要求输入交叉引用文件名,默认情况下不产生这个文件,所以直接回况下不产生这个文件,所以直接回况下不产生这个文件,所以直接回况下不产生这个文件,所以直接回车确认即可,若是需要产生,则需车确认即可,若是需要产生,则需车确认即可,若是需要产生,则需车确认即可,若是需要产生,则需要输入文件名。要输入文件名。要输入文件名。要输入文件名。如果汇编过程中有错误产生,则汇编程序将显示出错行如果汇编过程中有错误产生,则汇编程序将显示出错行如果汇编过程中有错误产生,则汇编程序将显示出错行如果汇编过程中有错误产生,则汇编程序将显示出错行号和错误信息。最后显示的部分是警告错误及严重错误数。号和错误信息。最后显示的部分是警告错误及严重错误数。号和错误信息。最后显示的部分是警告错误及严重错误数。号和错误信息。最后显示的部分是警告错误及严重错误数。若汇编过程中,想让汇编程序使用默认参数,则可以使若汇编过程中,想让汇编程序使用默认参数,则可以使若汇编过程中,想让汇编程序使用默认参数,则可以使若汇编过程中,想让汇编程序使用默认参数,则可以使用带有用带有用带有用带有“;”的格式:的格式:的格式:的格式:D:MASMMASMABCD:MASMMASMABC;此方法,系统将不再提示用户输入文件名等信息,而是此方法,系统将不再提示用户输入文件名等信息,而是此方法,系统将不再提示用户输入文件名等信息,而是此方法,系统将不再提示用户输入文件名等信息,而是直接编译生成目标文件。直接编译生成目标文件。直接编译生成目标文件。直接编译生成目标文件。3 3用连接程序生成可执行程序文件用连接程序生成可执行程序文件用连接程序生成可执行程序文件用连接程序生成可执行程序文件经汇编以后产生的目标程序文件(经汇编以后产生的目标程序文件(经汇编以后产生的目标程序文件(经汇编以后产生的目标程序文件(.OBJ.OBJ文件)并不是可文件)并不是可文件)并不是可文件)并不是可执行程序文件,必须经过连接以后,才能成为可执行文件执行程序文件,必须经过连接以后,才能成为可执行文件执行程序文件,必须经过连接以后,才能成为可执行文件执行程序文件,必须经过连接以后,才能成为可执行文件(即扩展名为(即扩展名为(即扩展名为(即扩展名为.EXE.EXE)。)。)。)。C:MASMLINKABCC:MASMLINKABC连接过程如下图所示。连接过程如下图所示。连接过程如下图所示。连接过程如下图所示。提示将要产生的可执行文件名,通提示将要产生的可执行文件名,通提示将要产生的可执行文件名,通提示将要产生的可执行文件名,通常直接按回车键表示使用默认文件常直接按回车键表示使用默认文件常直接按回车键表示使用默认文件常直接按回车键表示使用默认文件名名名名 内存映象文件的提示,直接按回车键内存映象文件的提示,直接按回车键内存映象文件的提示,直接按回车键内存映象文件的提示,直接按回车键表示不产生此文件。表示不产生此文件。表示不产生此文件。表示不产生此文件。连接程序使用的库文件的输入提示,通连接程序使用的库文件的输入提示,通连接程序使用的库文件的输入提示,通连接程序使用的库文件的输入提示,通常直接回车确认,表示不使用库文件。常直接回车确认,表示不使用库文件。常直接回车确认,表示不使用库文件。常直接回车确认,表示不使用库文件。当程序中没有定义堆栈段或虽然定义但不符合要求时,当程序中没有定义堆栈段或虽然定义但不符合要求时,当程序中没有定义堆栈段或虽然定义但不符合要求时,当程序中没有定义堆栈段或虽然定义但不符合要求时,LINKLINK在最后一行会给出类似在最后一行会给出类似在最后一行会给出类似在最后一行会给出类似“LINK:warningL4021:noLINK:warningL4021:nostacksegment”stacksegment”的警告信息,表示用户程序没有定义堆栈的警告信息,表示用户程序没有定义堆栈的警告信息,表示用户程序没有定义堆栈的警告信息,表示用户程序没有定义堆栈段。该警告信息不影响可执行程序的生成和正常运行,因为段。该警告信息不影响可执行程序的生成和正常运行,因为段。该警告信息不影响可执行程序的生成和正常运行,因为段。该警告信息不影响可执行程序的生成和正常运行,因为若用户程序没有定义堆栈段,程序运行时会自动使用系统提若用户程序没有定义堆栈段,程序运行时会自动使用系统提若用户程序没有定义堆栈段,程序运行时会自动使用系统提若用户程序没有定义堆栈段,程序运行时会自动使用系统提供的默认堆栈。供的默认堆栈。供的默认堆栈。供的默认堆栈。在连接过程中,如果想让程序使用默认参数,则可以使在连接过程中,如果想让程序使用默认参数,则可以使在连接过程中,如果想让程序使用默认参数,则可以使在连接过程中,如果想让程序使用默认参数,则可以使用含用含用含用含“;”格式:格式:格式:格式:C:MASMLINKEXAMP1C:MASMLINKEXAMP1;4 4程序的执行程序的执行程序的执行程序的执行当我们建立了正确的可执行文件以后,就可以直接在当我们建立了正确的可执行文件以后,就可以直接在当我们建立了正确的可执行文件以后,就可以直接在当我们建立了正确的可执行文件以后,就可以直接在DOSDOS状态下执行该程序。状态下执行该程序。状态下执行该程序。状态下执行该程序。C:MASMABC.EXEC:MASMABC.EXE如下图所示。如下图所示。如下图所示。如下图所示。如果使用测试数据均可运行并能看到正确结果,则说明如果使用测试数据均可运行并能看到正确结果,则说明如果使用测试数据均可运行并能看到正确结果,则说明如果使用测试数据均可运行并能看到正确结果,则说明该程序编写正确。但若得不到正确结果或结果无法看到(没该程序编写正确。但若得不到正确结果或结果无法看到(没该程序编写正确。但若得不到正确结果或结果无法看到(没该程序编写正确。但若得不到正确结果或结果无法看到(没有结果输出的情况下),则需要使用调试工具来调试程序了。有结果输出的情况下),则需要使用调试工具来调试程序了。有结果输出的情况下),则需要使用调试工具来调试程序了。有结果输出的情况下),则需要使用调试工具来调试程序了。实验报告要求实验报告要求vv整理出完整的实验程序段和运行结果,对结果进行分整理出完整的实验程序段和运行结果,对结果进行分整理出完整的实验程序段和运行结果,对结果进行分整理出完整的实验程序段和运行结果,对结果进行分析。析。析。析。vv简要说明汇编语言源程序包括哪些结构。简要说明汇编语言源程序包括哪些结构。简要说明汇编语言源程序包括哪些结构。简要说明汇编语言源程序包括哪些结构。vv总结汇编语言上机过程。总结汇编语言上机过程。总结汇编语言上机过程。总结汇编语言上机过程。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服