西电微机原理上机_第1页
西电微机原理上机_第2页
西电微机原理上机_第3页
西电微机原理上机_第4页
西电微机原理上机_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上精选优质文档-倾情为你奉上专心-专注-专业专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业4.37 (上机题)编写程序实现,将缓冲区BUFFER中的100个字按递增排序,并按下列格式顺序显示: 数据1 数据2 算法流程图:调试问题、心得体会:通过这道题,熟悉了流程图画法,掌握了产生随机数,“冒泡法”排序,子函数编写调用等的基本过程,尤其对于中断调用,并利用ASCII码回显和对课本字节型数据“冒泡法”排序改进为字形排序的过程,是我受益匪浅。并且亲身实践了源程序的汇编、调试也连接。问题:将字节型冒泡法直接应用于该题,导致出错,该题存储的是字型数据!原因在于只是排

2、列的AL中的数值,并不是产生的随机数!同时对于字型与字节型在运算类指令中的应用还是有误,以及其他的一些小错误,应加以改善!运行结果:程序代码:STACK SEGMENT STACK STACK DW 100H DUP(?)TOP LABEL WORDSTACK ENDSDATA SEGMENTBUFFER LABEL WORD X=17 REPT 100 X=(X+80)mod 43 DW X ENDMBUF DW 100 DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATA

3、MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX LEA SP,TOP MOV CX,100 LEA SI,BUFFER LEA DI,BUFL1: MOV AX,SI INC SI INC SI MOV DI,AX INC DI INC DI LOOP L1 MOV CX,100 DEC CX LEA SI,BUFFER PUSH CX ADD CX,CX ADD SI,CX POP CXL2: PUSH CX PUSH SIL3: MOV AX,SI CMP AX,SI-2 JAE NOXCHG XCHG AX,SI-2 MOV SI,AXNOXCHG:

4、 SUB SI,2 LOOP L3 POP SI POP CX LOOP L2 MOV CX,100 LEA SI,BUFFERL4: MOV AX,SI CALL DISPAX ADD SI,2 CALL XIAOYU CALL XUHAO CALL DAYU CALL DISPCR LOOP L4 MOV AH,4CH MOV AL,0 INT 21HDISPAX PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI MOV BX,10 MOV CX,3L7: XOR DX,DX DIV BX MOV DI,DX INC DI INC DI L

5、OOP L7 MOV CX,3L8: DEC DI DEC DI MOV AL,DI ADD AL,30H MOV AH,02 MOV DL,AL INT 21H LOOP L8 POP DI POP DX POP CX POP BX POP AX RETDISPAX ENDPDISPCR PROC NEAR PUSH AX PUSH DX MOV AH,2 MOV DL,0AH INT 21H MOV AH,2 MOV DL,0DH INT 21H POP DX POP AX RETDISPCR ENDPXIAOYU PROC NEAR PUSH AX PUSH DX MOV AH,02 M

6、OV DL,3CH INT 21H POP DX POP AX RETXIAOYU ENDPXUHAO PROC NEAR PUSH AX PUSH BX PUSH CX PUSH SI MOV CX,100 MOV BX,AX LEA SI,BUFL5: CMP BX,SI JZ L6 ADD SI,2 LOOP L5L6: MOV AX,101 SUB AX,CX CALL DISPAX POP SI POP CX POP BX POP AX RET XUHAO ENDPDAYU PROC NEAR PUSH AX PUSH DX MOV AH,02 MOV DL,3EH INT 21H

7、POP DX POP AX RETDAYU ENDPCODE ENDS END START4.38 (上机题)按同余法产生一组随机数N(1N=50),并按N50赋给45名同学的5门课程的成绩,要求编程实现计算每个同学的平均成绩,并根据平均成绩统计全班的成绩各等级的人数(A:90100,B:8089,C:7079,D:6669,E:6065,F:60分以下),按下列格式显示: Total A: B: C: D: E: F: 算法流程图 :调试问题、心得体会:通过该问题,进一步练习了通过流程图分析设计程序的功能,掌握了随机数产生,子函数调用,分支程序,循环程序,中断调用等过程,进行了调试,找出了数

8、值无法转化为十进制并显示的问题,原因在于未定义临时存储单元。最后进行了汇编,链接等,得到了最终结果。问题1:NUMEER(用来存储各等级人数)存储单元清零后,忘记让DI再次指向其首地址,也就是各成绩等级的人数并未存入NUMBER,因此显示的都是0改正后得到正确结果!问题2:直接照搬课本数值转换子程序,未定义临时存储单元DECIMAL,导致编译出错,出现语法错误!改正后得到正确结果!运行结果:程序代码:STACK SEGMENT STACK STACK DW 100H DUP(?)TOP LABEL WORDSTACK ENDSDATA SEGMENTBUFFER LABEL BYTE X=17

9、 REPT 225 X=(X+97)mod 50 DB X ENDMBUF DB 45 DUP(?)NUMBER DW 6 DUP(?)TOTAL DB 54H,6FH,74H,61H,6CHLETTER DB 41H,42H,43H,44H,45H,46HDECIMAL DB 5 DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX LEA SP,TOP LEA SI,BUFFER LEA

10、DI,BUF MOV CX,45L1: PUSH CX MOV CX,5 XOR AX,AXL2: MOV BL,SI MOV BH,0 ADD AX,BX ADD AX,50 INC SI LOOP L2 POP CX MOV BL,5 DIV BL MOV DI,AL INC DI LOOP L1 LEA SI,BUF LEA DI,NUMBER MOV CX,6 MOV AX,0L3: MOV DI,AX INC DI INC DI LOOP L3 MOV CX,45 MOV BX,1 LEA DI,NUMBERL4: MOV AL,SI CMP AL,90 JAE LA CMP AL,

11、80 JAE LB CMP AL,70 JAE LC CMP AL,66 JAE LD CMP AL,60 JAE LM ADD DI+10,BX JMP L5LA: ADD DI,BX JMP L5LB: ADD DI+2,BX JMP L5LC: ADD DI+4,BX JMP L5LD: ADD DI+6,BX JMP L5LM: ADD DI+8,BXL5: INC SI LOOP L4 LEA SI,TOTAL MOV CX,5L6: MOV AH,02 MOV DL,SI INT 21H INC SI LOOP L6 CALL KONGGE CALL XIAOYU MOV AX,4

12、5 CALL DISPAX CALL DAYU CALL DISPCR MOV CX,6 LEA SI,LETTER LEA DI,NUMBERL7: MOV AH,02 MOV DL,SI INT 21H INC SI MOV AH,02 MOV DL,3AH INT 21H CALL KONGGE CALL XIAOYU MOV AX,DI CALL DISPAX INC DI INC DI CALL DAYU CALL DISPCR LOOP L7 MOV AH,4CH MOV AL,0 INT 21HKONGGE PROC NEAR PUSH AX PUSH DX MOV AH,02

13、MOV DL,20H INT 21H POP DX POP AX RETKONGGE ENDPDISPCR PROC NEAR PUSH AX PUSH DX MOV AH,2 MOV DL,0AH INT 21H MOV AH,2 MOV DL,0DH INT 21H POP DX POP AX RETDISPCR ENDPXIAOYU PROC NEAR PUSH AX PUSH DX MOV AH,02 MOV DL,3CH INT 21H POP DX POP AX RETXIAOYU ENDPDAYU PROC NEAR PUSH AX PUSH DX MOV AH,02 MOV D

14、L,3EH INT 21H POP DX POP AX RETDAYU ENDPDISPAX PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI LEA DI,DECIMAL CALL TRANS16TO10 MOV CX,5 LEA DI,DECIMAL+4 MOV AH,2DISPAX2: MOV DL,DI ADD DL,30H DEC DI INT 21H LOOP DISPAX2 POP DI POP DX POP CX POP BX POP AX RETDISPAX ENDPTRANS16TO10 PROC NEAR PUSH AX

15、PUSH BX PUSH CX PUSH DX PUSH DI MOV BX,10 MOV CX,5TRANS1: XOR DX,DX DIV BX MOV DI,DL INC DI LOOP TRANS1 POP DI POP DX POP CX POP BX POP AX RETTRANS16TO10 ENDPCODE ENDS END START4.39 (上机题)编写程序实现下列5项功能,通过从键盘输入15进行菜单式选择: (1)按数字键“1”,完成将字符串中的小写字母变换成大写字母。用户输入由英文大小写字母或数字09组成的字符串(以回车结束),变换后按下列格式在屏幕上显示: 例如:a

16、bcdgyt0092 ABCDGYT0092 按任一键重做;按Esc键返回主菜单。 (2)按数字键“2”,完成在字符串中找最大值。用户输入由英文大小写字母或数字 09组成的字符串(以回车结束),找出最大值后按下列格式在屏幕上显示: The maximum is 按任一键重做;按Esc键返回主菜单。(3)按数字键“3”,完成输入数据组的排序。用户输入一组十进制数值(小于255), 然后变换成十六进制数,并按递增方式进行排序,按下列格式在屏幕上显示: 按任一键重做;按Esc键返回主菜单。(4)按数字键“4”,完成时间的显示。首先提示用户对时,即改变系统的定时器 HH:MM:SS(以冒号间隔,回车结

17、束),然后在屏幕的右上角实时显示出时 间:HH:MM:SS。 按任一键重新对时;按Esc键返回主菜单。(5)按数字键“5”,结束程序的运行,返回操作系统。 程序流程图: 主函数: 功能1:功能2: 功能3: 功能4:调试问题、心得体会:此程序共5个功能,采用跳转表法来实现多路分支结构程序设计。现将这5个程序段,各程序段的首地址分别标号。将5个程序段的入口地址做成表TABLE放入数据段,程序根据给定的参数计算出欲转入的程序段的首地址在TABLE中的位置后,取出该地址,跳转至该程序段。然后执行该程序段功能。执行完后根据选择决定是重复执行改程序还是跳出选择其他程序执行。问题1:未在输入字符串末尾加上

18、$,导致出错,将后续存储区域的混乱字符全部显示出来!修改:MOV BYTE PTR BX, $ ; 在输入字符串尾加结束标志$问题2:排序子函数出现问题各数值只转化为16进制,并未排序,调用过程出现问题!问题3:实现显示位置不对,未设置显示位置坐标!改正后得到正确结果!运行结果:主函数:功能1:功能2:功能3:功能4:功能5:程序代码 :STACKSEGMENT STACKDB 256 DUP(?)TOPLABEL WORDSTACKENDSDATASEGMENTTABLEDW L1, L2, L3, L4, L5STRING1DB 1. Change string;, 0DH, 0AH, $

19、STRING2DB 2. Find the maximum ;, 0DH, 0AH, $STRING3DB 3. Rank;, 0DH, 0AH, $STRING4DB 4. Time;, 0DH, 0AH, $STRING5DB 5. Exit., 0DH, 0AH, $STRINGNDB Input the number 1-5 : $STRBUFDB Input the string:, 0DH, 0AH, $MAXCHRDB The maximum is $NUMBERDB Input the numbers: , 0DH, 0AH, $TIMESDB Correct the time

20、 (HH:MM:SS) : $STRBUF2DB Press ESC to exit; or press any key to continue$KEYBUFDB 61DB ?DB 61 DUP (?)NUMBUFDB ?DB 20 DUP (?)DATAENDSCODESEGMENTASSUME CS:CODE, DS:DATA, SS:STACKSTART:MOV AX, DATAMOV DS, AXMOV AX, STACKMOV SS, AXLEA SP, TOPMAIN:CALL FAR PTR MENUAGAIN:MOV AH, 2MOV BH, 0MOV DL, 41MOV DH

21、, 10INT 10HMOV AH, 1INT 21HCMP AL, 1JB AGAINCMP AL, 5JA AGAINSUB AL, 1SHL AL, 1CBWLEA BX, TABLEADD BX, AXJMP WORD PTR BXL1:CALL FAR PTR CHGLTRMOV AH, 8INT 21HCMP AL, 1BHJZ MAINJMP L1L2:CALL FAR PTR MAXLTRMOV AH, 8INT 21HCMP AL, 1BHJZ MAINJMP L2L3:CALL FAR PTR SORTNUMMOV AH, 8INT 21HCMP AL, 1BHJZ MAI

22、NJMP L3L4:CALL FAR PTR TIMCHKMOV AH, 8INT 21HCMP AL, 1BH JZ MAINJMP L4L5:MOV AH, 4CHINT 21HMENUPROC FAR;设置显示器方式MOV AH, 0MOV AL, 3;MOV BL, 0;INT 10HMOV AH, 2MOV BH, 0MOV DL, 5MOV DH, 5INT 10HMOV AH, 9LEA DX, STRING1INT 21HMOV AH, 2MOV DL, 5MOV DH, 6INT 10HMOV AH, 9LEA DX, STRING2INT 21HMOV AH, 2MOV D

23、L, 5MOV DH, 7INT 10HMOV AH, 9LEA DX, STRING3INT 21HMOV AH, 2MOV DL, 5MOV DH, 8INT 10HMOV AH, 9LEA DX, STRING4INT 21HMOV AH, 2MOV DL, 5MOV DH, 9INT 10HMOV AH, 9LEA DX, STRING5INT 21HMOV AH, 2MOV DL, 5MOV DH, 10INT 10HMOV AH, 9LEA DX, STRINGNINT 21HRETMENUENDPCHGLTRPROC FARRECHG: MOV AH, 0MOV AL, 3MOV

24、 BL, 0INT 10HMOV AH, 2MOV BH, 0MOV DL, 5MOV DH, 5INT 10HMOV AH, 9LEA DX, STRBUFINT 21H; 输入字符串提示MOV AH, 2MOV DL, 5MOV DH, 6INT 10HMOV AH, 0AHLEA DX, KEYBUFINT 21H; 输入字符串CMP KEYBUF + 1, 0JZ RECHG ; 判断输入字符串是否为空串LEA BX, KEYBUF + 2MOV AL, KEYBUF + 1CBWMOV CX, AXADD BX, AXMOV BYTE PTR BX, $ ; 在输入字符串尾加结束标志

25、$MOV AH, 2MOV BH, 0MOV DL, 5MOV DH, 7INT 10HLEA BX, KEYBUF + 2LCHG:CMP BYTE PTR BX, 61HJB NOCHGAND BYTE PTR BX, 0DFHNOCHG:INC BXLOOP LCHG; 将字符串中小写字母转换成大写字母MOV AH, 9LEA DX, KEYBUF + 2INT 21H; 输出新字符串MOV AH, 2MOV BH, 0MOV DL, 5MOV DH, 9INT 10HMOV AH, 9LEA DX, STRBUF2INT 21H; 输出提示信息RETCHGLTRENDPMAXLTRPR

26、OC FAR ; 在输入字符串中找出最大值REMAX:;设置显示器方式MOV AH, 0MOV AL, 3MOV BL, 0INT 10HMOV AH, 2MOV BH, 0MOV DL, 5MOV DH, 5INT 10HMOV AH, 9LEA DX, STRBUFINT 21H; 输入字符串提示MOV AH, 2MOV DL, 5MOV DH, 6INT 10HMOV AH, 0AHLEA DX, KEYBUFINT 21H; 输入字符串CMP KEYBUF + 1, 0JZ REMAX; 判断输入字符串是否为空串LEA BX, KEYBUF + 2MOV AL, KEYBUF + 1C

27、BWMOV CX, AXADD BX, AXMOV BYTE PTR BX, $ ; 在输入字符串位加结束标志$MOV AH, 2MOV BH, 0MOV DL, 5MOV DH, 7INT 10HMOV AH, 2MOV BH, 0MOV DL, 5MOV DH, 8INT 10HMOV AH, 9LEA DX, MAXCHRINT 21H; 输出字符串中最大值提示MOV DL, 0LEA BX, KEYBUF + 2LCMP:CMP BX, DLJB NOLCHGMOV DL, BXNOLCHG:INC BXLOOP LCMP; 找出字符串中最大字符,放入DLMOV AH, 2INT 21

28、H; 输出字符串中最大字符MOV AH, 2MOV BH, 0MOV DL, 5MOV DH, 9INT 10HMOV AH, 9LEA DX, STRBUF2INT 21H; 输出提示信息RETMAXLTRENDPSORTNUMPROC FAR ; 对输入数据组排序RESORT:;设置显示器方式MOV AH, 0MOV AL, 3MOV BL, 0INT 10HMOV AH, 2MOV BH, 0MOV DL, 5MOV DH, 5INT 10HMOV AH, 9LEA DX, NUMBERINT 21HMOV AH, 2MOV DL, 5MOV DH, 6INT 10HMOV AH, 0A

29、HLEA DX, KEYBUFINT 21H; 输入数据组字符串CALL CIN_INT; 字符串转换成数据串CMP AL, 0JZ RESORT; 判断数据串是否有错CMP NUMBUF, 0JZ RESORT; 判断数据串是否为空MOV AH, 2MOV BH, 0MOV DL, 5MOV DH, 8INT 10HCALL FAR PTR MPSORT ; 数据组排序CALL FAR PTR INT_OUT ; 数据组的输出MOV AH, 2MOV BH, 0MOV DL, 5MOV DH, 9INT 10HMOV AH, 9LEA DX, STRBUF2INT 21H; 输出提示信息RE

30、TSORTNUMENDPCIN_INTPROC NEAR ; 读入整型数MOV CL, KEYBUF + 1LEA SI, KEYBUF + 2MOV CH, 0; 数据组数据个数置0MOV DH, 10MOV AL, 0; 当前数据x=0MOV DL, 0; 有无数据标志置0,即无数据FNDNUM:CMP BYTE PTR SI, JZ ADDNUM; 判断当前字符是否为空格CMP BYTE PTR SI, 0JB ERRNUMCMP BYTE PTR SI, 9JA ERRNUM; 判断当前字符是否在0-9之间MOV DL, 1; 有无数据标志置1,即有数据MUL DHXOR BH, BH

31、MOV BL, SIADD AX, BXSUB AX, 0; 计算出当前数据xCMP AH, 0JA ERRNUM; 判断x是否越界JMP NEXTADDNUM:CMP DL, 1JNZ NEXT; 判断是否有数据INC CH; 数据组数据个数加1CALL ADDNEWMOV DL, 0MOV AL, 0; 清零NEXT:INC SIDEC CLCMP CL, 0JNZ FNDNUM ; 依次检查各字符CMP DL, 1JNZ TOTAL; 判断是否有未加入的数据INC CHCALL ADDNEWTOTAL:MOV NUMBUF, CH ; 置数据组数据个数MOV AL, 1; 输入数据无错误

32、JMP CRTNUMERRNUM:MOV AL, 0; 输入数据有错误CRTNUM:RET CIN_INT ENDPADDNEWPROC NEAR ; 增加新数PUSH AXLEA BX, NUMBUFMOV AL, CHCBWADD BX, AXPOP AXMOV BX, ALRETADDNEWENDPMPSORTPROC FAR ; 数据组排序MOV AL, NUMBUFCMP AL, 1JBE NOSORT; 若只有一个元素,停止排序CBWMOV CX, AXLEA SI, NUMBUF ; SI指向数据组首地址ADD SI, CX; SI指向数据组末地址DEC CX; 外循环次数LP1

33、:; 外循环开始PUSH CXPUSH SIMOV DL, 0; 交换标志置0LP2:; 内循环开始MOV AL, SICMP AL, SI - 1JAE NOXCHGXCHG AL, SI - 1; 交换操作MOV SI, ALMOV DL, 1; 交换标志置1NOXCHG:DEC SILOOP LP2POP SIPOP CXCMP DL, 1JNZ NOSORT; 判断交换标志LOOP LP1NOSORT:RETMPSORTENDPINT_OUTPROC FAR ; 输出数据组MOV AL, NUMBUFCBWMOV CX, AXMOV BL, 10HLEA SI, NUMBUF + 1P

34、RINT:MOV AL, SICALL OUTNUMINC SIMOV AH, 2MOV DL, INT 21HLOOP PRINTRETINT_OUT ENDPOUTNUMPROC NEAR ; 将十进制数以十六进制输出 MOV AH, 0DIV BLPUSH AXCMP AH, 10JB PNUMADD AH, 7PNUM:ADD AH, 30HMOV DL, AHPOP AXPUSH DXCMP AL, 0JZ OUTNCALL OUTNUMOUTN:POP DXMOV AH, 2INT 21HRETOUTNUMENDPTIMCHKPROC FAR; 设定并显示时间;设置显示器方式MOV AH, 0MOV AL, 3;MOV BL, 0;INT 10HMOV AH, 2MOV BH, 0MOV DL, 5MOV DH, 6INT 10HMOV AH, 9LEA DX, TIMESINT 21H; 时间串提示MOV AH, 0AHLEA DX, KEYBUFINT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论