当前位置:文档之家› 西电微机原理上机

西电微机原理上机

4.37 (上机题)编写程序实现,将缓冲区BUFFER中的100个字按递增排序,并按下列格式顺序显示:数据1 <原序号>数据2 <原序号>……算法流程图:调试问题、心得体会:通过这道题,熟悉了流程图画法,掌握了产生随机数,“冒泡法”排序,子函数编写调用等的基本过程,尤其对于中断调用,并利用ASCII码回显和对课本字节型数据“冒泡法”排序改进为字形排序的过程,是我受益匪浅。

并且亲身实践了源程序的汇编、调试也连接。

问题:将字节型冒泡法直接应用于该题,导致出错,该题存储的是字型数据!原因在于只是排列的AL中的数值,并不是产生的随机数!同时对于字型与字节型在运算类指令中的应用还是有误,以及其他的一些小错误,应加以改善!运行结果:程序代码:STACK SEGMENT STACK 'STACK'DW 100H DUP(?)TOP LABEL WORDSTACK ENDSDATA SEGMENTBUFFER LABEL WORDX=17REPT 100X=(X+80)mod 43DW XENDMBUF DW 100 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START:MOV AX,DATAMOV DS,AXMOV ES,AXMOV AX,STACKMOV SS,AXLEA SP,TOPMOV CX,100LEA SI,BUFFERLEA DI,BUFL1:MOV AX,[SI]INC SIINC SIMOV [DI],AXINC DIINC DILOOP L1MOV CX,100DEC CXLEA SI,BUFFERPUSH CXADD CX,CXADD SI,CXPOP CXL2:PUSH CXPUSH SIL3:MOV AX,[SI]CMP AX,[SI-2]JAE NOXCHGXCHG AX,[SI-2]MOV [SI],AXNOXCHG:LOOP L3POP SIPOP CXLOOP L2MOV CX,100LEA SI,BUFFER L4:MOV AX,[SI] CALL DISPAX ADD SI,2CALL XIAOYU CALL XUHAOCALL DAYUCALL DISPCR LOOP L4MOV AH,4CHMOV AL,0INT 21H DISPAX PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH DIMOV BX,10MOV CX,3L7:XOR DX,DXDIV BXMOV [DI],DX INC DIINC DILOOP L7MOV CX,3L8:DEC DIDEC DIMOV AL,[DI] ADD AL,30HMOV AH,02MOV DL,ALINT 21HLOOP L8POP DXPOP CXPOP BXPOP AXRET DISPAX ENDP DISPCR PROC NEAR PUSH AXPUSH DXMOV AH,2MOV DL,0AH INT 21HMOV AH,2MOV DL,0DH INT 21HPOP DXPOP AXRET DISPCR ENDP XIAOYU PROC NEAR PUSH AXPUSH DXMOV AH,02 MOV DL,3CH INT 21HPOP DXPOP AXRET XIAOYU ENDP XUHAO PROC NEAR PUSH AXPUSH BXPUSH CXPUSH SIMOV CX,100 MOV BX,AX LEA SI,BUF L5:CMP BX,[SI] JZ L6ADD SI,2LOOP L5L6:MOV AX,101SUB AX,CXCALL DISPAXPOP SIPOP CXPOP BXPOP AXRETXUHAO ENDPDAYU PROC NEARPUSH AXPUSH DXMOV AH,02MOV DL,3EHINT 21HPOP DXPOP AXRETDAYU ENDPCODE ENDSEND START4.38 (上机题)按同余法产生一组随机数N(1<N<=50),并按N+50赋给45名同学的5门课程的成绩,要求编程实现计算每个同学的平均成绩,并根据平均成绩统计全班的成绩各等级的人数(A:90~100,B:80~89,C:70~79,D:66~69,E:60~65,F:60分以下),按下列格式显示:Total <总人数>A: <人数1>B: <人数2>C: <人数3>D: <人数4>E: <人数5>F: <人数6>算法流程图:调试问题、心得体会:通过该问题,进一步练习了通过流程图分析设计程序的功能,掌握了随机数产生,子函数调用,分支程序,循环程序,中断调用等过程,进行了调试,找出了数值无法转化为十进制并显示的问题,原因在于未定义临时存储单元。

最后进行了汇编,链接等,得到了最终结果。

问题1:NUMEER(用来存储各等级人数)存储单元清零后,忘记让DI再次指向其首地址,也就是各成绩等级的人数并未存入NUMBER,因此显示的都是0改正后得到正确结果!问题2:直接照搬课本数值转换子程序,未定义临时存储单元DECIMAL,导致编译出错,出现语法错误!改正后得到正确结果!运行结果:程序代码:STACK SEGMENT STACK 'STACK'DW 100H DUP(?)TOP LABEL WORDSTACK ENDSDATA SEGMENTBUFFER LABEL BYTEX=17REPT 225X=(X+97)mod 50ENDMBUF 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 SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START:MOV AX,DATAMOV DS,AXMOV ES,AXMOV AX,STACKMOV SS,AXLEA SP,TOPLEA SI,BUFFERLEA DI,BUFMOV CX,45L1:PUSH CXMOV CX,5XOR AX,AXL2:MOV BL,[SI]MOV BH,0ADD AX,BXADD AX,50INC SILOOP L2POP CXMOV BL,5DIV BLMOV [DI],ALINC DILOOP L1LEA SI,BUFLEA DI,NUMBERMOV CX,6MOV AX,0L3:MOV [DI],AXINC DILOOP L3MOV CX,45MOV BX,1LEA DI,NUMBER L4:MOV AL,[SI]CMP AL,90JAE LACMP AL,80JAE LBCMP AL,70JAE LCCMP AL,66JAE LDCMP AL,60JAE LMADD [DI+10],BX JMP L5LA:ADD [DI],BXJMP L5LB:ADD [DI+2],BX JMP L5LC:ADD [DI+4],BX JMP L5LD:ADD [DI+6],BX JMP L5LM:ADD [DI+8],BX L5:INC SILOOP L4LEA SI,TOTAL MOV CX,5L6:MOV AH,02MOV DL,[SI]INT 21HINC SILOOP L6CALL KONGGE CALL XIAOYU MOV AX,45CALL DISPAX CALL DAYUCALL DISPCR MOV CX,6LEA SI,LETTER LEA DI,NUMBER L7:MOV AH,02MOV DL,[SI] INT 21HINC SIMOV AH,02MOV DL,3AHINT 21HCALL KONGGE CALL XIAOYU MOV AX,[DI] CALL DISPAX INC DIINC DICALL DAYUCALL DISPCR LOOP L7MOV AH,4CHMOV AL,0INT 21H KONGGE PROC NEARPUSH AXPUSH DXMOV AH,02MOV DL,20HINT 21HPOP DXPOP AXRETKONGGE ENDPDISPCR PROC NEARPUSH AXPUSH DXMOV AH,2MOV DL,0AHINT 21HMOV AH,2MOV DL,0DHINT 21HPOP DXPOP AXRETDISPCR ENDPXIAOYU PROC NEARPUSH AXPUSH DXMOV AH,02MOV DL,3CHINT 21HPOP DXPOP AXRETXIAOYU ENDPDAYU PROC NEARPUSH AXPUSH DXMOV AH,02MOV DL,3EHINT 21HPOP DXPOP AXRETDAYU ENDPDISPAX PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH DILEA DI,DECIMAL CALL TRANS16TO10 MOV CX,5LEA DI,DECIMAL+4 MOV AH,2 DISPAX2:MOV DL,[DI]ADD DL,30HDEC DIINT 21HLOOP DISPAX2POP DIPOP DXPOP CXPOP BXPOP AXRETDISPAX ENDPTRANS16TO10 PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH DIMOV BX,10MOV CX,5TRANS1:XOR DX,DXDIV BXMOV [DI],DLINC DILOOP TRANS1POP DIPOP DXPOP CXPOP BXPOP AXRETTRANS16TO10 ENDPCODE ENDSEND START4.39 (上机题)编写程序实现下列5项功能,通过从键盘输入1~5进行菜单式选择:(1)按数字键“1”,完成将字符串中的小写字母变换成大写字母。

用户输入由英文大小写字母或数字0~9组成的字符串(以回车结束),变换后按下列格式在屏幕上显示: <原字符串>例如:abcdgyt0092<新字符串> ABCDGYT0092按任一键重做;按Esc键返回主菜单。

相关主题