微型计算机原理课程设计(详细版)

上传人:Sc****h 文档编号:133406726 上传时间:2022-08-10 格式:DOCX 页数:11 大小:77.54KB
返回 下载 相关 举报
微型计算机原理课程设计(详细版)_第1页
第1页 / 共11页
微型计算机原理课程设计(详细版)_第2页
第2页 / 共11页
微型计算机原理课程设计(详细版)_第3页
第3页 / 共11页
点击查看更多>>
资源描述
.微型计算机原理课程设计学院专业班级学号姓名.一、目的结合微型计算机课程的学习, 进一步巩固已学的知识, 同时针对计算机原理知识的具体应用,学会对系统中 DOS和BIOS的使用。学会使用屏幕编辑程序 EDIT, 弄懂汇编程序的上级过程以及如何运用 DEBUG软件进行汇编程序的调试。二、内容1. 字符串的匹配为掌握提示信息的设置方法及读取键入信息的方法。编写程序事先两个字符串的比较。如相同,则显示“MATCH”, 否则,则显示“ NO MATCH”2. 从键盘输入数据并显示的设计为掌握接受键盘数据的方法,并了解将键盘数据显示时必须转化为 ASCII 码的原理。编写程序,将键盘接受到的四位十六进制数据转化为等值的二进制数,再显示在终端上。3. 响铃设计为掌握响铃的使用方法。编写程序,从键盘接受输入字符,如是数字 N,则响铃 N 次,如果不是数字,则不响。4. 将键盘输入的小写字母转化成大写字母的设计为了解小写字母和大写字母在计算机内的表示方法,并学习如何进行转换,编写程序,接受键盘字符, 并将其中的小写字母转变为大写字母, 然后显示在屏幕上。5. 学生成绩名次表设计为进一步熟悉排序方法, 编写程序,将100以内的 30个成绩存入首址为 1000H 的存储区中。 1000H+i表示学号为 i 的学生成绩。编写程序使得在 2000H开始的区域排出名次表, 2000H+i为学号 i的学生的名次。编写程序如下.学生成绩名次表流程图入口开始CX 入栈保存初始化学生数送 CS显示提示信息SI 指向成绩表首址AL送0分学生送数 CXBX 和 SI 发向成绩表首址调 GETNUN, 该成绩送 SIAL=SIYSI+1NNCX-1=0SI 送 AL,DX 记录对应学号Y学生送数 CXSI+1DI 指向名次表首址NCX-1=0调 SCAN 子程序 ,扫描成绩表Y计算名次 ,填入 DX 举号对应的名次单元将本次扫描的最高成绩清0NCX-1=0CX 出栈Y显示学生名次返回返回 DOS编写程序如下CRLFMACROAMOVAH,02HASMOVDL,0DH.INT21HMOVAH,02HMOVDL,0AHINT 21HENDMDA TASEGMENTSTUNUM EQU30MESS1DBPLEASE INPUT THE 30 SCORE 0DH,0AH,$ERROR DB ERROR!,0DH,0AH,$MESS2DBTHE ORDER :0DH,0AH ,$EMARKDB?ORG1000HSCOREDB30 DUP(?)ORG2000HSEQUDB30 DUP(?)DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART:MOVAX,DATA;程序初始化MOVDS,AXMOVES,AXMOVAH,09HMOVDX,OFFSET MESS1INT21H;9 号功能调用,显示提示信息MOVSI,OFFSET SCORE; 成绩表首址赋给SIMOVCX,STUNUM;学生数送 CXMOVEMARK,0UUU:CALL GETNUM;读取键入成绩值送DXCMPEMARK,01H;如果输入不符合要求则重新输入JZSTARTMOVSI,DL;存入成绩表缓冲区中INCSI; 指向下一单元LOOP UUUMOVCX,STUNUM;学生数MOVDI,OFFSET SEQU; 名次表首地址赋给DIVVV:CALL SCAN;扫描子程序MOVAL,STUNUM; 学生数送给 ALSUBAL,CLINCAL; 计算名次,并把名次赋给 ALMOVBX,DXMOVDI+BX,AL;把名次再赋给对应的 DX 学号LOOP VVV;MOVAH,09HLEADX,MESS2.INT 21HMOVCX,STUNUM;学生数赋给CXMOVSI,OFFSET SEQU;名次表首地址赋给SIWWW: MOV AL,SICALL DISPI PUSH DXPUSHAXMOVAH,02MOVDL,20HINT21HPOPAXPOPDXINCSILOOP WWW; 显示排定的学生名次MOVAX,4CHINT21HSCANPROCNEAR;子程序 ,每扫描一遍成绩表缓冲区, 找出其成绩最高者;(由 DX 指针指示对应学生),之后将该成绩清除以便下一次扫描PUSHCXMOVCX,STUNUM;学生数MOVAL,00H;最低成绩MOVBX,OFFSET SCOREMOVSI,BX;指向成绩表首址CCC: CMP AL,SIJAEJJJ;AL 中的成绩不低于成绩表指针SI 所指单元的成绩则转 JJJMOVAL,SI;AL 存放较高的成绩MOVDX,SISUBDX,BX;DX 为对应学号JJJ:INCSI;指向下一单元LOOP CCCADDBX,DXMOVBYTE PTR BX,00H;本次扫描成绩最高者清0,以便后面的比较POPCXRETSCANENDPDISPIPROCNEAR;显示子程序PUSHCXMOVBL,ALMOVDL,BLMOVCL,04ROLDL,CLANDDL,0FHCALLDISPLMOVDL,BL.ANDDL,0FHCALLDISPLPOPCXRETDISPIENDPDISPLPROCNEARADDDL,30HCMPDL,3AHJBDDDADDDL,27HDDD:MOVAH,02HINT21HRETDISPLENDPGETNUMPROCNEAR; 键读入子程序PUSHCXXORDX,DXGGG:MOVAH,01HINT21HCMPAL,0DHJZPPPSUBAL,30HJBKKKCMPAL,09HJBEGETSJMPKKKGETS:MOVCL,04SHLDX,CLXORAH,AHADDDX,AXJMPGGGKKK:MOVAH,09HMOVDX,OFFSET ERROR;显示错误INT21HMOVEMARK,01HPPP:PUSHDXCRLFPOPDXPOPCXRETGETNUMENDPCODEENDSENDSTART.结果:三,心得体会经过这一周的微机原理课程设计的磨练, 首先让我认识到自己的不足, 对编程的生疏,思路的限制, 知道自己还有很多不懂的地方, 还有很大的发展的余地, 当然正因为如此我也成为了一名受益者, 让自己得到了一个星期的锻炼,对 CMD 命令提示符这个编程有了更多的认识。在这一个星期中,可以说是苦大于甜,这些程序题目都像一座座大山在我的前面,我.必须很努力的去克服这些困难, 通过在网上搜集资料以及去询问同学, 我也渐渐的克服了这些。下面我就一个一个程序的来叙述一下我这个星期的成果吧首先第一个程序是字符串的匹配设计,思路是:字符串的输入是用9 号功能调用,但是要注意的是必须以 $作为结束符,否则运行结果是乱码,我就是遇到乱码的, 后来询问同学以及查看书籍知道了这个很重要的一点, 然后既然是匹配,那肯定是两个相等长度的字符串的比较了, 如果是两个长度不等的字符串那么就可以直接输出 NO MATCH, 然后一个一个的字符进行比较,如果相等则比较下一个,如果不相等,则直接输出 NO MATCH,知道每一个字符都相等那么输出 MATCH, 则可以得出编写此程序得到 MATCH结果的要求是 1、两个字符串长度必须相等 2、相对应的每一个字符都必须相等。程序的运行结果第二个程序是从键盘输入数据并显示的设计。 大概思路:从键盘接受到四位十六进制,首先要判断接收到的是不是符合要求,是不是在 0-F 中,则要先判断,如果是则进行下面的步骤,如果是回车或者空格则结束程序,如果不是则显示 ERROR!,其次输出二进制是一位一位的显示,我们可以把四位十六进制数放在 BX中,让它循环左移一位,并且取二进制的第八位,让高七位置零,显示最低位加上 30H的对应 ASCII 表中的数字,如此循环 16 次,就可以把四位十六进制对应的 16 位二进制输出。当然在期间遇到了困难,比如最初没有想到要判断输入是否正确,整个重心只在如何输出,所以在运行时出现了困难, 还有不懂 2 号功能调用后键入的值去哪里了,不知道下面应该怎么写,后来知道是赋给了AL 了。下面程序运行的结果:.第三个程序是响铃设计, 大概的思路是: 首先要键入一个数, 用的是 1 号功能调用,我们采用的是输入一个数的ASCII 码,因为这样方便比较,则如果在 30H-39H则可以运行下面的程序, 如果是回车 0DH,或者空格 20H则退出程序,不是的话则重新输入, 然后讲 ASCII 码减去 2FH则作为响铃的次数, 响铃中比较重要的一点是延时, 在两次响铃中间有延时, 这样才能更加的清楚, 为此我们采用在每两次响铃之间进行 CX的自循环,设 CX=0FFFFH,然后让它循环减 1 直到为 0 了则可以进行第二次响铃了, 则完成了两次响铃之间的一个延时, 响铃的次数由键入的数决定。 在程序设计过程中也遇到了困难, 比如刚开始我不知道响铃是用什么来实现的,后来询问同学和查询资料后知道响铃是用MOV AH,02HMOVDL,07HINT21H来实现的,增长了我的知识。其次不知道延时是什么东西,后来在参考资料时时发现了原来是用CX 的自循环来实现的,很巧妙的一种方法。第四个程序是将键盘输入的小写字母转换为大写字母,大概的思路是这样的:首先用1 号功能调用接受从键盘输入的字母, 然后要判断是否是小写字母, ,如果键入为回车 0DH, ,则退出程序 20H 如果键入值的 ASCII 码小于 61H,及不是小写字母,则重新输入,如果是小写字母,则将小写字母的 ASCII 码减去 20H,转换为对应大写字母的 ASCII 码.按回车后变成第五个程序是学生成绩名次表的设计,大概的思路是:首先要设置数据段放30个学生的成绩, 还有 30 个学生的排名。 然后调用 GETNUM来接受键入的成绩, 首先在 GETNUM中要判断成绩输入的形式是否正确,如果ASCII 码小于 30H 及小于0 了,就显示出错重新输入,如果输入在 0-9 之间则将输入的值放入 DX的高四位,然后在将紧接着的一个数字存到 DX的低四位,也就是将一个人的成绩存放到 DX中去,然后将 DL 存到对应数据段存放成绩的位置因为题目的给定, 所以存放的首地址是 1000H,知道取满 30 个为止,然后开始判断成绩的高低了 , 可以首先假设一个 AL=00H,然后 将学生的成绩与之进行比较,用循环,设 CX 初值是30,每次将 AL 与全部其他的比完后减 1,如果比 AL 大的话,就取代 AL, 并且判断下一个,如果比 AL 小的话就直接判断下一个, 直到 30 个全部比完为止, 将最大的成绩的学号(即对应地址减去首地址得到的数),并将最高成绩清零,是为了下面的比较,将学生总数 30 减去 CX,就是该学生的成绩名次。然后将学生的名次存入相应名次表中对应学号位置处。直到全部 30 个名次全部存完。然后将.名次表输出。就可以得到每个人的相应的名次了。当然还遇到了一些困难, 就是思路不清晰, 不知道具体该怎么做, 后来知道名次表和成绩表用不同的数据段来表示, 这样就不会混淆了, 还有很重要的一点就是不知道比较完一次之后要把最高的那个成绩置零, 导致结果出错, 后来在参考资料下知道了这一点。最后的结果是:.
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 幼儿教育


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!