收藏 分销(赏)

微机原理课后参考解答.doc

上传人:仙人****88 文档编号:9412150 上传时间:2025-03-25 格式:DOC 页数:26 大小:244KB 下载积分:10 金币
下载 相关 举报
微机原理课后参考解答.doc_第1页
第1页 / 共26页
微机原理课后参考解答.doc_第2页
第2页 / 共26页


点击查看更多>>
资源描述
第一章 习 题 ü 1.2 请简述机器数和真值的概念。 ü 1.3 将下列十进制数分别转化为二进制数、八进制数、十六进制数和压缩BCD数。 ü (1)125.74 (=7D.BCH) (2)513.85 (3)742.24 (4)69.357 ü 1.4 将下列二进制数分别转化为十进制数、八进制数和十六进制数。 ü (1)101011.101B (=43.625) (2)110110.1101B ü (3)1001.11001B (4)100111.0101B ü 1.5 将下列十六进制数分别转化为二进制数、八进制数、十进制数和压缩BCD数。 ü (1)5A.26H (2)143.B5H ü (3)6CB.24H (4)E2F3.2CH ü 1.6 8位和16位二进制数的原码、补码和反码可表示的数的范围分别是多少? ü 1.7 写出下列十进制数的原码、反码、补码表示(采用八位二进制,最高位为符号位)。 ü (1)120 (78H) (2)62 (3)-26 (E6H补码) (4)-127 ü 1.8 已知补码求出其真值。 ü (1)46H(=70) (2)9EH (=-98) (3)B6H ( =-74) (4)6C20H 本章作业点评 注意正数的原码、反吗和补码相同,而负数不同。 作业解答请看书第2章 微处理器习 题 ü 2.1 8086/8088 CPU由哪两部分组成?它们的主要功能各是什么? ü 2.2 8086/8088 CPU为什么要采用地址/数据线分时复用?有何好处? ü 2.3 8086/8088 CPU中的标志寄存器分为哪两类标志?二者有何区别? ü 2.4 设段寄存器CS=2400H,指令寄存器IP=6F30H,此时指令的物理地址PA是多少?指向这一物理地址的CS值和IP值是否是唯一的? 答:PA=2AF30H,不唯一。 ü 2.5 什么叫总线周期?8086/8088系统中的总线周期由几个时钟周期组成?如果CPU的主时钟频率为25MHz,一个时钟周期是多少?一个基本总线周期是多少时间? 答:4个T周期,1个T周期为1/25MHZ=4*10-8S ü 2.10 什么是指令周期?什么是时钟周期?什么是总线周期?三者有何关系? 2.15 什么是总线?简述微机总线的分类。 ü 2.16 简述PCI总线的特点。 ü 2.17 简述USB总线的特点。 本章作业点评 作业解答请看书习 题 3.1 请解释名词:操作码、操作数、立即数、寄存器操作数、存储器操作数。 3.2 什么叫寻址方式?8086指令系统有哪几种寻址方式? 3.3 指出下列指令中源操作数的寻址方式 点评:根据指令格式,仅给出源操作数的寻址方式 (1) MOV SI,200 (2) MOV AL,[2000H] (3) MOV CX,DATA[SI] (4) ADD AX,[BX+DI] (5) AND AX,BX (6) MOV [SI],AX (7) MOV AX,DATA[BP+SI] (8) PUSHF (9) MOV AX,ES:[BX] (10) JMP FAR PTR PROCS_1(答:直接寻址) 3.4 设DS=1000H,ES=2000H,BX=2865H,SI=0120H,偏移量D=47A8H,试问下列各指令中源操作数所在位置,若有物理地址请计算出其物理地址值。 点评:题目要求给出物理地址,仅(3)(4)(5)(7)(8)(10)计算物理地址 (1)MOV AL,D (代码段中) (2)MOV AX,BX (cpu寄存器中) (3)MOV AL,[BX+D]内存数据段 (4)MOV AL,[BX+SI+D] 内存数据段 (5)MOV BX,[BX+SI+2]内存数据段 (6)MOV [BX+5],AX(cpu寄存器中) (7)INC BYTE PTR[SI+3]内存数据段 (8)MOV DL,ES:[BX+SI]内存附加数据段 (9)MOV AX,2010H (代码段中) (10)MOV AX,DS:[2010H]内存数据段 3.5 现有DS=2000H,BX=0100H,SI=0002H,20100H=12H,20101H=34H,20102H=56H,20103H=78H,21200H=2AH,21201H=4CH,21202H=B7H,21203H=65H,试说明下列指令执行后,AX寄存器中的内容。 (1) MOV AX,1200H (AX=1200H) (2) MOV AX,BX (AX=0100H) (3) MOV AX,[1200H] (AX=4C2AH) (4) MOV AX,[BX] (AX=3412H) (5) MOV AX,1100H[BX] (AX=4C2AH) (6) MOV AX,[BX+SI] (AX=7856H) (7) MOV AX,[1100H+BX+SI] (AX=65B7H) 3.9 假设下列程序执行前SS=8000H,SP=2000H,AX=7A6CH,DX=3158H。执行下列程序段,画出每条指令执行后,寄存器AX,BX,CX,DX的内容和堆栈存储的内容的变化情况,执行完毕后,SP=? PUSH AX (答: AX不变) PUSH DX (答: DX不变) POP BX (答: BX=DX) POP CX (答: CX=AX) 3.10 编程序段分别完成如下功能: (1) AX寄存器低4位清零。(答:AND AX,FFF0H) (2) BX寄存器低4位置“1”。 (答:OR BX,000FH) (3) CX寄存器低4位变反。 (答:XOR CX,000FH) (4) 测试DL寄存器位3,位6是否同时为0,若是,将0送DL;否则1送DH。 (答:TEST DL,48H JZ NEXT MOV DH,01H JMP DONE NEXT:MOV DL,00H) 3.11 写出三种不同类型的指令将寄存器BX清零。 答: MOV BX,0 XOR BX,BX SUB BX,BX 3.12 已知从DS:2200H,ES:3200H单元起分别存放20个ASCII的字符。找出这两个字符串中第一个不同字符的位置(段内偏地址),并放入DS:22A0H开始的连续两个单元中。请设计完成此任务的程序段。 (1)使用通常用的比较指令(CMP)实现; (2)使用数据串比较指令(CMPSB)实现。 答(1) MOV SI,2200H ; MOV DI,3200H ; MOV CX,20 ; NEXT: MOV AL,[SI] CMP AL,ES:[DI] ; JNZ STOP INC SI INC DI ; DEC CX ; JNZ NEXT JMP DONE ; STOP: MOV [22A0H],SI ; DONE: HLT 答(2) MOV SI,2200H ; MOV DI,3200H ; MOV CX,20 ; NEXT: REPZ CMPSB ; JCXZ DONE ;如果CX=0,表示所有的字符都相同 DEC SI STOP: MOV [22A0H],SI ; DONE: HLT 3.13 读下面程序段,请问:在什么情况下,本段程序的执行结果是AH=0?  BEGIN:  IN AL,5FH       TEST AL,80H       JZ BRCH1       MOV AH,0       JMP STOP BRCH1: MOV AH,0FFH   STOP:  HLT  答 端口 地址5FH的内容为负数时,AH=0 3.16 阅读下列程序: NEXT: MOV AL,[SI] MOV ES:[DI],AL INC SI INC DI LOOP NEXT 写出用串指令完成上述功能的程序段。 答: REP MOVSB 3.18 假设寄存器AX=1234H,DX=0A000H,阅读下列程序段: MOV BX,0 MOV CX,BX SUB CX,AX SBB BX,DX MOV AX,CX MOV DX,BX 上述程序执行后AX=?,DX=?,程序功能是什么? 答:AX = EDCCH DX =5FFFH 功能:0 - A0001234H 3.19 比较AX,BX,CX中带符号数的大小,将最大的数放在AX中,请编程。 CMP AX,BX JG NEXT MOV AX,BX NEXT: CMP AX,CX JG NEXT MOV AX,CX 3.21 编写程序段,在数据区0000H:2000H开始100字节范围内,查找字符'A',若找到,则将偏移地址送入DX,没有找到,则结束。 答: DATA SEGMENT ORG 2000H STRING DB ‘1222677ASS…..’共100个字符 DATA ENDS CODE SEGMENT ASSUME CS:CODE, ES:DATA MOV AX,DATA MOV ES,AX CLD ;置DF=0,地址增量方向 MOV DI,OFFSET STRING ; MOV CX,100 ; MOV AL,‘A’ ; NEXT:SCASB ; JZ STOP ;ZF=1,找到“A”相同的字符,转STOP DEX CX ;没找到(ZF=0),长度减1 JNZ NEXT ; JMP DONE ; STOP:DEC DI ;字符A所在偏移地址→BX MOV DX,DI DONE: HLT CODE ENDS END START 3.28 已知数据段DATA从存储器实际地址02000H开始,作如下定义: DATA SEGMENT VAR1 DB 2 DUP(0,1,?) VAR2 DW 50 DUP(?) VAR3 DB 10 DUP(0,1,2 DUP(4),5) DATA ENDS 求出3个变量的SEG、OFFSET、TYPE、LENGTH和SIZE。 答: SEG OFFSET TYPE LENGTH SIZE。 VAR1 DATA 0000H 1 2 2 VAR2 DATA 0006H 2 50 100 VAR3 DATA 0037H 1 10 10 3.29 已知数据区定义了下列语句,采用图示说明变量在内存单元的分配情况以及数据的预置情况。 DATA SEGMENT A1 DB 20H,52H,2 DUP(0,?) A2 DB 2 DUP(2,3 DUP(1,2),0,8) A3 DB ’GOOD!’ A4 DW 1020H,3050H DATA ENDS 答:相当于: A1 DB 20H,52H, 0,?,0,? A2 DB (2,1,2,1,2,1,2,0,8),(2,1,2,1,2,1,2,0,8) A3 DB ’GOOD!’,字符在内存用ASCII码表示 A4 DB 20H,10H,50H,30H 3.30 采用示意图来说明下列变量在内存单元的分配以及数据的预置。 DATA SEGMENT ORG 4 VAR1 DW 9 VAR2 DW 2 DUP(0) CONT EQU 2 VAR3 DB CONT DUP(?,8) VAR4 DB 2 DUP(?,CONT DUP(0),′AB′) DATA ENDS 答:与题3.29类似 3.32 执行下列指令后,AX寄存器中的内容是什么? TABLE DW 10,20,30,40,50 ENTRY DW 3 . MOV BX,OFFSET TABLE ADD BX,ENTRY MOV AX,[BX] 答: AX=1E00H 3.34 在数据区中,以TABLE开始连续存放0~6的立方值(称为立方表),设任给一数x(0≤x≤6),x在TAB1单元,查表求x的立方值,并把结果存入TAB2单元。 DSEG SEGMENT TABLE DB 0,1,8,27,64,125,….. ;定义立方表 TAB1 DB 4 ;定义要查表的数X TAB2 DB ? ;定义结果存放单元 DSEG ENDS COSEG SEGMENT ASSUME CS:COSEG,DS:DSEG,SS:SSEG BEGIN: MOV AX,DSEG MOV DS,AX MOV BX,OFFSET TAB1 ;置数据指针 MOV AH,0 MOV AL,DATA ;取待查数 ADD BX,AX ;求得查表地址 MOV AL,[BX] ;查表 MOV TAB2,AL ;平方数送RUSULT单元 MOV AH,4CH INT 21H COSEG ENDS END BEGIN 3.36 编写程序,计算下面函数的值。 DATA SEGMENT X DB -10 S DW ? DATA ENDS CODE SEGMENT ASSUME DS:DATA, CS:CODE START: MOV AX,DATA ;给相关段寄存器赋值 MOV DS,AX MOV AL,X CMP AL,0 JL A1 CMP X,10 JG A2 MOV BL,3 IMUL BL MOV S, AX JMP EXIT A1:MOV BL,2 IMUL BL MOV S, AX JMP EXIT A2: MOV BL,4 IMUL BL MOV S, AX EXIT: MOV AH,4CH ;返回DOS INT 21H CODE ENDS END START 3.39 现有两个多字节压缩BCD码数9876543219H和1234567891H,它们分别按低位字节在前高位字节在后存放在变量A1和 A2中,求它们的和与差,并将结果放在变量SUM和DEF中。 DATA SEGMENT A1 DB 19H,32H,54H,76H ,98H A2 DB 91H,78H,56H,34H ,12H SUM DB 6 DUP(?) DEF DB 5 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA MAIN PROC FAR START: MOV AX,DATA MOV DS,AX MOV SI,OFFSET A1 MOV DI,OFFSET A2 MOV BX,OFFSET SUM MOV CX,05 CLC ADDF: MOV AL,[SI] ADC AL,[DI] MOV [BX],AL INC SI INC DI INC BX DEC CX JNZ ADDF MOV AL,0 ADC AL,AL MOV [BX],AL (该三条指令用来处理最高位的进位) MOV SI,OFFSET A1 MOV DI,OFFSET A2 MOV BX,OFFSET DEF MOV CX,05 CLC SUBF: MOV AL,[SI] SBB AL,[DI] MOV [BX],AL INC SI INC DI INC BX DEC CX JNZ SUBF CODE ENDS END START 3.40设变量K中存放了由100个有符号整数组成的数组,编写程序段找出其中最大的一个,放到AX中.(注意:编程时只用于10个数) DSEG SEGMENT K DW 23,45,87,……,98 COUNT EQU $ - BUFFER MAX DW ? DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG,SS:SSEG START:MOV AX,DSEG MOV DS,AX MOV CX,COUNT/2 ;除2是字节数 LEA BX,BUFFER MOV AX,[BX] INC BX INC BX DEC CX AGAIN: CMP AX,[BX] JGE NEXT MOV AX,[BX] NEXT: INC BX INC BX LOOP AGAIN MOV MAX,AX CSEG ENDS END START 3.43 在数据段中有一个字节数组,编程统计其中正数的个数,放入A单元,负数的个数,放入B单元。 DSEG SEGMENT DAT DB 23,45,87,……,98 COUNT EQU $ - BUFFER A DB ? B DB ? DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG,SS:SSEG START:MOV AX,DSEG MOV DS,AX MOV DX , 0 MOV CX,COUNT LEA BX,DAT AGAIN: MOV AL,[BX] CMP AL , 0 JGE PLUS INC DL ; 统计负数个数 JMP XEXT PLUS : INC DH NEXT: INC BX LOOP AGAIN MOV A,DH MOV B,DL CSEG ENDS END START 习 题 1.分析半导体随机存储器和只读存储器的特点和分类。静态存储器和动态存储器的最大区别是什么?它们各有什么优缺点? 3.存储器的寻址范围是怎样确定的?举例说明它的确定方法。 5 用下列芯片构成存储系统,各需要多少个RAM芯片?需要多少位地址作为片外地址译码?设系统为20位地址线,采用全译码方式。 (1)512×4位RAM构成16KB的存储系统; (答:64片,11根,芯片上有9根地址线,片外有11根,全部参加译码) (2)1024×1位RAM构成128KB的存储系统; (答:128*8片,10根) (3)2K×4位RAM构成64KB的存储系统; (答:64片,9根) (4)64K×1位RAM构成256KB的存储系统; 7.有一个6264SRAM芯片的译码电路,如下图所示,请计算该芯片的地址范围及存储容量。 习题7 图 答:容量为8KB 本题 图中 A14和A17没有使用,为部分地址译码法,共有4组重叠地址; 假设A14=0和A17=0 ,地址范围为DA000H~DB000H 9. 使用4K×8位的EPROM2732和2K×8位的静态RAM6116以及LS138译码器,构成一个8KB.的ROM、地址范围为:FE000H~FFFFFH;4KB的RAM存储器系统,地址范围为:00000H~0FFFH。系统CPU8088工作于最小模式。画出系统连接图。 提示:本题中两个存储空间 相差较远,使用两个138译码器分别完成译码 EPROM2732 两片 第1片,地址空间从FE000H~FEFFFH 第2片,地址空间从FF000H~FFFFFH RAM6116 2片 第1片,地址空间从00000H~007FFH 第2片,地址空间从00800H~00FFFH 10.试为某8位微机系统设计一个具有16KB ROM和40KB RAM的存储器。 (1)选用EPROM芯片2764组成只读存储器(ROM),从0000H地址开始; (2)选用SRAM芯片6264组成随机存取存储器(RAM),从4000H地址开始; (3)分析出每个存储芯片的地址范围。 答:提示 题目中给出的8位CPU其地址总线总计 为16条 EPROM芯片2764 共两片 ; 第1片,地址空间从0000H~1FFFH 第2片,地址空间从2000H~3FFFH SRAM芯片6264 共5片; 第1片,地址空间从4000H~5FFFH 第2片,地址空间从6000H~7FFFH 第3片,地址空间从8000H~9FFFH 第4片,地址空间从A000H~BFFFH 第5片,地址空间从C000H~DFFFH 第5章习题 5.3 计算机与外设之间的数据传送控制方式有哪些?它们各有什么特点? 5.5 CPU与外设采用查询方式传送数据的过程是怎样的?现有一输入设备,其数据端口的地址为FFE0H,并于端口FFE2H提供状态,当其D0位为1时表明输入数据备好。请编写采用查询方式进行数据传送的程序段,要求从该设备读取100个字节并输入到从2000H:2000H开始的内存中。 DSEG SEGMENT ORG 2000H DATA DB 100 DUP (?) DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG,SS:SSEG START:MOV AX,2000H MOV AX , 2000H MOV DS,AX MOV BX,2000H MOV CX,100; NEXT:MOV DX , FFE2H IN AL,DX AND AL,01H JZ NEXT MOV DX , FFE0H IN AL,DX MOV [BX] ,AL; INC BX DEC CX; JNZ NEXT HLT CSEG ENDS END START 第6章 习题 6.1. 什么是中断?计算机采用中断有什么好处?简述中断的响应和处理过程。 6.6.简述中断向量、中断向量表、中断类型码之间的关系。在基于8086/8088的微机系统中,中断类型码和中断向量之间有什么关系?若某中断类型码是12H,则其中断向量存于何处?若软中断指令INT 30H,其中的中断类型号为多少,该中断的服务程序的入口地址在内存单元什么位置? 答;中断类型码是12H,12H*4=48H 则其中断向量存于内存 0000:0048H开始的4个单元中 若软中断指令INT 30H,其中的中断类型号为30H,30H*4=C0H该中断的服务程序的入口地址在内存单元 0000:00C0H开始的4个单元中 6.7 简述8259A的内部结构和主要功能。8259A的中断屏蔽寄存器IMR与8086中断允许标志IF有什么区别? 答 :8259A的中断屏蔽寄存器IMR,是对8259的中断请求IR输入端   进行屏蔽控制,8086中断允许标志IF是对CPU的中断请求输入端INTR允许或不允许进行控制。第7章 习 题 7.2 8253有几个独立的计数器?各有几种工作方式?各种工作方式的名称是什么? 7.8 设8253三个计数器的端口地址为40H、41H、42H,控制寄存器端口地址43H。输入时钟为2MHz,使计数器1周期性的发出脉冲,其脉冲周期为1ms,试编写初化程序段。 答 :计数初值 2MHZ* 1ms=2000 MOV AL , 01110111,方式3 MOV 43H,AL MOV AL,00H OUT 41H,AL MOV AL,20H OUT 41H,AL 7.9 设8253计数器的时钟输入频率为1.91MHz,为产生25KHz的方波输出信号,应向计数器装入的计数初值为多少? 1.91MHz/25KHz= 77 第8章 习 题 8.5 设8255端口A工作在双向方式,允许输入中断,禁止输出中断,B口工作在方式0输出,C口剩余数据线全部输入,请初始化编程。设8255端口地址为60H、62H、64H、66H。 START: MOV AL ,1 10 0 0 0 0 1 B ; OUT 66H ,AL8086中断允许标志IF有什么区别? 8.6 8255A的A口与共阴级的LED显示器相连,若片选信号A10~A3 =11000100,问8255A的端口地址是多少?A口应工作在什么方式?画出8255A、LS138、8086CPU微机总线接口图,写出8255A的初始化程序。 图中为部分地址译码法, 当A1 A0 接到8255芯片地址线上,其他假设为0 A15 A14 A13 A12 A11 11000100 A2 A1 A0 00000 110001000 00 00000 110001000 01 00000 110001000 10 00000 110001000 11 上述确定的端口地址为 0620H, 0621H, 0622H, 0623H, 8.7 以一个5*5键开关矩阵为例,用8255A的A、B口对矩阵进行扫描,请: (1)画出硬件连接图; (2)根据你的设计,对8255A进行初始化编程; (3)编一段程序实现一次完整的扫描。 本题分析:键盘识别方法: 第一种:行反转法 1)行线和列线分别接到并行端口; 2)行线输出,列线输入; 2)行线输出全0,然后读入列线值; 3)当列线中有0,表示某键被按下;记录该列值,并将列端口置为输出,输出刚读入的列值;行线端口设为输入,再读取值,则必有一位为0,记录行值。由此得到行列值,然后查表确定按下的键。 第二种:行扫描法 1、首先判断是否有键按下 • 1)所有行输出“0”,读列线,判断是否全“1’; • 2)不是全 “1” ,可能有键按下; • 3)延时20ms,再读列线判断是否全 “1”,不是全 “1”,有键按下,进行下一步 2、行扫描:逐行输出“0”,读取列线,当列线中出现“0”,表示该行列交叉键按下; 3、键分析:将键行列编码组合后,到键值行列编码表中查表,得到键值 如果遇到多个键同时闭合的情况,键值行列编码表中不会查到。 参考答案: 采用行反转法:将行和列分别接到8255的A口和B口 根据图编写一个键盘编码表 键 PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0 0 0 0 0 1 1 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 A 0 0 0 0 0 0 键0的编码值为1E1EH 键1的编码值为1E1DH 键2的编码值为1E1BH 键3的编码值为1E17H 按上述规则依次编写出键值编码 。设8255A端口A的地址为40H,端口B的地址为41H,端口C的地址为42H,控制寄存器地址为43H。 键盘编码表: DATA SEGMENT TABLE DW 1E1EH , 1E1DH , 1E1BH ,1E17H,............. ;各键值编码 DAT DB ‘0’, ‘1’, ‘2’, ‘3’, …. ;各键值 DATA ENDS START: MOV AL,10000010B ;设方式0,端口A口输出,B口输入 OUT 43H,AL MOV AL,0 OUT 40H,AL ;端口A(行线)为0 WAIT: IN AL,41H ;读入端口B(列线)的状态 AND AL,1FH ;保留低5位 CMP AL,1FH ;检查有键按下否(即是否存在有0的位) JE WAIT ;相等,即全1表示无键按下,循环继续检测 MOV AH,AL ;否则,保存列值 MOV AL,10010000B ;设方式0,端口A输入,B输出 OUT 43H,AL ;即端口A \B反转输入输出方向 MOV AL,AH OUT 41H,AL ;把列值反向输出到列线B端口上 IN AL,40H ;读入行线(端口A)状态 AND AL,1FH ;保留5位 MOV DL,AH ;组合行值和列值 DX MOV DH,AL LEA SI ,TABLE LEA DI, DAT MOV AX,-1 NEXT : CMP DX,[SI] JZ OK INC SI INC SI JMP NEXT OK:ADD AX,1 ADD DI , AX ..............[DI]中的字符为按下的键 26
展开阅读全文

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


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 小学其他

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

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

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

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

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

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

客服