微机原理课后第39题.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 课后 39
- 资源描述:
-
39.(上机题)编写程序实现下列5项功能,通过从键盘输入1~5进行菜单式选择: (1)按数字键“1”,完成将字符串中的小写字母变换成大写字母。用户输入由英文大 小写字母或数字0~9组成的字符串(以回车结束),变换后按下列格式在屏幕上显示: <原字符串>例如:abcdgyt0092 <新字符串> ABCDGYT0092 按任一键重做;按Esc键返回主菜单。 (2)按数字键“2”,完成在字符串中找最大值。用户输入由英文大小写字母或数字 0~9 组成的字符串(以回车结束),找出最大值后按下列格式在屏幕上显示: <原字符串> The maximum is <最大值>. 按任一键重做;按Esc键返回主菜单。 (3)按数字键“3”,完成输入数据组的排序。用户输入一组十进制数值(小于255), 然后变换成十六进制数,并按递增方式进行排序,按下列格式在屏幕上显示: <原数值串> <新数值串> 按任一键重做;按Esc键返回主菜单。 (4)按数字键“4”,完成时间的显示。首先提示用户对时,即改变系统的定时器 HH:MM:SS(以冒号间隔,回车结束),然后在屏幕的右上角实时显示出时 间:HH:MM:SS。 按任一键重新对时;按Esc键返回主菜单。 (5)按数字键“5”,结束程序的运行,返回操作系统。 解: ※ 主程序的编程思路: 四、程序代码 STACK SEGMENT STACK DB 256 DUP(?) TOP LABELWORD STACK ENDS DATA SEGMENT TABLE DW G1, G2, G3, G4, G5 STRING1 DB '1. Change small letters into capital letters of string;', 0DH, 0AH, '$' STRING2 DB '2. Find the maximum of string;', 0DH, 0AH, '$' STRING3 DB '3. Sort for datas;', 0DH, 0AH, '$' STRING4 DB '4. Show Time;', 0DH, 0AH, '$' STRING5 DB '5. Exit.', 0DH, 0AH, '$' STRINGN DB 'Input the number you select (1-5) : $' IN_STR DB 'Input the string (including letters & numbers, less than 60 letters) :', 0DH, 0AH, '$' PRESTR DB 'Original string : $' NEWSTR DB 'New string : $' OUT_STR DB 'The string is $' MAXCHR DB 'The maximum is $' IN_NUM DB 'Input the numbers (0 - 255, no more than 20 numbers) : ', 0DH, 0AH, '$' OUT_NUM DB 'Sorted numbers : ', 0DH, 0AH, '$' IN_TIM DB 'Correct the time (HH:MM:SS) : $' HINTSTR DB 'Press ESC, go back to the menu; or press any key to play again!$' KEYBUF DB 61 DB ? DB 61 DUP (?) NUMBUF DB ? DB 20 DUP (?) DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACK START: MOVAX, DATA MOV DS, AX MOVAX, STACK MOV SS, AX MOV SP, OFFSET TOP MAIN: CALL FAR PTR MENU ; 设置显示器 AGAIN: MOVAH, 2 MOV BH, 0 ; 页号 MOV DL, 41 ; 列号 MOV DH, 10 ; 行号 INT 10H ; 光标位置设置 MOVAH, 1 INT 21H CMPAL, '1' JB AGAIN CMPAL, '5' JAAGAIN SUB AL, '1' ; N-1 SHLAL, 1 ; (N-1)*2 CBW ; AL->AX LEA BX, TABLE ADD BX, AX JMPWORD PTR [BX] G1: CALL FAR PTR CHGLTR MOVAH, 8 INT 21H CMPAL, 1BH JZ MAIN JMP G1 G2: CALL FAR PTR MAXLTR MOVAH, 8 INT 21H CMPAL, 1BH JZ MAIN JMP G2 G3: CALL FAR PTR SORTNUM MOVAH, 8 INT 21H CMPAL, 1BH JZ MAIN JMP G3 G4: CALL FAR PTR TIMCHK MOVAH, 8 INT 21H CMPAL, 1BH JZ MAIN JMP G4 G5: MOVAH, 4CH INT 21H MENU PROC FAR ; 显示主界面 ;设置显示器方式 MOVAH, 0 MOVAL, 3; MOV BL, 0; INT 10H ; 清屏 MOVAH, 2 MOV BH, 0 ; 页号 MOV DL, 5 ; 列号 MOV DH, 5 ; 行号 INT 10H ; 光标位置设置 MOVAH, 9 LEA DX, STRING1 INT 21H MOVAH, 2 MOV DL, 5 ; 列号 MOV DH, 6 ; 行号 INT 10H ; 光标位置设置 MOVAH, 9 LEA DX, STRING2 INT 21H MOVAH, 2 MOV DL, 5 ; 列号 MOV DH, 7 ; 行号 INT 10H ; 光标位置设置 MOVAH, 9 LEA DX, STRING3 INT 21H MOVAH, 2 MOV DL, 5 ; 列号 MOV DH, 8 ; 行号 INT 10H ; 光标位置设置 MOVAH, 9 LEA DX, STRING4 INT 21H MOVAH, 2 MOV DL, 5 ; 列号 MOV DH, 9 ; 行号 INT 10H ; 光标位置设置 MOVAH, 9 LEA DX, STRING5 INT 21H MOVAH, 2 MOV DL, 5 ; 列号 MOV DH, 10 ; 行号 INT 10H ; 光标位置设置 MOVAH, 9 LEA DX, STRINGN INT 21H RET MENU ENDP CHGLTR PROC FAR ; 将输入字符串中小写字母便换成大写字母 RECHG: ;设置显示器方式 MOVAH, 0 MOVAL, 3 MOV BL, 0 INT 10H ; 清屏 MOVAH, 2 MOV BH, 0 ; 页号 MOV DL, 5 ; 列号 MOV DH, 5 ; 行号 INT 10H ; 输入提示光标位置设置 MOVAH, 9 LEA DX, IN_STR INT 21H ; 输入字符串提示 MOVAH, 2 MOV DL, 5 ; 列号 MOV DH, 6 ; 行号 INT 10H ; 输入字符串光标位置设置 MOVAH, 0AH LEA DX, KEYBUF INT 21H ; 输入字符串 CMP KEYBUF + 1, 0 JZ RECHG ; 判断输入字符串是否为空串 LEA BX, KEYBUF + 2 MOVAL, KEYBUF + 1 CBW MOV CX, AX ADD BX, AX MOV BYTE PTR [BX], '$' ; 在输入字符串尾加结束标志$ MOVAH, 2 MOV BH, 0 ; 页号 MOV DL, 5 ; 列号 MOV DH, 7 ; 行号 INT 10H ; 源字符串提示光标位置设置 MOVAH, 9 LEA DX, PRESTR INT 21H ; 输出源字符串提示 MOVAH, 9 LEA DX, KEYBUF + 2 INT 21H ; 输出源字符串 LEA BX, KEYBUF + 2 LCHG: CMP BYTE PTR [BX], 61H JB NOCHG AND BYTE PTR [BX], 0DFH NOCHG: INC BX LOOP LCHG ; 将字符串中小写字母转换成大写字母 MOVAH, 2 MOV BH, 0 ; 页号 MOV DL, 5 ; 列号 MOV DH, 8 ; 行号 INT 10H ; 新字符串提示光标位置设置 MOVAH, 9 LEA DX, NEWSTR INT 21H ; 输出新字符串提示 MOVAH, 9 LEA DX, KEYBUF + 2 INT 21H ; 输出新字符串 MOVAH, 2 MOV BH, 0 ; 页号 MOV DL, 5 ; 列号 MOV DH, 9 ; 行号 INT 10H ; 提示信息光标位置设置 MOVAH, 9 LEA DX, HINTSTR INT 21H ; 输出提示信息 RET CHGLTR ENDP MAXLTR PROC FAR ; 在输入字符串中找出最大值 REMAX: ;设置显示器方式 MOVAH, 0 MOVAL, 3 MOV BL, 0 INT 10H ; 清屏 MOVAH, 2 MOV BH, 0 ; 页号 MOV DL, 5 ; 列号 MOV DH, 5 ; 行号 INT 10H ; 输入提示光标位置设置 MOVAH, 9 LEA DX, IN_STR INT 21H ; 输入字符串提示 MOVAH, 2 MOV DL, 5 ; 列号 MOV DH, 6 ; 行号 INT 10H ; 输入字符串光标位置设置 MOVAH, 0AH LEA DX, KEYBUF INT 21H ; 输入字符串 CMP KEYBUF + 1, 0 JZ REMAX ; 判断输入字符串是否为空串 LEA BX, KEYBUF + 2 MOVAL, KEYBUF + 1 CBW MOV CX, AX ADD BX, AX MOV BYTE PTR [BX], '$' ; 在输入字符串位加结束标志$ MOVAH, 2 MOV BH, 0 ; 页号 MOV DL, 5 ; 列号 MOV DH, 7 ; 行号 INT 10H ; 源字符串提示光标位置设置 MOVAH, 9 LEA DX, OUT_STR INT 21H ; 输出字符串提示 MOVAH, 9 LEA DX, KEYBUF + 2 INT 21H ; 输出字符串 MOVAH, 2 MOV BH, 0 ; 页号 MOV DL, 5 ; 列号 MOV DH, 8 ; 行号 INT 10H ; 新字符串提示光标位置设置 MOVAH, 9 LEA DX, MAXCHR INT 21H ; 输出字符串中最大值提示 MOV DL, 0 LEA BX, KEYBUF + 2 LCMP: CMP [BX], DL JB NOLCHG MOV DL, [BX] NOLCHG: INC BX LOOP LCMP ; 找出字符串中最大字符,放入DL MOVAH, 2 INT 21H ; 输出字符串中最大字符 MOVAH, 2 MOV BH, 0 ; 页号 MOV DL, 5 ; 列号 MOV DH, 9 ; 行号 INT 10H ; 提示信息光标位置设置 MOVAH, 9 LEA DX, HINTSTR INT 21H ; 输出提示信息 RET MAXLTR ENDP SORTNUM PROC FAR ; 对输入数据组排序 RESORT: ;设置显示器方式 MOVAH, 0 MOVAL, 3 MOV BL, 0 INT 10H ; 清屏 MOVAH, 2 MOV BH, 0 ; 页号 MOV DL, 5 ; 列号 MOV DH, 5 ; 行号 INT 10H ; 输入提示光标位置设置 MOVAH, 9 LEA DX, IN_NUM INT 21H MOVAH, 2 MOV DL, 5 ; 列号 MOV DH, 6 ; 行号 INT 10H ; 输入数据组光标位置设置 MOVAH, 0AH LEA DX, KEYBUF INT 21H ; 输入数据组字符串 CALL CIN_INT ; 字符串转换成数据串 CMPAL, 0 JZ RESORT ; 判断数据串是否有错 CMP NUMBUF, 0 JZ RESORT ; 判断数据串是否为空 MOVAH, 2 MOV BH, 0 ; 页号 MOV DL, 5 ; 列号 MOV DH, 7 ; 行号 INT 10H ; 输出提示光标位置设置 MOVAH, 9 LEA DX, OUT_NUM INT 21H ; 输出数据串提示 MOVAH, 2 MOV BH, 0 ; 页号 MOV DL, 5 ; 列号 MOV DH, 8 ; 行号 INT 10H ; 输出数据组光标位置设置 CALL FAR PTR MPSORT ; 数据组排序 CALL FAR PTR INT_OUT ; 数据组的输出 MOVAH, 2 MOV BH, 0 ; 页号 MOV DL, 5 ; 列号 MOV DH, 9 ; 行号 INT 10H ; 提示信息光标位置设置 MOVAH, 9 LEA DX, HINTSTR INT 21H ; 输出提示信息 RET SORTNUM ENDP CIN_INTPROC NEAR ; 读入整型数 ; 入口参数:无 ; 出口参数为:AL(有无错误标志,0为有,1为无) MOV CL, KEYBUF + 1 LEA SI, KEYBUF + 2 MOV CH, 0 ; 数据组数据个数置0 MOV DH, 10 MOVAL, 0 ; 当前数据x=0 MOV DL, 0 ; 有无数据标志置0,即无数据 FNDNUM: CMP BYTE PTR [SI], ' ' JZ ADDNUM ; 判断当前字符是否为空格 CMP BYTE PTR [SI], '0' JB ERRNUM CMP BYTE PTR [SI], '9' JA ERRNUM ; 判断当前字符是否在'0'-'9'之间 MOV DL, 1 ; 有无数据标志置1,即有数据 MULDH XOR BH, BH MOV BL, [SI] ADD AX, BX SUB AX, '0' ; 计算出当前数据x CMPAH, 0 JA ERRNUM ; 判断x 是否越界 JMP NEXT ADDNUM: CMP DL, 1 JNZ NEXT ; 判断是否有数据 INC CH ; 数据组数据个数加1 CALLADDNEW MOV DL, 0 MOVAL, 0 ; 清零 NEXT: INC SI DEC CL CMP CL, 0 JNZ FNDNUM ; 依次检查各字符 CMP DL, 1 JNZ TOTAL ; 判断是否有未加入的数据 INC CH CALLADDNEW TOTAL: MOV NUMBUF, CH ; 置数据组数据个数 MOVAL, 1 ; 输入数据无错误 JMP CRTNUM ERRNUM: MOVAL, 0 ; 输入数据有错误 CRTNUM: RET CIN_INT ENDP ADDNEW PROC NEAR ; 增加新数 ; 入口参数:CH(数据组数据个数)、AL(当前数据x) ; 出口参数:无 PUSH AX LEA BX, NUMBUF MOVAL, CH CBW ADD BX, AX POPAX MOV [BX], AL RET ADDNEW ENDP MPSORT PROC FAR ; 数据组排序 MOVAL, NUMBUF CMPAL, 1 JBE NOSORT ; 若只有一个元素,停止排序 CBW MOV CX, AX LEA SI, NUMBUF ; SI指向数据组首地址 ADD SI, CX ; SI指向数据组末地址 DEC CX ; 外循环次数 LP1: ; 外循环开始 PUSH CX PUSH SI MOV DL, 0 ; 交换标志置0 LP2: ; 内循环开始 MOVAL, [SI] CMPAL, [SI - 1] JAE NOXCHG XCHG AL, [SI - 1] ; 交换操作 MOV [SI], AL MOV DL, 1 ; 交换标志置1 NOXCHG: DEC SI LOOP LP2 POP SI POP CX CMP DL, 1 JNZ NOSORT ; 判断交换标志 LOOP LP1 NOSORT:RET MPSORTENDP INT_OUT PROC FAR ; 输出数据组 MOVAL, NUMBUF CBW MOV CX, AX MOV BL, 10H LEA SI, NUMBUF + 1 PRINT: MOVAL, [SI] CALL OUTNUM INC SI MOVAH, 2 MOV DL, ' ' INT 21H LOOP PRINT RET INT_OUT ENDP OUTNUM PROC NEAR ; 将十进制数以十六进制输出 ; 入口参数:AL(待转换的数据),BL(转换进制数16) ; 出口参数:无 MOVAH, 0 DIV BL PUSH AX CMPAH, 10 JB PNUM ADD AH, 7 PNUM: ADD AH, 30H MOV DL, AH POPAX PUSH DX CMPAL, 0 JZ OUTN CALL OUTNUM OUTN: POPDX MOVAH, 2 INT 21H RET OUTNUM ENDP TIMCHK PROC FAR ; 设定并显示时间 ;设置显示器方式 MOVAH, 0 MOVAL, 3; MOV BL, 0; INT 10H ; 清屏 MOVAH, 2 MOV BH, 0 ; 页号 MOV DL, 5 ; 列号 MOV DH, 6 ; 行号 INT 10H ; 设置提示光标位置设置 MOVAH, 9 LEA DX, IN_TIM INT 21H ; 时间串提示 MOVAH, 0AH LEA DX, KEYBUF INT 21H ; 输入时间串 MOV BL, 10 MOVAL, KEYBUF + 2 SUB AL, '0' MUL BL ADD AL, KEYBUF + 3 SUB AL, '0' CMPAL, 0 JB INVALID CMPAL, 24 JAE INVALID ; 判断时 有效性 MOV CH, AL MOVAL, KEYBUF + 5 SUB AL, '0' MUL BL ADD AL, KEYBUF + 6 SUB AL, '0' CMPAL, 0 JB INVALID CMPAL, 60 JAE INVALID ; 判断分 有效性 MOV CL, AL MOVAL, KEYBUF + 8 SUB AL, '0' MUL BL ADD AL, KEYBUF + 9 SUB AL, '0' CMPAL, 0 JB INVALID CMPAL, 60 JAE INVALID ; 判断秒 有效性 MOV DH, AL MOV DL, 0 MOVAH, 2DH INT 21H ; 置系统时间 INVALID: CALL TIME RET TIMCHK ENDP TIME PROC ; 显示时间子程序 ;设置显示器方式 MOVAH, 0 MOVAL, 3; MOV BL, 0; INT 10H ; 清屏 MOVAH, 2 MOV BH, 0 ; 页号 MOV DL, 10 ; 列号 MOV DH, 9 ; 行号 INT 10H ; 提示信息光标位置设置 MOVAH, 9 LEA DX, HINTSTR INT 21H ; 输出提示信息 DISP1: MOVAH, 2 MOV BH, 0 ; 页号 MOV DL, 72 ; 列号 MOV DH, 0 ; 行号 INT 10H ; 提示光标位置设置 MOVAH, 2CH ; 取系统时间,CH,CL,DH 分别存放时/分/秒 INT 21H MOVAL, CH ; 显示时 CALL SHOWNUM MOVAH, 2 MOV DL, ':' INT 21H MOVAL, CL ; 显示分 CALL SHOWNUM MOVAH, 2 MOV DL, ':' INT 21H MOVAL, DH ; 显示: 秒 CALL SHOWNUM MOVAH,02H ; 设置光标位置 MOV DX,090AH MOV BH,0 INT 10H MOV BX,0018H RE: MOV CX,0FFFFH ; 延时 REA: LOOP REA DEC BX JNZ RE MOVAH, 0BH ; 或MOVAH, 01H INT 21H ; INT 16H CMPAL, 0 ; JE DISP1 JZ DISP1 ; 检查键盘状态 RET TIME ENDP SHOWNUM PROC ; 把AL中的数字以十进制输出 ; 入口参数:AL(待显示的数据) ; 出口参数:无 CBW PUSH CX PUSH DX MOV CL, 10 DIV CL ADD AH, '0' MOV BH, AH ADD AL, '0' MOVAH, 2 MOV DL, AL INT 21H MOV DL, BH INT 21H POPDX POP CX RET SHOWNUM ENDP CODE ENDS END START 五、实验结果 运行程序。 主菜单界面,如图5-1。 图5-1 主菜单界面展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




微机原理课后第39题.doc



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/9432097.html