




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、微型计算机原理及应用课程设计简易计算器的设计姓名陈*院系信息学院自动化系班级*学号200911*时间2011年 12月 29日目 录摘要IINTRODUCTION1课程设计目的与任务11.1设计目的11.2设计任务12基本要求13简易计算器的设计03.1程序设计流程图03.2程序基本算法13.3程序源代码13.4程序调试84课程设计总结与心得11参考文献12摘要本次课程设计是通过使用emu8086汇编语言编程软件实现较复杂程序的设计。该课程设计的内容为采用汇编语言设计一个简易计算器,界面显示要求用键盘分别输入两个随机数,完成加法,减法,乘法和除法的运算,然后将运算结果显示出来。该设计只能运行简
2、单正整数间的单步加减乘除运算,不能识别小数。除法中的结果可以精确到3位小数,减法可以显示负数的结果。采用DOS调用(INT 21H)来完成输入和输出,输出字符串操作。通过这次设计实践能够进一步加深对专业知识和理论知识学习的认识和理解,使自己的设计水平和对所学的知识的应用能力以及分析问题解决问题的能力得到全面提高。关键词:微机原理;计算器;汇编INTRODUCTIONThis course is designed to through the use of emu8086 assembly language programming software to realize complex prog
3、ram design. The content of the course design for the assembly language design a simple calculator, interface display with the keyboard input requirements are two random number, complete the addition, subtraction, multiplication, and division of the operation, and then will operation result shows it.
4、 This design can only easy operation between the positive integer single step add, subtract, multiply and divide operation, can't identify decimal. The result in the division accurate to 3 decimal places, subtraction can display the negative results. Using DOS call (INT 21 H) to complete the inp
5、ut and output, the output string operation. This design practice can further deepen the theoretical knowledge of professional knowledge and learning the understanding and the understanding, make oneself of the design level of knowledge and the application ability and the ability to analyse and solve
6、 questions fully improve.KEYWORDS: Microcomputer principle;calculator;Assembly language简易计算器的设计自动*,200911*,陈*1 课程设计目的与任务1.1 设计目的为了使学生加深对所学的微机原理知识的理解,培养学生的专业素质,提高其利用微机原理知识处理问题的能力,为今后专业课程的学习、毕业设计和工作打下良好的基础。使学生能比较扎实地掌握微机原理的基础知识和基本理论,掌握控制系统及有关设备的分析、开发等基本技能,受到必要工程训练、初步的科学研究方法训练和实践锻练,增强分析问题和解决问题的能力,了解微机原理
7、和接口技术的新发展。1.2 设计任务本次课程设计有四个任务可供选择,这里选择设计一个简易计算器,要求能正确完成加、减、乘、除四则运算。2 基本要求本次课程设计,1人1题,可以相互讨论,但设计报告由学生独立完成,不得互相抄袭。教师的主导作用主要在于指明设计思路,启发学生独立设计的思路,解答疑难问题和按设计进度进行阶段审查。学生必须发挥自身学习的主动性和能动性,主动思考问题、分析问题和解决问题,而不应处处被动地依赖指导老师。同学应积极主动的提出问题、解决问题、讨论问题,互相帮助和启发。学生在设计中可以引用所需的参考资料,避免重复工作,加快设计进程,但必须和题目的要求相符合,保证设计的正确。指导教师
8、要引导学生学会掌握和使用各种已有的技术资料,不能盲目地、机械地抄袭资料,必须具体分析,使设计质量和设计能力都获得提高。学生要在老师的指导下制定好自己各环节的详细设计进程计划,按给定的时间计划保质保量的完成个阶段的设计任务。设计中可边设计,边修改,软件设计与硬件设计可交替进行,问题答疑与调试和方案修改相结合,提高设计的效率,保证按时完成设计工作并交出合格的设计报告。3 简易计算器的设计设计一个简易计算器过程包括:确定功能,画流程图,确定算法,编写程序,程序调试。设计工具:个人电脑,emu8086。设计语言:8086汇编语言3.1 程序设计流程图1/2?输入单字符开始2:第一次输入字符串09/E?
9、09转换与暂存第二次输入字符串09/E?09转换与暂存输入运算符+-*/E?相应运算转换与输出1:输入字符串az?az转换与输出E退出都不是都不是都不是都不是NNN图1流程图介绍:进入DOS界面,首先显示出计算器功能介绍和个人信息,然后界面输出操提示要求用户输入1或者2选择功能,1表示字母转换功能,2表示计算功能。字母转换功能,只能从小写向大写转换,当用户输入字母时,先判断是否为小写字母,不是则重新进入功能选择界面,是就开始转换并且显示在界面大写。计算功能,提示输入第一个数,先判断是否符合要求的数,符合的话再把输入的数据先从十六进制的ASCII码转换成相应的十进制,再转换成有实际意义的十六进制
10、进制,将该十六进制数存入一个缓冲器单元,对于不符合要求的数就返回重新输入第一个数据。输入完第一个数后,界面再要求操用户输进第二个数,同样的方法判断再进行转换数制,在存到缓冲期的下一个单元。这里转换的方法是采用“乘10加次位”的方法。接下来界面再提示用户输入“+,-,*,/”其中一个运算符,然后程序进行比较输入的运算符,然后跳到相应的代码段执行相应的运算,如果输入的字符不是运算符就重新输入运算符。其中,减法运算中,首先比较被减数与减数的大小,如果减数大于被减数则结果会是负数,所以,首先显示出“-”号,再将被减数与减数换位,进行减法运算。当完成运算后,因为结果是十六进制的,所以要进行转换数制,采用
11、“除10取余倒排列”的方法,最后,就将结果逐位输出显示。3.2 程序基本算法本次计算器计算功能的设计,关键在于数制的转换。用户输入的是字符串,而在以每个字符的十六进制的ASCII码存放,为了把字符串转换成有实际数学意思的十六进制数,就要首先把ASCII码先转换成十进制,再把十进制数转成可以运算的十六进制。例如输入112,系统存放的是31H、31H、32H,通过减去30H,即可转成1、1、2存放,再把三个数1、1、2“乘以10加次位”的方法:(1*10+1)*10+2=112 ,把112也就是70H这个结果放到寄存器里,即可转换成功。只有这样的数才可以利用汇编指令进行正确运算。运算完之后采用“除
12、10取余倒排序”的方法,把结果逐位转换,再加上30H,即可显示。字母转换部分,实现小写向大写转换,只要把相应的ASCII码进行运算就可以,利用这个方法可以实现大小写互换,这里只是简单尝试写出小写向大写转换。例如,a转换成A,a的ASCII码是41H,而A的是61H,要实现a向A转换,61H减去20H 就可以了。要实现A向a转换,对应ASCII码加上20H即可。3.3 程序源代码;-; *数据段*;-DATA SEGMENT ;-计算器功能信息字符串定义- STR1 DB 0AH,0DH,'*$'STR2 DB 0AH,0DH,' A Simple Calculator
13、$'STR3 DB 0AH,0DH,' function :$' STR4 DB 0AH,0DH,' 1.Letter Conversion$'STR5 DB 0AH,0DH,' 2.Four Operations$'STR6 DB 0AH,0DH,'$' STR7 DB 0AH,0DH,0AH,0DH,' Design by Cheukkin Chan$'STR8 DB 0AH,0DH,'*$' ;-提示字符串变量定义- STR13 DB 0DH,0AH,'Please choos
14、e the function:$' ARRAY6 DW 2 DUP(0) ;保留2个字空间作暂存数据计算RESULT1 DB 30 DUP(0),'$' ;保留30个字节存结果数RESULT2 DB 30 DUP(0)'$'-字母转换部分- STR9 DB 0DH,0AH,0DH,0AH,'Letters Conversion $' STR10 DB 0DH,0AH,'Please input the codes:$'STR11 DB 0DH,0AH,'After conversion: $'-四则运算部分
15、- BUFF DB 28 ;允许输入的最多字符数 DB 0 ;实际输入的字符数DB 28 DUP(0) ;保存实际输入的字符ARRAY1 DB 0DH,0AH,0DH,0AH,'Please enter a number: $'输入第一个数字符串说明ARRAY2 DB 0DH,0AH,'Please enter another number: $'输入第二个数字符串说明ARRAY3 DB 0DH,0AH,'The result is : $'输出结果字符串说明 ARRAY4 DB 0DH,0AH,'The number is wrong,
16、please input again : $'输入错误提示字符串说明STRING DB 0DH,0AH,'Please enter the operation(+,-,*,/) : $' ;运算字符串说明 ARRAY DW 2 DUP(0) ;保留2个字空间作暂存数据计算RESULT DB 6 DUP(0),'$' ;保留6个字节存结果数CRLF DB 0DH,0AH,'$' ;显示结果时回车,转行说明YUSHU DW 4 DUP(0) DATA ENDS ;-; *代码段* ;-CODE SEGMENT ASSUME CS:CODE,D
17、S:DATA ;段寄存器说明伪指令START:MOV AX, DATA MOV DS,AX ;往DS段寄存器送数据段基址;-输出计算器的功能相关信息(调用9号功能输出字符串)- MOV DX,OFFSET STR1 MOV AH,9 INT 21H MOV DX,OFFSET STR2 MOV AH,9 INT 21H MOV DX,OFFSET STR3 MOV AH,9 INT 21H MOV DX,OFFSET STR4 MOV AH,9 INT 21H MOV DX,OFFSET STR5 MOV AH,9 INT 21H MOV DX,OFFSET STR6 MOV AH,9 INT
18、 21H MOV DX,OFFSET STR7 MOV AH,9 INT 21H MOV DX,OFFSET STR8 MOV AH,9 INT 21H ;- MOV DX,OFFSET CRLF MOV AH,9 INT 21H ;输出回车换行 ;-;*功能选择*;-STAC: MOV DX,OFFSET STR13 ;取STR13偏移地址送进DX MOV AH,9 INT 21H MOV AH,01H INT 21H ;键盘输入单字符 CMP AL,'E' ;比较输入运算符是否为'E' JZ LAST ;输入运算符为'E',则跳到LAST处,
19、若不是则继续往下执行 CMP AL,31H JZ LC ;如果输入为1,就跳到LC CMP AL,32H JZ INPUT1 ;如果输入为3,就跳到INPUT1 MOV DX,OFFSET CRLF ;1、2都不是,则回车换行 MOV AH,9 INT 21H JMP STAC ;跳回STAC,重新选择功能;-;*字母转换* ;-LC: MOV DX,OFFSET STR9 MOV AH,9 INT 21H MOV DX,OFFSET STR10 MOV AH,9 INT 21H MOV DX,OFFSET BUFF ;把缓冲区BUFF的偏移地址送到DX MOV AH,0AH INT 21H
20、MOV BX,OFFSET BUFF PUSH BX XOR CX,CX MOV CL,BX+1 A1: MOV AL,BX+2 CMP AL,61H ;比较输入 JB LC ;小于61H跳转 CMP AL,7AH JA LC ;大于7AH跳转 INC BX LOOP A1 POP BX CALL LCC JMP STAC;-;*四则运算* ;-;*输入第一个数*;-;-调用09号输出字符串功能,输出DX内容即ARRAY1内容 -INPUT1: MOV DX,OFFSET ARRAY1 ;取ARRAY1偏移地址送进DX MOV AH,9 INT 21H ;-调用0A号输入字符串功能,输入内容暂
21、存在BUFF缓冲区- AGAIN1:MOV DX,OFFSET BUFF ;把缓冲区BUFF的偏移地址送到DX MOV AH,0AH INT 21H ;-判断输入的是否符合要求- PUSH AX PUSH BX PUSH CX XOR CX,CX MOV BX,OFFSET BUFF MOV CL,BX+1 ;把输入的字符数给CX AA: MOV AL,BX+2 CMP AL,'E' ;比较输入运算符是否为'E' JZ LAST ;输入运算符为'E',则跳到LAST处,若不是则继续往下执行 CMP AL,30H JB Error1 ; AX低于3
22、0H就跳到Error1 CMP AL,39H JA Error1 ;AX高于39H就跳到Error1 INC BXLOOP AA POP CX POP BX POP AX JMP CC1 ;-提示输入错误,重新输入- Error1: MOV DX,OFFSET ARRAY4 MOV AH,9 INT 21H JMP AGAIN1;- CC1: CALL ASC_HEX ;调用ASC_HEX子程序 MOV ARRAY,AX ;将第一个数存到暂存区ARRAY ;-;*输入第二个数*;- MOV DX,OFFSET ARRAY2 MOV AH,9 INT 21H AGAIN2:MOV DX,OFFS
23、ET BUFF MOV AH,0AH INT 21H ;-判断输入的是否符合要求- PUSH AX PUSH BX PUSH CX XOR CX,CX MOV BX,OFFSET BUFF MOV CL,BX+1 ;把输入的字符数给CX BB: MOV AL,BX+2 CMP AL,'E' ;比较输入运算符是否为'E' JZ LAST ;输入运算符为'E',则跳到LAST处,若不是则继续往下执行 CMP AL,30H JB Error2 ; AX低于30H就跳到Error2 CMP AL,39H JA Error2 ;AX高于39H就跳到Erro
24、r2 INC BXLOOP BB POP CX POP BX POP AX JMP CC2 ;-提示输入错误,重新输入-Error2: MOV DX,OFFSET ARRAY4 MOV AH,9 INT 21H JMP AGAIN2 ;- CC2: CALL ASC_HEX MOV ARRAY+2,AX ;- ;*输入运算符*;-INPUT3:MOV AH,09H MOV DX,OFFSET STRING INT 21H ;调用01号输入单字符功能,记运算符 MOV AH,01 ;键盘输入单字符(运算符+-*/) INT 21H ;-比较输入的运算符- CMP AL,'+' ;
25、比较输入运算符是否为'+' JZ ADD1 ;输入运算符为'+',则跳到ADD1 处,若不是则继续往下执行 CMP AL,'-' ;比较输入运算符是否为'-' JZ SUB2 ;输入运算符为'-',则跳到SUB2处,若不是则继续往下执行 CMP AL,'*' ;比较输入运算符是否为'*' JZ MUL3 ;输入运算符为'*',则跳到MUL3处,若不是则继续往下执行 CMP AL,'/' ;比较输入运算符是否为'/' JZ DIV4 ;输
26、入运算符为'/',则跳到DIV4处,若不是则继续往下执行 CMP AL,'E' ;比较输入运算符是否为'E' JZ LAST ;输入运算符为'E',则跳到LAST处,若不是则继续往下执行 JMP INPUT3 ;如果输入运算不是以上,则从新返回到INPUT3处;-;* 加法运算*;- ADD1: ;-回车,换行显示- PUSH AX MOV DX,OFFSET ARRAY3 ;取ARRAY3偏移地址送进DX MOV AH,9 INT 21H POP AX MOV AX,ARRAY MOV BX,ARRAY+2 ADD AX,BX
27、CALL HEX_ASC ;调用HEX_ASC子程序 MOV DX,OFFSET CRLF MOV AH,9 INT 21H ;输出回车换行 JMP STAC ;-;* 减法运算*;- SUB2: ;-回车,换行显示- PUSH AX MOV DX,OFFSET ARRAY3 ;取ARRAY3偏移地址送进DX MOV AH,9 INT 21H POP AX MOV AX,ARRAY MOV BX,ARRAY+2 CMP AX,BX JB KK ;比较AX与BX的大小,如果 AX 低于 BX,则跳到 KK SUB AX,BX ;如果AX大于或者等于,则 AX 减 BX CALL HEX_ASC
28、MOV DX,OFFSET CRLF MOV AH,9 INT 21H ;输出回车换行 JMP STAC ;-负数处理-KK: SUB BX,AX MOV AX,BX CALL HEX_ASC1 MOV DX,OFFSET CRLF MOV AH,9 INT 21H ;输出回车换行 JMP STAC;-;* 乘法运算*;-MUL3: ;-回车,换行显示- PUSH AX MOV DX,OFFSET ARRAY3 ;取ARRAY3偏移地址送进DX MOV AH,9 INT 21H POP AX MOV AX,ARRAY MOV BX,ARRAY+2 MUL BX CALL HEX_ASC MOV
29、 DX,OFFSET CRLF MOV AH,9 INT 21H JMP STAC ;-;* 除法运算*;-DIV4: ;-回车,换行显示- PUSH AX MOV DX,OFFSET ARRAY3 ;取ARRAY3偏移地址送进DX MOV AH,9 INT 21H POP AX MOV CX,4 MOV AX,ARRAY DIV5: MOV BX,ARRAY+2 MOV DX,0 DIV BX PUSH DX ;保护余数 PUSH CX CALL HEX_ASC POP CX POP DX ;释放余数 MOV YUSHU,DX CMP CX,4 JNZ YS2 ;CX不等于2就跳转到YS2
30、MOV DL,2EH MOV AH,2 ; 输出小数点 INT 21H YS2: MOV AX,YUSHU MOV BX,10 MUL BX ;取余数乘以10继续计算,把结果放到AX LOOP DIV5 MOV DX,OFFSET CRLF MOV AH,9 INT 21H JMP STAC;-返回操作系统- LAST: MOV AH,4CH INT 21H ;-;* ASC_HEX子程序(把ascii码转换成对应的十六进制数);-ASC_HEX PROC XOR CX,CX ;清空CX,CX=0 MOV CL,BUFF1 ;存入字符数 JCXZ ABCD ;如果CX=0,即输入字符数为0,跳
31、到ABCD处,返回主程序 PUSH CX ; 保护CX,把CX的值放入栈区 MOV BX,OFFSET BUFF+2 ;取首字符地址 PUSH BX ; 保护BX,把BX的值(首字符地址)放入栈区 L0: SUB BX,30H ;输入字符即十六进制的ASCII码转换成相对应的十进制码(09),以BX作为指针 INC BX LOOP L0 POP BX ;释放原来栈区的BX的值(首字符地址) MOV AX,0 MOV CH,0 MOV CL,BX-1 ; 取字符数 L1: MOV DX,10 ;十进制转换成二进制 ,以10为基数 MUL DX ADD AL,BYTE PTR BX ; INC B
32、X LOOP L1 POP CX ABCD: RET ;返回主程序ASC_HEX ENDP;-; * HEX_ASC子程序(十六进制转换成相应的ascii码)*;-HEX_ASC PROC MOV SI,OFFSET RESULT ;将RESULT暂存结果的单元偏移地址送到SI寄存器中 ADD SI,4 ;将源变址指针指到最后一个单元 MOV SI+1,"$" ;预先放结束码,用来后面调用09号输出功能的停止 MOV CX,5 ;循环次数,最多不超过5位十进制数,因为16位二进制数即4位16进制数不超过65535HA1: MOV DX,0 ;DX用来放余数的,所以每次都要清
33、零 MOV BX,10 ;以10为基数 DIV BX ;二进制转换成十进制,除10取余法 ADD DL,30H ;十进制转换成十六进制的ASCII码 MOV SI,DL ;保存当前位结果,(先个位、再十位、后百位、倒序!) DEC SI ;指向前一位LOOP HA1 MOV CX,4 ;循环次数为4次,对应上面的SI所设的单元数HA2: INC SI MOV AL,SI CMP AL,30H ;判断是否为0,若是,则继续循环。 JNZ NOTZEARO ;若不是则跳到NOZEARO,显示出该字符LOOP HA2 INC SINOTZEARO: ;-09号输出字符串功能调用,显示出内容- MOV
34、 DX,SI MOV AH,9 INT 21H RET HEX_ASC ENDP ;-; *减法负数情况的HEX_ASC1子程序(十六进制转换成相应的ascii码)*;-HEX_ASC1 PROC MOV SI,OFFSET RESULT ;将RESULT暂存结果的单元偏移地址送到SI寄存器中 ADD SI,4 ;将源变址指针指到最后一个单元 MOV SI+1,"$" ;预先放结束码,用来后面调用09号输出功能的停止 MOV CX,5 ;循环次数,最多不超过5位十进制数,因为16位二进制数即4位16进制数不超过65535AB1: MOV DX,0 ;DX用来放余数的,所以每
35、次都要清零 MOV BX,10 ;以10为基数 DIV BX ;二进制转换成十进制,除10取余法 ADD DL,30H ;十进制转换成十六进制的ASCII码 MOV SI,DL ;保存当前位结果,(先个位、再十位、后百位) DEC SI ;指向前一位LOOP AB1 MOV CX,4 ;循环次数为4次,对应上面的SI所设的单元数AB2: INC SI MOV AL,SI CMP AL,30H ;判断是否为0,若是,则继续循环。 JNZ NOTZEARO1 ;若不是则跳到NOZEARO1,显示出该字符LOOP AB2 INC SINOTZEARO1: ;- PUSH AX MOV AH,02H
36、MOV DL,'-' ;预先输出一个'-'号,表示结果为负数 INT 21H POP AX ;- MOV DX,SI MOV AH,9 INT 21H RET HEX_ASC1 ENDP ;- ;-LCC子程序-;-LCC PROC XOR CX,CX MOV CL,BX+1 PUSH BX PUSH CXLCC1:MOV AL,BX+2 SUB AL,20H MOV BX+2,AL INC BXLOOP LCC1 MOV BX+2,'$' MOV DX,OFFSET STR11 MOV AH,9 INT 21H POP CX POP BX AD
37、D BX,2 MOV DX,BX MOV AH,9 INT 21H MOV DX,OFFSET CRLF MOV AH,9 INT 21H MOV DX,OFFSET CRLF MOV AH,9 INT 21H RET LCC ENDP CODE ENDS END START3.4 程序调试功能选择界面:图2 图3如图2所示,运行程序,首先显示计算器的相关信息,主要利用系统功能调用实现。然后是输出提示要求用户通过输入1或者2选择功能。字母转换功能功能1可以实现小写字母向大写字母的转换,当用户输入1会进入图3界面。提示用户输入字母,注意要是小写,如果输入不是小写则会提示重新输入如图4所示。输入正
38、确的小写字母自动转换并且返回功能选择。图4(上) 图6(下) 图5(上) 图7(下)加法运算功能如图6所示,任意输入两个正整数相加,结果正确。先输入第一个数,然后再输入第二个数,接着输入运算符,这样程序就会自动输出结果。注意运算两数相加的两个数不能超过五位数,并且结果不能超过65535 。减法运算功能如图7所示,操作方法和加法相同。虽然不可以进行负数间的运算,但是可以输出负数,如图8所示。图8 图9乘法运算功能如图9所示,操作方法和加法相同。除法运算功能如图10所示,操作方法和加法相同。除法输出结果精确到3位小数,但是不会四舍五入,而是直接舍去后面剩下的小数。如图11所示。图10 图11输入错误提示功能以下述说的前提是:输入的字
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 分众传媒:成都新潮传媒集团股份有限公司资产重组标的审计报告
- 温室农业环境监测系统2025年智能化升级产业生态圈研究报告
- 2025年中职期中考试试题及答案
- 锅炉知识培训教学课件
- 2025年房屋预订合同(适用于预购住宅)
- 2025合同有效期限的约定重要性分析
- 2025年仓储合同范本
- 工程地毯绘画设计方案(3篇)
- 锅炉房环保脱硫知识培训课件
- 脊柱定位课件
- IInterlib区域图书馆集群管理系统-用户手册
- EnglishDrama英语戏剧写作及表演技巧课件
- DB11T 827-2019 废旧爆炸物品销毁处置安全管理规程
- 社会组织管理概论全套ppt课件(完整版)
- 轧机设备安装施工方案
- DB31∕T 926-2015 城镇供水管道水力冲洗技术规范
- (完整版)IATF16949新版过程乌龟图的编制与详解课件
- 制药企业仓库温湿度分布的验证
- 满堂脚手架工程施工方案
- LY∕T 2705-2016 樟脑磺酸
- GB∕T 3099.4-2021 紧固件术语 控制、检查、交付、接收和质量
评论
0/150
提交评论