版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、武汉理工大学微机原理与接口技术课程设计说明书目录摘要I1设计任务及其分析11.1设计任务11.2设计任务分析12.方案论证与比较12.1程序编写方式12.2字母随机产生的方式23.系统原理阐述24.软件设计说明34.1主程序流程图34.4游戏界面64.4.1游戏前的提示界面64.4.2游戏界面的初始化74.5字母下落控制84.5.1字母随机选取84.5.2字母下落延时94.5.3游戏输入响应104.5.4字母下落程序段114.6随机字母补充HIT134.7游戏暂停函数PAUSEE144.8字母消失程序段144.8.1字母消失总流程图144.8.2字母高亮颜色选择Color_Select函数15
2、4.8.3发声程序Sound2函数164.8.4字母消失函数Disappear函数174.9游戏结束结果显示函数DISP184.10难度选择函数195.程序调试与运行记录205.1主界面画面205.2主界面输入的错误提示215.3游戏运行的画面225.4难度选择界面23参考资料25附录26摘要指法练习程序完成了键盘指法练习功能,通过汇编语言的编程实现字母的随机产生、落下、消失、以及发声功能,并且完成了通过键盘来控制游戏的开始、暂停、结束等功能,完成了人机交互界面的编程。除此以外,整个程序采用模块化设计,增强了可读性。通过这一次课程设计,更加深刻理解了汇编的基础知识和编写调试程序的基本方法。关键
3、词: 指法练习,汇编,模块化I1设计任务及其分析1.1设计任务1.从屏幕上方以一定的时间间隔随机落下可显示字符,字符的出现位置亦是随机的;2.在多个字符下落的过程中可输入任意键,若键入与其中的任意一个字符相匹配的键,则该字符高亮显示并发出蜂鸣声,同时计分;3.按ESC 键结束练习并显示命中率;4.按Q 键退出。1.2设计任务分析根据任务的要求可以分析得出在程序应有的各个功能模块:1、字母的随机出现与显示;2、字母自动下落显示;3、键盘输入正确时字母消失;4、字母消失时的字符高亮;5、字母消失时的蜂鸣发声;6、命中率计算程序与计分程序。同时在还应满足:1、游戏时按Q 键退出;2、在任何情况下按E
4、SC键后退,当显示界面为主界面时,退出程序。本程序在要求的基础拟添加以下功能:1、游戏难度选择;2、错误输入提示;3、字符高亮的颜色变化;4、得分的实时显示。2.方案论证与比较2.1程序编写方式方式1:仅利用简单的系统符号指令完成程序优点:指令简单,易于理解缺点:过多的转跳会导致程序可读性降低方式2:利用宏定义和函数定义的模块化程序设计优点:程序实现模块化,可读性高缺点:指令难度偏大根据要求的以及预想的功能实现,程序需要实现的功能模块达到10个之多,用方式1编程必然使程序杂乱不易读,所以决定选择方式2来进行编程。2.2字母随机产生的方式方式1:读取系统时间的秒位作为选择基数优点:结果近似随机缺
5、点:秒位时间过长,有可能导致随机失败方式2:读取系统时间的1/100秒位作为选择基数优点:相对打字游戏来说,变化速度上满足要求缺点:不是完全随机因为在8086系统中,没有产生随机数的函数可供调用,所以只能利用BIOS中断或者DOS中断来产生随机数作为选择基数。而系统时间秒位相对指法练习程序来说速度过慢,因此选择方式2。3.系统原理阐述从设计任务与要求可以得知编写此程序的基本原理,编写一个主程序和若干个子程序来完成任务所要求的功能,与此同时,程序尽量模块化,功能化,让程序看起来更加简洁明了。整个程序的流程是:首先调用初始化子程序,对系统参数和界面进行初始化,然后调用输入功能选择程序,以此对功能进
6、行选择,根据用户的选择来调用不同的子程序;同时应该能产生随机数使字母能够随机产生;最后在游戏结束时调用分数显示子程序。具体的子程序在程序功能说明中详细讲到,此处不再赘述。4.软件设计说明4.1主程序流程图图1.主程序原理图主程序的流程图如图1所示。程序运行时,首先利用Menu,Init_game和Clean三个实现宏定义过的函数进行初始化。其中Init_game的功能是循环输出,用于初始化界面,Menu的功能是在界面上输出字符串,用于界面信息的显示,Clean的功能是清理屏幕。初始化完毕后,进入人机交互的阶段,此时用户需要输入各功能对应的数字进行供选择。若输入为1,则直接开始游戏; 若输入为2
7、,则进入速度选择, 若输入为3或者Esc,则退出程序;若输入为其它则转跳otherkey显示错误输入信息,提示用户输入了错误信息并重新选择。4.2宏定义函数图2宏定义函数流程图宏定义函数的流程图如图2所示。由图可见,Init_game函数首先设置光标到指定位置,然后输出字符,重复次数也是用函数带入的参数决定。Clean函数主要调用了BIOS中断的屏幕初始化功能(AH=6,INT10H),并且CL,CH,DH,DL四个参数也由函数带入的参数决定,那么Clean函数可以局部清理,可以在程序的其它位置使用到。Menu函数主要调用了DOS中断的的显示字符串功能(AH=09,INT21H),主要用于提示
8、信息的输入,在多处使用到,除了在主程序初始化时使用到外,使用的地方还包括难度选择程序,游戏前的提示界面,游戏时界面下方生命值和得分显示以及游戏结束后命中率的显示。4.3按键错误处理程序运行在主界面,用户需要进行输入选择时,有可能输入有误。如果输入有误,程序会转跳到Otherkey程序中进行处理。程序首先回显有误字符,并且在相应位置显示错误提示信息,通知用户。然后输入有误的地方输出空格,最后转跳到INPUT,让用户重新输入。图3 Otherkey流程图4.4游戏界面4.4.1游戏前的提示界面图4 提示界面流程图游戏提示界面的流程图如图4所示。在主程序运行时,如果输入为1,则程序进入游戏界面。首先
9、进入一个游戏提示界面,该界面通知用户,按任意键开始,按Esc退出,通知用户在游戏时按Esc键或Q键退出,按空格键暂停。并且显示该界面时,如果用户按下Esc键可返回上层,如果按下非Esc的任意键即可进入游戏界面并且进行游戏界面的初始化。4.4.2游戏界面的初始化图5 游戏初始化流程图游戏初始化流程图如图5所示。游戏初始化时随机产生字母,方法是:调用OUTPUT_LETTERS函数,读取系统时间的1/100秒的数值保存在DL中,将这个值转移到AL然后以26为除数进行除法运算,得到的余数存在AH中,以这个结果作为产生字母的序号数。根据ASCII码表可知,根据这个序号得到对应字母的ASCII码值,只需
10、要在数值在原数加61H即可。在界面的第一行被填满之后,利用宏定义的Menu函数在指定位置显示生命值和分数。随后转跳Game,进入游戏阶段。4.5字母下落控制4.5.1字母随机选取图6 字母随机选取流程图字母随机选取流程图如上图6所示。在游戏初始化中,只是在第一行显示了可能落下的字母。字母随机选取则是在第一行显示的字母中随机选取。首先把系统时间的1/100秒位数值赋给变量Position。当Position为0时,不符合程序要求,所以令Position自加1,当Position为78-99时,超出了游戏界面的范围,令Position自减78.这样可以保证Position作为列数输出。4.5.2字
11、母下落延时图7字母下落延时字母下落延时的流程图如图7所示。首先令CX=0,然后自加,以SPED1为界,若数值超过便跳出循环,若数值低于SPED1,则继续执行循环指令,直到数值超过位置。4.5.3游戏输入响应图8 游戏输入响应流程图游戏输入响应流程图如图8所示。调用DOS中断的控制台I/O功能(AH=6,INT21H)来判断用户的输入字符,并且根据输入的不同对做出不同响应。当用户没有输入时进入PASS程序段,PASS程序段用来控制字母的下落,后面会有介绍,此处不赘述。当用户在游戏时按Esc键结束游戏,并且调用DISP函数输出并显示分数和命中率,之后按任意键可跳转到主界面上。当用户啊按空格键时调用
12、PAUSEE函数暂停。当用户输入无关字符时,程序同样进入PASS程序段,使字母继续下落。当用户输入的是下落的字母时,程序转跳到Disappear程序段中,是该字母消失,并且右下角的分数显示实时更新。4.5.4字母下落程序段字母下落程序段由两部分组成,一部分是PASS延时段,一部分是PRINT显示段。图9 PASS程序段流程图PASS程序段流程图如图9所示。因为现在计算机的处理速度相对较快,而8086寄存器能存储的最大数值只有65535,如果只使用一个自加或自减延时,那么延时时间过短,用户根本来不及反应,所以这里使用PASS延时与前面的字母下落延时构成嵌套延时,来增加游戏的可用性。图10 PRI
13、NT程序段流程图PRINT程序段流程图如图10所示。PRINT程序段的第一个作用是产生下落的视觉效果,方法是:读取字母所在光标位置,然后在这个位置上输出空格,延时后然后把光标移到下一行,列数不变,在光标位置输出该字符,如此循环产生下落效果。PRINT程序段的第二个作用控制游戏界面上的生命值LIFE的实时显示,方法是:当字母开始下落时,对字母下落的行数进行计数,当这个数超过了可用行数的最大值时,LIFE便自动减1,并把光标移到对应位置输出。同时,如果LIFE=0,程序转跳到主界面,游戏结束;如果LIFE>0,程序转跳到HIT程序段将刚才下落的字母的空位再次补上随机产生的字母。4.6随机字母
14、补充HIT图11 HIT程序段流程图如上图11是HIT程序段流程图。随机字母补充程序段的作用是,在游戏中某一个字母落下之后,重新随机产生一个字母补充在第一行的空白处。该段程序首先把光标移到空出的位置处,然后随机产生字母(字母随机产生的方法如前所述)并填充,最后转跳到GAME程序段(也就是字母随机选取段)继续游戏。4.7游戏暂停函数PAUSEE图12 PAUSEE函数流程图PAUSEE函数流程图如图12所示。在用户玩游戏的时候,按下空格即可调用PAUSSE函数。PAUSSE函数的流程很简单,调用一个DOS的输出中断,若无输入,程序就停在这里,形成暂停效果。程序处在暂停函数中时,输入Esc则调用D
15、ISP函数,输出正确率和最终得分等信息,输入空格程序转跳到PASS继续执行,字母继续下落。4.8字母消失程序段4.8.1字母消失总流程图由图7游戏输入响应流程图可知,当字母下落时输入屏幕上显示的字母,程序转跳To_disappear程序段,此时字母消失并且高亮,与此同时,蜂鸣器发出声音。该程序段的流程图如下图13所示。该程序段首先调用Color_Select函数使字母高亮,并且显示不同的颜色;Color_Select函数返回后Sound2函数又被调用,是蜂鸣其发出固定频率的响声;Sound2函数返回后Disappear函数又被调用使字母消失,同时刷新并显示游戏界面分数。Disappear函数不
16、返回,转跳到HIT程序段随机补充字母。图13 To_disappear总流程图4.8.2字母高亮颜色选择Color_Select函数Color_Select函数流程图如下图14。程序的流程如下:首先获取光标位置,将行号和列号保存起来,然后根据变量color(在1到3之间变化)的值来确定输出的颜色,最后把光标移至原来的位置,输出字符。输出字符时调用的是BIOS中断(AH=09H,INT10)。调用该中断时,BL的值决定了字母显示的颜色,所在color等于不同的值时,将BL置不同的值即可。程序中设定的是当color=1时, 输出字母红色;当color=2时,输出字母粉红色;当color=3时,输出
17、字母黄色,并将color清零。图14 Color_Select函数流程图4.8.3发声程序Sound2函数8086架构的处理器中都集成有8253/54,这种芯片有3个计数器。只要控制其端口,给它装入初值计数便可产生一定频率的波形。让这个波形通过蜂鸣器便可使蜂鸣器发出一定频率的响声。具体Sound2流程图如图15所示。图15 Sound2函数流程图4.8.4字母消失函数Disappear函数Disappear函数流程图如下图16所示。因为在下落延时程序段有两个PUSH CX的操作,并且利用CX计数,所以在函数连续两个POP CX操作,这样才不至于前面的计数出现错误,导致整个程序不能运行。图16
18、Disappear函数流程图4.9游戏结束结果显示函数DISP当游戏中按下Esc键,Q键或者是生命值LIFE=0时,显示函数DISP都会被调用出来显示游戏分数,失分数以及命中率。DISP函数的流程是,首先在指定位置显示提示性字符,接着将游戏分数从十六进制转化为两个十进制数分别显示出来。显示失分数时,不需要拆分成2个十进制数显示,因为失分数与生命值的和为9,即error+LIFE=9,所以error的值最大为9,不需要进行十六到十进制的转化。DISP函数的流程图如下图17所示。图17 DISP函数流程图4.10难度选择函数当在主界面输入2时,程序会进入难度选择函数,实现难度选择的功能。打字游戏的
19、难度只取决于速度,所以难度选择也可以认为是速度选择,速度越大,难度越大。由图6可是SPED1大小直接决定了字母下落的速度,SPED1越大,字母下落速度越慢,SPED1越小,字母下落速度越快。因此调节难度直接对应这改变SPED1的大小,程序中三个难度easy,normal, hard 分别对应的SPED1的值为50000,40000,20000。难度选择函数流程图如下图18所示。图18 Speed_Choose函数流程图5.程序调试与运行记录5.1主界面画面程序程序运行时首先进入主界面功能输入选择阶段,如下图19所示。图19 主界面5.2主界面输入的错误提示当输入无关字符,程序会转跳至Other
20、key程序执行,输入错误提示信息。如下图20是无关字符4输入前的画面,下图21是无关字符4输入后的画面。图20 4输入前的画面图214输入后的画面5.3游戏运行的画面游戏运行满足设计要求,并且高亮的颜色能够改变,游戏运行的画面如图22所示。游戏结束时会出现分数,失误数以及命中率的提示语,如下图23所示。图22 游戏运行的画面图23 游戏结束的分数画面5.4难度选择界面进入难度选择界面,输入1,2,3分别对应不同的难度。如下图23是输入2选择成功之后的信息提示。难度选择成功后,数字后会出现提示语“Done”。当输入无关字符是,难度选择界面也会有提示信息,如下图24所示。图23 难度设置成功的画面
21、图24 难度选择无关输入时的界面6.总结参考资料1沈美明、温冬婵编著.IBM-PC汇编语言程序设计. 北京:清华大学出版社.2010.6 2刘其明. 汇编语言程序设计教程. 江苏:中国矿业大学出版社, 2010.103姚燕南.微型计算机原理(第五版).西安:西安电子科技大学出版社.2008.104王爽.汇编语言(第二版).北京:清华大学出版社.2008.45罗云彬.汇编语言程序设计.北京:电子工业出版社.2002.10附录1.程序清单:;*指法练习程序*;*作者:电气1101唐志伟* INIT_GAME MACRO OP1,OP2,OP3,OP4,OP5,OP6 ;循环输出,用于初始化界面 M
22、OV CX,0 MOV DH,OP1 ;起行 MOV DL,OP2 ;起列 OP6: MOV AH,02H MOV BH,00H INT 10H PUSH CX MOV AH,0AH MOV AL,OP3 ;要显示的字符 MOV CX,01H MOV BH,00H INT 10H POP CX INC CX INC OP4 ;指出循环输出的是行还是列 CMP CX,OP5 ;循环次数 JNE OP6 ENDM CLEAN MACRO OP1,OP2,OP3,OP4 ;用于清屏,分别是起止的行和列 MOV AH,6 MOV BH,00010111B MOV AL,0 MOV CH,OP1 MOV
23、 CL,OP2 MOV DH,OP3 MOV DL,OP4 INT 10H MOV AH,2 MOV BH,0 MOV DH,0 MOV DL,0 INT 10H ENDM MENU MACRO OP1,OP2,OP3 ;用于屏幕上文字的输出 MOV CX,0 MOV AH,02H MOV BH,00H MOV DH,OP1 MOV DL,OP2 INT 10H LEA DX,OP3 MOV AH,9 INT 21H ENDM DATA SEGMENT FGF DB '=$' MENU1 DB '1.start game$' MENU2 DB '2.se
24、lect level$' ;主界面上显示的内容 MENU3 DB '3.exit$' MENU4 DB 'select number of menu:$' MENU5 DB 'author: TangZhiwei$' MENU6 DB 'NO. : 0121111350114$' MENU7 DB '1.very easy$' MENU8 DB '2.normal$' ;难度的选择 MENU9 DB '3.hard$' MENU10 DB '4.return$'
25、; MENU11 DB 'data : 2013.1.8$' MENU12 DB 'Please input right number$' MENU13 DB 'Done$' MEG1 DB 'press any key to start the game.$' MEG2 DB 'press esc key return main menu$' MEG3 DB 'press space key for pause $' MEG4 DB 'when the game was paused,pr
26、ess ese to quit!$' MEG5 DB 'life:$' ;生命数 MEG6 DB 'score:$' ;分数 MEG7 DB 'hit the letter num:$' MEG8 DB ' miss letter num:$' MEG9 DB ' the shooting is:$' MA DB 0 MB DB 0 SPED1 DW 0 SPEED DW 3000D ;游戏的速度 LETTERS DB 78 DUP(0) ;上方显示的字母 LIFE DB 39H POSITION DB 1
27、 ;上方字母的位置用于控制落下的字母 TIME_M DB 0 TIME_S DB 0 XMUL DB 13 N DB 26 SCORE1 DB 0 LEVEL DB 1 HANG DB 0 LINE DB 0 FEN1 DB 0 FEN2 DB 0 FEN3 DB 0 FEN4 DB 0 FEN5 DB 0 STRING DB '100%$' ERROR DB 0 COLOR DB 0 ROW DB 0 CODE SEGMENT ASSUME CS:CODE,DS:DATA ;*初始化首端* START: MOV AX,DATA MOV DS,AX MOV POSITION,1
28、 MOV SPEED,3000 MOV LEVEL,1 MOV SPED1,50000 MOV ERROR,0 MOV SCORE1,0 JIEMIAN: ;主界面的初始化 MOV AH,01H MOV CX,00H OR CH,00010000B INT 10H CLEAN 0,0,24,79 INIT_GAME 0,0,08H,DL,80,SK1 INIT_GAME 24,0,08H,DL,80,SK2 INIT_GAME 0,0,08H,DH,25,SK3 INIT_GAME 0,79,08H,DH,25,SK4 MENU 5,15,FGF MENU 7,25,MENU1 MENU 9,
29、25,MENU2 MENU 11,25,MENU3 MENU 13,15,FGF MENU 15,25,MENU4 MENU 17,55,MENU5 MENU 19,55,MENU6 MENU 21,55,MENU11;*初始化尾端*;*功能选择首端* MOV AH,2 MOV BH,0 MOV DH,15 MOV DL,47 INT 10H MOV AH,0AH MOV AL,32 MOV BH,00H MOV CX,01H INT 10H INPUT: MOV AH,1 INT 21H CMP AL,49 ;若输入是'1',则进入游戏 JE BEGIN CMP AL,50
30、;若输入是'2',则进入速度选择函数 JE TO_SPEED_CHOOSE JMP JIXU4 TO_SPEED_CHOOSE: CALL SPEED_CHOOSE JIXU4: CMP AL,51 ;若输入是'3'或'ESC',则退出游戏 JE TO_EXIT CMP AL,1BH JE TO_EXIT_D TO_OTHERKEY: ;若输入是其它键,则转跳OtherKey,进行错误信息处理 JMP OTHERKEY TO_EXIT: MOV AH,1 INT 21H CMP AL,0DH JNE TO_OTHERKEY JMP EXITT T
31、O_EXIT_D: JMP EXITT;*功能选择首端*;*打字游戏主程序首端* BEGIN: MOV AH,1 INT 21H CMP AL,0DH JNE TO_OTHERKEY CLEAN 1,1,23,78 PLAY_MESSAGE: ;游戏开始前的提示语 MENU 10,18,MEG1 MENU 12,18,MEG2 MENU 14,18,MEG3 MENU 16,18,MEG4 MOV AH,07H INT 21H CMP AL,1BH ;按任意键继续,'Esc'除外 JE TO_JM ;不把输入的字符显示在屏幕上 JMP PLAY TO_JM: JMP JIEMI
32、AN ;若按'Esc',则转跳主界面 PLAY: CLEAN 1,1,23,78 MOV LIFE,39H MOV AH,2 MOV BH,0 MOV DH,1 MOV DL,1 INT 10H MOV BX,0 LEA SI,LETTERS CALL OUTPUT_LETTERS ;在游戏界面的首行显示下落的字母 NEXT: CALL DISPLAY_LIFE_SCORE1 ;在游戏界面下显示 1.剩余生命值life和2.分数Score1 SUB_P: ;字母选择及下落程序段 SUB POSITION,78 CMP POSITION,0 JNE NEXT3 INC POSIT
33、ION NEXT3: JMP GAME_NEXT GAME: LEA SI,LETTERS MOV AH,2CH ;取系统时间产生随机数,确定落下字母的列号 INT 21H MOV AL,DL MOV POSITION,AL ;position为字母的列号 CMP POSITION,0 JNE NEXT2 INC POSITION NEXT2: CMP POSITION,78 JA SUB_P GAME_NEXT: ADD SI,WORD PTR POSITION DEC SI MOV DL,POSITION MOV AH,02H MOV DH,1 MOV BH,0 INT 10H MOV B
34、L,12H TEMP: MOV CX,0 NEXTROW: PUSH CX MOV CX,0 YANCHI: PUSH CX MOV CX,0 YANCHI1: ADD CX,1 CMP CX,SPED1 JNE YANCHI1 PUSH DX MOV AH,06H MOV DL,0FFH INT 21H POP DX CMP AL,0 JZ PASS SKIP1: CMP AL,81 JE DISPLAY_1 ;输入'Q'退出 CMP AL,32 JE PAUSEEE ;输入空格暂停 CMP AL,1BH JE DISPLAY_1 ;输入Esc退出 JMP JIXU2 PAUSEEE: CALL PAUSEE DISPLAY_1: JMP DISPLAY1 JIXU2: CMP AL,SI JE TO_DISAPPEAR ;若输入与下落字母一样,则高亮后消失并且计分 JMP PASS ;若输入与下落字母不一样,则继续下落 TO_DISAPPEAR: CALL COLOR_SELECT FASHENG: CALL SOUND2 JIXU3: CALL DISAPPEAR PASS: POP CX INC CX CMP CX,SPEED ;SPEED为常数 JE PRINT1 JMP YANCHI PRINT1: JMP PRINT DI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年学校常见病防治工作制度样本(二篇)
- 2024年学校少先队员工作计划范例(二篇)
- 2024年寒假学习计划书例文(四篇)
- 2024年幼儿园中班半日活动计划(二篇)
- 2024年单位劳动合同参考范文(五篇)
- 2024年学校会计个人工作计划例文(三篇)
- 2024年吊车包月租赁合同参考范文(二篇)
- 紧密型县域医疗卫生共同体监测指标体系(2024版)
- 2024年小学班主任德育计划范例(五篇)
- 2024年合作经营协议经典版(二篇)
- 英文译稿《药品注册管理办法》
- 最新部编版二年级上册道德与法治第二单元我们的班级测试卷6
- 小学英语课堂教学策略与方法探讨
- 5科学大玉米真好吃课件
- 新苏教版2021-2022四年级科学上册《8力与运动》教案
- DB44 T 552-2008 林业生态 术语
- 套装门安装工程施工方案(完整版)
- IBHRE国际心律失常考官委员会资料: ibhre 复习资料
- 洋葱杂交制种高产栽培技术
- 坚定信心 努力拼搏——在公司大检修动员会上的讲话
- 水泵生产作业指导书
评论
0/150
提交评论