ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:319.92KB ,
资源ID:7748787      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7748787.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(西电微机原理上机.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

西电微机原理上机.docx

1、西电微机原理上机17.设有n(设为17)个人围坐在圆桌周围,按顺时针给他们编号(1、2、3,n),从第一个人开始按顺时针方向加1报数,当报到m(设为11)时,该人出列,余下的人继续进行,直到所有人出列为止。编写程序模拟这一过程,求出出列人编号顺序。M=11N=17DATASEGMENTCOUNTDBNDUP(1) ;标记数组DATAENDSSTACKSEGMENTSTACKSTACKDW100HDUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVCX,0 L1: MOVBX,0 ;

2、BX存放此轮已遍历人数的编号L2:CMPBX,N ;到N=17人则从头开始JEL1ADDCL,COUNTBX ;CL存放此轮已报数人数 CMPCL,M ;报数人数达到M=11个则跳转L3JEL3INCBX ;人数未达到则继续向下遍历JMPL2L3:MOVCL,0MOVCOUNTBX,0 ;出列人所对应数组单元置0MOVDX,BXINCDXADDDL,40HMOVAH,02HINT21H ;以英文大写字母形式输出出列人编号INCCH ;CH存放已出列人个数CMPCH,NJBL2 ;CHN=17则跳转至L2继续报数JEEXIT ;否则结束报数,退出程序EXIT:MOVAH,4CHINT21HCOD

3、EENDSENDSTART 4.39 (上机题)编写程序实现下列5项功能,通过从键盘输入15进行菜单式选择: (1)按数字键“1”,完成将字符串中的小写字母变换成大写字母。用户输入由英文大小写字母或数字09组成的字符串(以回车结束),变换后按下列格式在屏幕上显示: 例如:abcdgyt0092 ABCDGYT0092 按任一键重做;按Esc键返回主菜单。 (2)按数字键“2”,完成在字符串中找最大值。用户输入由英文大小写字母或数字 09组成的字符串(以回车结束),找出最大值后按下列格式在屏幕上显示: The maximum is 按任一键重做;按Esc键返回主菜单。(3)按数字键“3”,完成输

4、入数据组的排序。用户输入一组十进制数值(小于255), 然后变换成十六进制数,并按递增方式进行排序,按下列格式在屏幕上显示: 按任一键重做;按Esc键返回主菜单。(4)按数字键“4”,完成时间的显示。首先提示用户对时,即改变系统的定时器 HH:MM:SS(以冒号间隔,回车结束),然后在屏幕的右上角实时显示出时 间:HH:MM:SS。 按任一键重新对时;按Esc键返回主菜单。(5)按数字键“5”,结束程序的运行,返回操作系统。 程序流程图: 主函数: 功能1:功能2: 功能3: 功能4:调试问题、心得体会:此程序共5个功能,采用跳转表法来实现多路分支结构程序设计。现将这5个程序段,各程序段的首地

5、址分别标号。将5个程序段的入口地址做成表TABLE放入数据段,程序根据给定的参数计算出欲转入的程序段的首地址在TABLE中的位置后,取出该地址,跳转至该程序段。然后执行该程序段功能。执行完后根据选择决定是重复执行改程序还是跳出选择其他程序执行。问题1:未在输入字符串末尾加上$,导致出错,将后续存储区域的混乱字符全部显示出来!修改:MOV BYTE PTR BX, $ ; 在输入字符串尾加结束标志$问题2:排序子函数出现问题各数值只转化为16进制,并未排序,调用过程出现问题!问题3:实现显示位置不对,未设置显示位置坐标!改正后得到正确结果!运行结果:主函数:功能1:功能2:功能3:功能4:功能5

6、:程序代码 :STACK SEGMENT STACK DB 256 DUP(?)TOP LABEL WORDSTACK ENDSDATA SEGMENTTABLE DW L1, L2, L3, L4, L5STRING1 DB 1. Change string;, 0DH, 0AH, $STRING2 DB 2. Find the maximum ;, 0DH, 0AH, $STRING3 DB 3. Rank;, 0DH, 0AH, $STRING4 DB 4. Time;, 0DH, 0AH, $STRING5 DB 5. Exit., 0DH, 0AH, $STRINGN DB Inpu

7、t the number 1-5 : $STRBUF DB Input the string:, 0DH, 0AH, $MAXCHR DB The maximum is $NUMBER DB Input the numbers: , 0DH, 0AH, $TIMES DB Correct the time (HH:MM:SS) : $STRBUF2 DB Press ESC to exit; or press any key to continue$KEYBUF DB 61 DB ? DB 61 DUP (?)NUMBUF DB ? DB 20 DUP (?)DATA ENDSCODE SEG

8、MENT ASSUME CS:CODE, DS:DATA, SS:STACKSTART: MOV AX, DATA MOV DS, AX MOV AX, STACK MOV SS, AX LEA SP, TOPMAIN: CALL FAR PTR MENU AGAIN: MOV AH, 2 MOV BH, 0 MOV DL, 41 MOV DH, 10 INT 10H MOV AH, 1 INT 21H CMP AL, 1 JB AGAIN CMP AL, 5 JA AGAIN SUB AL, 1 SHL AL, 1 CBW LEA BX, TABLE ADD BX, AX JMP WORD

9、PTR BXL1: CALL FAR PTR CHGLTR MOV AH, 8 INT 21H CMP AL, 1BH JZ MAIN JMP L1L2: CALL FAR PTR MAXLTR MOV AH, 8 INT 21H CMP AL, 1BH JZ MAIN JMP L2L3: CALL FAR PTR SORTNUM MOV AH, 8 INT 21H CMP AL, 1BH JZ MAIN JMP L3L4: CALL FAR PTR TIMCHK MOV AH, 8 INT 21H CMP AL, 1BH JZ MAIN JMP L4L5: MOV AH, 4CH INT 2

10、1HMENU PROC FAR ;设置显示器方式 MOV AH, 0 MOV AL, 3; MOV BL, 0; INT 10H MOV AH, 2 MOV BH, 0 MOV DL, 5 MOV DH, 5 INT 10H MOV AH, 9 LEA DX, STRING1 INT 21H MOV AH, 2 MOV DL, 5 MOV DH, 6 INT 10H MOV AH, 9 LEA DX, STRING2 INT 21H MOV AH, 2 MOV DL, 5 MOV DH, 7 INT 10H MOV AH, 9 LEA DX, STRING3 INT 21H MOV AH, 2

11、 MOV DL, 5 MOV DH, 8 INT 10H MOV AH, 9 LEA DX, STRING4 INT 21H MOV AH, 2 MOV DL, 5 MOV DH, 9 INT 10H MOV AH, 9 LEA DX, STRING5 INT 21H MOV AH, 2 MOV DL, 5 MOV DH, 10 INT 10H MOV AH, 9 LEA DX, STRINGN INT 21H RETMENU ENDPCHGLTR PROC FAR RECHG: MOV AH, 0 MOV AL, 3 MOV BL, 0 INT 10H MOV AH, 2 MOV BH, 0

12、 MOV DL, 5 MOV DH, 5 INT 10H MOV AH, 9 LEA DX, STRBUF INT 21H ; 输入字符串提示 MOV AH, 2 MOV DL, 5 MOV DH, 6 INT 10H MOV AH, 0AH LEA DX, KEYBUF INT 21H ; 输入字符串 CMP KEYBUF + 1, 0 JZ RECHG ; 判断输入字符串是否为空串 LEA BX, KEYBUF + 2 MOV AL, KEYBUF + 1 CBW MOV CX, AX ADD BX, AX MOV BYTE PTR BX, $ ; 在输入字符串尾加结束标志$ MOV AH

13、, 2 MOV BH, 0 MOV DL, 5 MOV DH, 7 INT 10H LEA BX, KEYBUF + 2LCHG: CMP BYTE PTR BX, 61H JB NOCHG AND BYTE PTR BX, 0DFHNOCHG: INC BX LOOP LCHG ; 将字符串中小写字母转换成大写字母 MOV AH, 9 LEA DX, KEYBUF + 2 INT 21H ; 输出新字符串 MOV AH, 2 MOV BH, 0 MOV DL, 5 MOV DH, 9 INT 10H MOV AH, 9 LEA DX, STRBUF2 INT 21H ; 输出提示信息 RET

14、CHGLTR ENDPMAXLTR PROC FAR ; 在输入字符串中找出最大值REMAX: ;设置显示器方式 MOV AH, 0 MOV AL, 3 MOV BL, 0 INT 10H MOV AH, 2 MOV BH, 0 MOV DL, 5 MOV DH, 5 INT 10H MOV AH, 9 LEA DX, STRBUF INT 21H ; 输入字符串提示 MOV AH, 2 MOV DL, 5 MOV DH, 6 INT 10H MOV AH, 0AH LEA DX, KEYBUF INT 21H ; 输入字符串 CMP KEYBUF + 1, 0 JZ REMAX ; 判断输入

15、字符串是否为空串 LEA BX, KEYBUF + 2 MOV AL, KEYBUF + 1 CBW MOV CX, AX ADD BX, AX MOV BYTE PTR BX, $ ; 在输入字符串位加结束标志$ MOV AH, 2 MOV BH, 0 MOV DL, 5 MOV DH, 7 INT 10H MOV AH, 2 MOV BH, 0 MOV DL, 5 MOV DH, 8 INT 10H MOV AH, 9 LEA DX, MAXCHR INT 21H ; 输出字符串中最大值提示 MOV DL, 0 LEA BX, KEYBUF + 2LCMP: CMP BX, DL JB N

16、OLCHG MOV DL, BXNOLCHG: INC BX LOOP LCMP ; 找出字符串中最大字符,放入DL MOV AH, 2 INT 21H ; 输出字符串中最大字符 MOV AH, 2 MOV BH, 0 MOV DL, 5 MOV DH, 9 INT 10H MOV AH, 9 LEA DX, STRBUF2 INT 21H ; 输出提示信息 RETMAXLTR ENDPSORTNUM PROC FAR ; 对输入数据组排序RESORT: ;设置显示器方式 MOV AH, 0 MOV AL, 3 MOV BL, 0 INT 10H MOV AH, 2 MOV BH, 0 MOV

17、 DL, 5 MOV DH, 5 INT 10H MOV AH, 9 LEA DX, NUMBER INT 21H MOV AH, 2 MOV DL, 5 MOV DH, 6 INT 10H MOV AH, 0AH LEA DX, KEYBUF INT 21H ; 输入数据组字符串 CALL CIN_INT ; 字符串转换成数据串 CMP AL, 0 JZ RESORT ; 判断数据串是否有错 CMP NUMBUF, 0 JZ RESORT ; 判断数据串是否为空 MOV AH, 2 MOV BH, 0 MOV DL, 5 MOV DH, 8 INT 10H CALL FAR PTR MPSO

18、RT ; 数据组排序 CALL FAR PTR INT_OUT ; 数据组的输出 MOV AH, 2 MOV BH, 0 MOV DL, 5 MOV DH, 9 INT 10H MOV AH, 9 LEA DX, STRBUF2 INT 21H ; 输出提示信息 RETSORTNUM ENDPCIN_INT PROC NEAR ; 读入整型数 MOV CL, KEYBUF + 1 LEA SI, KEYBUF + 2 MOV CH, 0 ; 数据组数据个数置0 MOV DH, 10 MOV AL, 0 ; 当前数据x=0 MOV DL, 0 ; 有无数据标志置0,即无数据FNDNUM: CMP

19、 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,即有数据 MUL DH XOR BH, BH MOV BL, SI ADD AX, BX SUB AX, 0 ; 计算出当前数据x CMP AH, 0 JA ERRNUM ; 判断x是否越界 JMP NEXTADDNUM: CMP DL, 1 JNZ NEXT ; 判断是否有数据 INC CH ; 数据组数据个数加1 CALL A

20、DDNEW MOV DL, 0 MOV AL, 0 ; 清零NEXT: INC SI DEC CL CMP CL, 0 JNZ FNDNUM ; 依次检查各字符 CMP DL, 1 JNZ TOTAL ; 判断是否有未加入的数据 INC CH CALL ADDNEWTOTAL: MOV NUMBUF, CH ; 置数据组数据个数 MOV AL, 1 ; 输入数据无错误 JMP CRTNUMERRNUM: MOV AL, 0 ; 输入数据有错误CRTNUM: RET CIN_INT ENDPADDNEW PROC NEAR ; 增加新数 PUSH AX LEA BX, NUMBUF MOV AL

21、, CH CBW ADD BX, AX POP AX MOV BX, AL RETADDNEW ENDPMPSORT PROC FAR ; 数据组排序 MOV AL, NUMBUF CMP AL, 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 ; 交换标志置0LP2: ; 内循环开始 MOV AL, SI CMP AL, SI - 1 JAE NO

22、XCHG XCHG AL, SI - 1 ; 交换操作 MOV SI, AL MOV DL, 1 ; 交换标志置1NOXCHG: DEC SI LOOP LP2 POP SI POP CX CMP DL, 1 JNZ NOSORT ; 判断交换标志 LOOP LP1NOSORT:RETMPSORT ENDPINT_OUT PROC FAR ; 输出数据组 MOV AL, NUMBUF CBW MOV CX, AX MOV BL, 10H LEA SI, NUMBUF + 1PRINT: MOV AL, SI CALL OUTNUM INC SI MOV AH, 2 MOV DL, INT 21

23、H LOOP PRINT RETINT_OUT ENDPOUTNUM PROC NEAR ; 将十进制数以十六进制输出 MOV AH, 0 DIV BL PUSH AX CMP AH, 10 JB PNUM ADD AH, 7PNUM: ADD AH, 30H MOV DL, AH POP AX PUSH DX CMP AL, 0 JZ OUTN CALL OUTNUMOUTN: POP DX MOV AH, 2 INT 21H RETOUTNUM ENDPTIMCHK PROC FAR ; 设定并显示时间 ;设置显示器方式 MOV AH, 0 MOV AL, 3; MOV BL, 0; IN

24、T 10H MOV AH, 2 MOV BH, 0 MOV DL, 5 MOV DH, 6 INT 10H MOV AH, 9 LEA DX, TIMES INT 21H ; 时间串提示 MOV AH, 0AH LEA DX, KEYBUF INT 21H ; 输入时间串 MOV BL, 10 MOV AL, KEYBUF + 2 SUB AL, 0 MUL BL ADD AL, KEYBUF + 3 SUB AL, 0 CMP AL, 0 JB INVALID CMP AL, 24 JAE INVALID ; 判断 时 有效性 MOV CH, AL MOV AL, KEYBUF + 5 SU

25、B AL, 0 MUL BL ADD AL, KEYBUF + 6 SUB AL, 0 CMP AL, 0 JB INVALID CMP AL, 60 JAE INVALID ; 判断 分 有效性 MOV CL, AL MOV AL, KEYBUF + 8 SUB AL, 0 MUL BL ADD AL, KEYBUF + 9 SUB AL, 0 CMP AL, 0 JB INVALID CMP AL, 60 JAE INVALID ; 判断 秒 有效性 MOV DH, AL MOV DL, 0 MOV AH, 2DH INT 21H ; 置系统时间INVALID: CALL TIME RETTIMCHK ENDPTIME PROC ; 显示时间子程序 ;设置显示器方式 MOV AH, 0 MOV AL, 3; MOV BL, 0;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1