西电微电子学院微机原理大作业_第1页
西电微电子学院微机原理大作业_第2页
西电微电子学院微机原理大作业_第3页
西电微电子学院微机原理大作业_第4页
西电微电子学院微机原理大作业_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

2016春季计算机原理与系统设计上机报告姓名:*班级:*学号:*日期:2016年6月11日一、(题4.18)从键盘上读入一个正整数N(0N655535),转换成十六进制数存入AX,并在屏幕上显示出来。1.程序设计流程图:开始输入N显示“输入提示字符串“结束处理地位16进制数变成ASCII码,显示四位字符处理高位16进制数变成ASCII码,显示四位字符2.运行结果:3. 遇到的问题和解决方法:在编译的时候发现在emu8086里面,“?”无法识别,所以导致编译不成功。将“?”改为“0”就成功了。二、(题4.37)编写程序实现,将缓冲区BUFFER中的100个字按递增排序,并按下列格式显示:数据1原序号数据2原序号1. 程序设计流程图:结束显示排列结果“冒泡法”进行递增排序开始产生随机数“结束处理地位16进制数变成ASCII码,显示四位字符2.运行结果:由于运行出来产生的不是16位的字而是12位的的数据,而且所有数据都相同,故结果不正确。应该是冒泡法进行随机数产生的时候出现了问题,但是没有找到出错点,所以无法正确显示结果。3. 遇到的问题和解决方法:遇到的问题是随机数的产生不正确。但是上机的时候和组员都没有找出错误的地方,所以该问题没有得到良好的解决。三、(题4.38)按同余法产生一组随机数N(1N50),并按N+50赋给45名同学的5门课程的成绩,要求编程实现计算每个同学的平均成绩,并根据平局成绩统计全班的成绩各等级的人数(A:90100,B:8089,C:7079,D:6669,E:6065,F:60分以下),按下列格式显示:Total A: B: C: D: E: F: 1. 程序设计流程图:结束按要求显示统计平均值的各等级人数计算每个人的平均成绩按N+50赋给45名同学的5门课程的成绩同余法产生一组随机数N开始2. 运行结果:3. 遇到的问题和解决方法:这次的编译比较顺利,没有遇到什么困难。四、(题4.39)编写程序实现下列5项功能,通过从键盘输入15进行菜单式选择: (1)按数字键“1”,完成将字符串中的小写字母变化成大写字母。用户输入由英文大小写字母或数字1-9组成的字符串(以回车结束),变换后按下列格式在屏幕上显示: 例如:abcdgyt0092 ABCDYGT0092 按任意键重做;按eac键返回主菜单 (2)按数字键“2”,完成在字符串中找最大值。用户输入由英文大小写字母或数字1-9组成的字符串(以回车结束),找出最大值按下列格式在屏幕上显示: The maximum is 按任意键重做;按eac键返回主菜单 (3)按数字键“3”,完成输入数据组的排序。用户输入一组十进制数值(小于255),然后变换成十六进制数,按递增方式进行排列,按下列格式在屏幕上显示: 按任意键重做;按eac键返回主菜单 (4)按数字键“4”,完成时间的显示。首先提示用户对时,即改变系统的定时器HH:MM:SS(以冒号间隔,回车结束),然后在屏幕的右上角实时显示出时间:HH:MM:SS. 按任意键重做;按eac键返回主菜单 (5)按数字键“5”,结束程序的运行,返回操作系统。1. 程序设计流程图:跳转相应子程序选择输入数字“1-5”显示MENU开始数据段定义MENU结束按要求完成子程序2. 运行结果:菜单选择:功能1:功能2:功能3:功能4:功能5:3. 遇到的问题和解决方法:应该注意的是Masm510的使用方法:首先将工具移动到D盘,然后保存程序代码用1.asm格式到“masm510”文件夹下,通过附件程序运行,依次输入“d:”、“cd masm510”、“masm 1.asm”、“link 1.obj”、“1.exe”就开始运行了。附件:习题代码一、(题4.18)从键盘上读入一个正整数N(0N655535),转换成十六进制数存入AX,并在屏幕上显示出来。STACK SEGMENT STACK STACK DW 100H DUP(?)TOP LABEL WORDSTACK ENDSDATA SEGMENTKEYBUFFER DB 100;键盘缓冲区 DB ? DB 100 DUP(?)STRING1 DB Please input decimal data : $;输入提示字符串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,TOPLEA DX,STRING1;显示出“输入提示字符串”MOV AH,09HINT 21HMOV AH,0AH;输入十进制数据LEA DX,KEYBUFFERINT 21H LEA SI,KEYBUFFER+1;变换 CALL TRANS10TO16 CALL DISPCR;屏幕光标回车换行 CALL DISPAX;显示变换结果 CALL DISPCR MOV AX,BX CALL DISPAX;显示变换结果是否正确的标志(BX)的内容 MOV AH,4CH ;返回DOS MOV AL,0 INT 21HDISPALPROC NEAR;例3.34PUSH AXPUSH CXPUSH DXPUSH AXMOV CL,4;处理高位16进制数SHR AL,CLCALL CHANG;十六进制数变ASCII码MOV AH,02MOV DL,ALINT 21H;显示一位字符POP AXAND AL,0FH;处理低位十六进制数CALL CHANG;十六进制数变ASCII码MOV AH,02MOV DL,ALINT 21H;显示一位字符POP DXPOP CXPOP AXRETDISPAL ENDPCHANG PROC NEAR;十六进制数变换成ASCII码CMP AL,10JNGE CHANG1ADD AL,7CHANG1:ADD AL,30HRETCHANGENDPDISPAXPROC NEARXCHG AL,AHCALL DISPALXCHG AH,ALCALL DISPALRETDISPAX ENDP;例3.34定义结束DISPCR 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 ENDPTRANS10TO16PROC NEAR;TRANS10TO16子函数定义PUSH CXPUSH DXPUSH SIXOR AX,AXXOR CX,CXMOV CL,SIINC SIMOV AL,SIINC SISUB AL,30HDEC CXJCXZ TRANSF2MOV BX,10TRANSF1:MUL BXJC TRANSF_ERRMOV DL,SIINC SI SUB DL,30HADD AL,DLADC AH,0JC TRANSF_ERRLOOP TRANSF1MOV BX,0TRANSF2:JMP TRANSF_OKTRANSF_ERR:MOV BX,-1TRANSF_OK:POP SIPOP DXPOP CXRETTRANS10TO16 ENDPCODE ENDS END START二、(题4.37)编写程序实现,将缓冲区BUFFER中的100个字按递增排序,并按下列格式显示:数据1原序号数据2原序号STACK SEGMENT STACK STACK DW 100H DUP(?) TOP LABEL WORD STACK ENDS DATA SEGMENT BUFFER LABEL WORD X=17 REPT 100 X=(X+80)mod 43 DW X ENDM BUF DW 100 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX LEA SP,TOP MOV CX,100 LEA SI,BUFFER LEA DI,BUF L1: 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 CX L2: PUSH CX PUSH SI L3: MOV AX,SI CMP AX,SI-2 JAE NOXCHG XCHG AX,SI-2 MOV SI,AX NOXCHG: SUB SI,2 LOOP L3 POP SI POP CX LOOP L2 MOV CX,100 LEA SI,BUFFER L4: 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 21H DISPAX PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI MOV BX,10 MOV CX,3 L7: XOR DX,DX DIV BX MOV DI,DX INC DI INC DI LOOP L7 MOV CX,3 L8: 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 RET DISPAX ENDP DISPCR 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 RET DISPCR ENDP XIAOYU PROC NEAR PUSH AX PUSH DX MOV AH,02 MOV DL,3CH INT 21H POP DX POP AX RET XIAOYU ENDP XUHAO PROC NEAR PUSH AX PUSH BX PUSH CX PUSH SI MOV CX,100 MOV BX,AX LEA SI,BUF L5: CMP BX,SI JZ L6 ADD SI,2 LOOP L5 L6: MOV AX,101 SUB AX,CX CALL DISPAX POP SI POP CX POP BX POP AX RET XUHAO ENDP DAYU PROC NEAR PUSH AX PUSH DX MOV AH,02 MOV DL,3EH INT 21H POP DX POP AX RET DAYU ENDP CODE ENDS END START三、(题4.38)按同余法产生一组随机数N(1N50),并按N+50赋给45名同学的5门课程的成绩,要求编程实现计算每个同学的平均成绩,并根据平局成绩统计全班的成绩各等级的人数(A:90100,B:8089,C:7079,D:6669,E:6065,F:60分以下),按下列格式显示:Total A: B: C: D: E: F: STACK SEGMENT STACK STACK DW 100H DUP(?) TOP LABEL WORD STACK ENDS DATA SEGMENT BUFFER LABEL BYTE X=17 REPT 225 X=(X+97)mod 50DB X ENDM BUF DB 45 DUP(?) NUMBER DW 6 DUP(?) TOTAL DB 54H,6FH,74H,61H,6CH LETTER DB 41H,42H,43H,44H,45H,46H DECIMAL DB 5 DUP(?) DATA ENDS CODE 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 DI,BUF MOV CX,45 L1: PUSH CX MOV CX,5 XOR AX,AX L2: 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,0 L3: MOV DI,AX INC DI NC DI LOOP L3 MOV CX,45 MOV BX,1 LEA DI,NUMBER L4: MOV AL,SI CMP AL,90 JAE LA CMP AL,80 JAE LB CMP AL,70 JAE LC CMP AL,66 JAE LD CMP AL,60 JAE LM ADD DI+10,BX JMP L5 LA: ADD DI,BX JMP L5 LB: ADD DI+2,BX JMP L5 LC: ADD DI+4,BX JMP L5 LD: ADD DI+6,BX JMP L5 LM: ADD DI+8,BX L5: INC SI LOOP L4 LEA SI,TOTAL MOV CX,5 L6: MOV AH,02 MOV DL,SI INT 21H INC SI LOOP L6 CALL KONGGE CALL XIAOYU MOV AX,45 CALL DISPAX CALL DAYU CALL DISPCR MOV CX,6 LEA SI,LETTER LEA DI,NUMBER L7: 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 21H KONGGE PROC NEAR PUSH AX PUSH DX MOV AH,02 MOV DL,20H INT 21H POP DX POP AX RET KONGGE ENDP DISPCR 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 RET DISPCR ENDP XIAOYU PROC NEAR PUSH AX PUSH DX MOV AH,02 MOV DL,3CH INT 21H POP DX POP AX RET XIAOYU ENDP DAYU PROC NEAR PUSH AX PUSH DX MOV AH,02 MOV DL,3EH INT 21H POP DX POP AX RET DAYU ENDP DISPAX PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH DILEA DI,DECIMAL CALL TRANS16TO10 MOV CX,5 LEA DI,DECIMAL+4 MOV AH,2 DISPAX2: MOV DL,DI ADD DL,30H DEC DI INT 21H LOOP DISPAX2 POP DI POP DX POP CX POP BX POP AX RET DISPAX ENDP TRANS16TO10 PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI MOV BX,10 MOV CX,5 TRANS1: XOR DX,DX DIV BX MOV DI,DL INC DI LOOP TRANS1 POP DI POP DX POP CX POP BX POP AX RET TRANS16TO10 ENDP CODE ENDS END START 四、(题4.39)编写程序实现下列5项功能,通过从键盘输入15进行菜单式选择: (1)按数字键“1”,完成将字符串中的小写字母变化成大写字母。用户输入由英文大小写字母或数字1-9组成的字符串(以回车结束),变换后按下列格式在屏幕上显示: 例如:abcdgyt0092 ABCDYGT0092 按任意键重做;按eac键返回主菜单 (2)按数字键“2”,完成在字符串中找最大值。用户输入由英文大小写字母或数字1-9组成的字符串(以回车结束),找出最大值按下列格式在屏幕上显示: The maximum is 按任意键重做;按eac键返回主菜单 (3)按数字键“3”,完成输入数据组的排序。用户输入一组十进制数值(小于255),然后变换成十六进制数,按递增方式进行排列,按下列格式在屏幕上显示: 按任意键重做;按eac键返回主菜单 (4)按数字键“4”,完成时间的显示。首先提示用户对时,即改变系统的定时器HH:MM:SS(以冒号间隔,回车结束),然后在屏幕的右上角实时显示出时间:HH:MM:SS. 按任意键重做;按eac键返回主菜单 (5)按数字键“5”,结束程序的运行,返回操作系统。STACK SEGMENT STACK DB 256 DUP(0) TOP LABEL WORD STACK ENDS DATA SEGMENT TABLE DW L1, L2, L3, L4, L5 STRING1 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 Input 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 0 DB 61 DUP (0) NUMBUF DB 0 DB 20 DUP (0) DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACK START: MOV AX, DATA MOV DS, AX MOV AX, STACK MOV SS, AX LEA SP, TOP MAIN: 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 PTR BX L1: CALL FAR PTR CHGLTR MOV AH, 8 INT 21H CMP AL, 1BH JZ MAIN JMP L1 L2: CALL FAR PTR MAXLTR MOV AH, 8 INT 21H CMP AL, 1BH JZ MAIN JMP L2 L3: CALL FAR PTR SORTNUM MOV AH, 8 INT 21H CMP AL, 1BH JZ MAIN JMP L3 L4: CALL FAR PTR TIMCHK MOV AH, 8 INT 21H CMP AL, 1BH JZ MAIN JMP L4 L5: MOV AH, 4CH INT 21H MENU 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, 7INT 10HMOV AH,9LEA DX, STRING3 INT 21H MOV AH, 2 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 RET MENU ENDPCHGLTR PROC FAR RECHG: 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 RECHG ; 判断输入字符串是否为空串 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 LEA BX, KEYBUF + 2 LCHG: CMP BYTE PTR BX, 61H JB NOCHG AND BYTE PTR BX, 0DFH NOCHG: 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 CHGLTR ENDP MAXLTR PROC FAR 在输入字符串中找出最大值 REMAX: ;设置显示器方式 MOV AH, 0 MOV AL, 3 MOV BL, 0INT 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 ; 判断输入字符串是否为空串 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 + 2 LCMP: CMP BX, DL JB NOLCHG MOV DL, BX NOLCHG: 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 ; 输出提示信息 RET MAXLTR ENDP SORTNUM PROC FAR ; 对输入数据组排序 RESORT: ;设置显示器方式 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, 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 MPSORT ; 数据组排序 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 ; 输出提示信息 RET SORTNUM ENDP CIN_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 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 NEXT ADDNUM: CMP DL, 1 JNZ NEXT ; 判断是否有数据 INC CH ; 数据组数据个数加1 CALL ADDNEW MOV DL, 0 MOV AL, 0 ; 清零 NEXT: INC SI DEC CL CMP CL, 0 JNZ FNDNUM ;依

温馨提示

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

评论

0/150

提交评论