微型计算机原理课程设计(详细版)_第1页
微型计算机原理课程设计(详细版)_第2页
微型计算机原理课程设计(详细版)_第3页
微型计算机原理课程设计(详细版)_第4页
微型计算机原理课程设计(详细版)_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

微型微型计计算机原理算机原理课课程程设计设计 学院学院 专业专业 班班级级 学号学号 姓名姓名 一 目的一 目的 结合微型计算机课程的学习 进一步巩固已学的知识 同时针对计算机原理知 识的具体应用 学会对系统中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的学生的名次 编写程序如下 学生成绩名次表流程图 编写程序如下 CRLF MACROA MOV AH 02H AS 入口 CX 入栈保存 学生数送 CS AL 送 0 分 BX 和 SI 发向成绩表首址 AL SI SI 送 AL DX 记录对应学号 SI 1 CX 1 0 将本次扫描的最高成绩清 0 CX 出栈 返回 Y N Y N 开始 Y N Y N 初始化 显示提示信息 SI 指向成绩表首址 学生送数 CX 调 GETNUN 该成绩送 SI SI 1 CX 1 0 学生送数 CX DI 指向名次表首址 调 SCAN 子程序 扫描成绩表 计算名次 填入 DX 举号对应的名次单元 CX 1 0 显示学生名次 返回 DOS MOV DL 0DH INT 21H MOV AH 02H MOV DL 0AH INT 21H ENDM DATA SEGMENT STUNUM EQU 30 MESS1 DB PLEASE INPUT THE 30 SCORE 0DH 0AH ERROR DB ERROR 0DH 0AH MESS2 DB THE ORDER 0DH 0AH EMARK DB ORG 1000H SCORE DB 30 DUP ORG 2000H SEQU DB 30 DUP DATA ENDS CODE SEGMENT ASSUME CS CODE DS DATA START MOV AX DATA 程序初始化 MOV DS AX MOV ES AX MOV AH 09H MOV DX OFFSET MESS1 INT 21H 9 号功能调用 显示提示信息 MOV SI OFFSET SCORE 成绩表首址赋给 SI MOV CX STUNUM 学生数送 CX MOV EMARK 0 UUU CALL GETNUM 读取键入成绩值送 DX CMP EMARK 01H 如果输入不符合要求则重新输入 JZ START MOV SI DL 存入成绩表缓冲区中 INC SI 指向下一单元 LOOP UUU MOV CX STUNUM 学生数 MOV DI OFFSET SEQU 名次表首地址赋给 DI VVV CALL SCAN 扫描子程序 MOV AL STUNUM 学生数送给 AL SUB AL CL INC AL 计算名次 并把名次赋给 AL MOV BX DX MOV DI BX AL 把名次再赋给对应的 DX 学号 LOOP VVV MOV AH 09H LEA DX MESS2 INT 21H MOV CX STUNUM 学生数赋给 CX MOV SI OFFSET SEQU 名次表首地址赋给 SI WWW MOV AL SI CALL DISPI PUSH DX PUSH AX MOV AH 02 MOV DL 20H INT 21H POP AX POP DX I NC SI LOOP WWW 显示排定的学生名次 MOV AX 4CH INT 21H SCAN PROC NEAR 子程序 每扫描一遍成绩表缓冲区 找出其成绩最高者 由 DX 指针指示对应学生 之后将该成绩清除以便下一次扫描 PUSH CX MOV CX STUNUM 学生数 MOV AL 00H 最低成绩 MOV BX OFFSET SCORE MOV SI BX 指向成绩表首址 CCC CMP AL SI JAE JJJ AL 中的成绩不低于成绩表指针 SI 所指单元的成绩则转 JJJ MOV AL SI AL 存放较高的成绩 MOV DX SI SUB DX BX DX 为对应学号 JJJ INC SI 指向下一单元 LOOP CCC ADD BX DX MOV BYTE PTR BX 00H 本次扫描成绩最高者清 0 以便后面的比较 POP CX RET SCAN ENDP DISPI PROC NEAR 显示子程序 PUSH CX MOV BL AL MOV DL BL MOV CL 04 ROL DL CL AND DL 0FH CALL DISPL MOV DL BL AND DL 0FH CALL DISPL POP CX RET DISPI ENDP DISPL PROC NEAR ADD DL 30H CMP DL 3AH JB DDD ADD DL 27H DDD MOV AH 02H INT 21H RET DISPL ENDP GETNUM PROC NEAR 键读入子程序 PUSH CX XOR DX DX GGG MOV AH 01H INT 21H CMP AL 0DH JZ PPP SUB AL 30H JB KKK CMP AL 09H JBE GETS JMP KKK GETS MOV CL 04 SHL DX CL XOR AH AH ADD DX AX JMP GGG KKK MOV AH 09H MOV DX OFFSET ERROR 显示错误 INT 21H MOV EMARK 01H PPP PUSH DX CRLF POP DX POP CX RET GETNUM ENDP CODE ENDS END START 结果 三 心得体会三 心得体会 经过这一周的微机原理课程设计的磨练 首先让我认识到自己的不足 对编程的生 疏 思路的限制 知道自己还有很多不懂的地方 还有很大的发展的余地 当然正因为如 此我也成为了一名受益者 让自己得到了一个星期的锻炼 对 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 02H MOV DL 07H INT 21H 来实现的 增长了我的知识 其次不知道延时是什 么东西 后来在参考资料时时发现了原来是用 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 个全部比完为止 将最大的成绩的学号 即

温馨提示

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

评论

0/150

提交评论