资源描述
课 程 设 计
课程设计名称: 微机应用系统课程设计
专 业 班 级 : 计科1204班
学 生 姓 名 : 张婷婷
学 号 : 201216010433
指 导 教 师 : 王 锋
课程设计时间: 2014.12.22-2015.1.3
计算机科学与技术 专业课程设计任务书
学生姓名
张婷婷
专业班级
计科1204班
学号
201216010433
题 目
加法练习程序设计
课题性质
A.工程设计
课题来源
自拟课题
指导教师
王 锋
同组姓名
无
主要内容
随机给出百位数以内的加法算式,并提示输入答案,若正确给出正确提示,若错误给出错误提示,并提示输入答案;按 R 键继续下一题,按 Q 键返回 DOS.
任务要求
一切以设计内容为前提进行课程设计实验:
1.设计一个菜单,选项为加法和减法的练习。
2.以获取系统中的秒和百分秒作为两个随机数进行加减运算。
3.将输入的答案和运行结果比较,若相等给出正确提示,若错误给出错误提示,并继续输入答案直到正确为止。
4.提示是否继续下一题,按R键继续下一题,按Q键返回 DOS。
参考文献
1.《16/32位微机原理、汇编语言及接口技术(第2版)》---(北京电子工业出版社 2003)钱晓捷,陈涛 编著
2.《32位微型计算机原理与接口技术》---(北京清华大学出版社 2000)仇玉章等 编著
审查意见
指导教师签字:
教研室主任签字: 2015年 1 月 10日
一. 课程设计实验的目的
课程设计的目的在于更好的锻炼我们的实践能力和考验平时学习的成果。我们是计算机专业,离不开编写代码。平时上课所学的知识来自于课本,上机实验相对比较少,所能锻炼的操作能力机会不多。而课程设计是让我们综合平时课本和实验的知识及经验,自己设计和构造,编写一个相对完整的程序。这不仅仅是对以前知识的巩固,更是锻炼我们的思维,我们的设计与编写程序的能力。对于我们以后将会从事的计算机类工作,这能很好的为我们打下坚实的基础,所谓积少成多,每学期都做课程设计,到毕业时我们对于编写一个应用软件或许就能较容易驾驭了。
本次微机应用系统课程设计我的题目是加法练习程序设计,虽然只要求加法运算,但我在该程序里添加了减法运算,使得程序相对不会太单调。虽然给的编程题目可能会与别人一样,但每个人的想法不一样,在设计时添加自己的想法或许就能使程序更加完善了,这也是课程设计对我们的一种锻炼。
二. 实验设计的任务与要求
加法练习设计程序的内容是:随机给出百位数以内的加法算式,并提示输入答案,若正确给出正确提示,若错误给出错误提示,并提示输入答案;按 R 键继续下一题,按 Q 键返回 DOS。按照内容要求,在所学知识内容的基础上设计程序,具体的内容设计要求任务如下:
1.设计一个菜单,选项为加法和减法的练习。
2.以获取系统中的秒和百分秒作为两个随机数进行加减运算。
3.将输入的答案和运行结果比较,若相等给出正确提示,若错误给出错误提示,并继续输入答案直到正确为止。
4.提示是否继续下一题,按R键继续下一题,按Q键返回 DOS。
这次课程设计是在完成设计要求的基础上,添加了减法练习运算,以仔细、认真、规范的态度完成自己课程设计。
三. 实验设计的思想
加法练习程序设计,主要工作是产生两个两位数的随机数进行加运算,而怎么产生随机数是该程序的难点。在搜集了一些资料后发现很多程序用的随机数是伪随机,是一个比较复杂算法,而不使用算法获得随机数的方法就是获取系统的时间。在翻阅课本后得知mov ah,2ch int 21h语句可以得到系统时间,在考虑后认为秒和百分秒比较适合,因为在短时间内这两个时间变化的多一些,比较适合用于随机数。Dh所存的数对应的是秒,Dl所存的数对应的是百分秒。加法直接将两个随机数相加即可,但减法就相对麻烦些,因为会出现第一个随机数比第二个随机数小得到结果为负数。为了解决这一问题,在数据段定义了两个变量,用来存放减数和被减数。在获取随机数时先不显示运算式,先将随机数的值给变量num1和变量mum2,如果相减结果小于0则转回去继续取随机数,直到取得随机数相减记过大于0,则显示运算式继续后面的程序运行。
相对较难的部分解决后则是将整个程序流程串起来,先是显示选择加或减运算,产生的随机数并显示相应的运算式;再是输入结果,对结果进行判断给出对或错的提示,错误时提示继续输入结果,对则继续下一步;最后选择是否继续下一题,R返回最初加减运算选择,Q则退出。
四. 实验环境
4.1运行环境
(1)软件环境
● 操作系统:Windows 7
(2)硬件环境
● 处理器:Inter Core i5
● 内存:4.00GB
● 硬盘空间:500GB
4.2开发工具与编程语言
(1)开发工具:
Masm for Windows集成实验环境 V2012
(2)编程语言:
汇编
五. 实验方案
先是设计了一个菜单,用于选择进行加法运算还是减法运算,菜单显示来自数据段的字符串。选择后变转到jiafa或jianfa程序段中,调用产生随机数的random1(秒)和random2(百分秒)程序段中并显示运算式。将输入的答案通过show程序段将其转换成ASCII码显示出来,再由get程序段将输入的答案转换成对应的数,最后转换成数的答案与计算机运算结果比较,如果相减为0则对,提示correct,否则输入的答案是错的,提示error并让其继续输入答案直到正确为止。在答案正确后,提示“Continue(R) or Exit(Q)?”是否继续下一题,按R继续下一题,按Q则返回DOS。
开始
六. 实验流程图
显示菜单
选择
加法练习算式
减法练习算式
输入结果
判断结果对错?
否
是
继续下一题?
是
否
退出
七. 实验源代码
DATAS SEGMENT
msg db '*******************************',0dh,0ah,'$'
addp db '* 1. Addition to practice *: ',0dh,0ah,'$'
subp db '* 2. Subtraction to practice *: ',0dh,0ah,'$'
sele db 'Input your chioce: ','$'
corr db 20h,20h,'Correct!',0dh,0ah,'$'
erro db 20h,20h,'Error!',0dh,0ah,'$'
rorq db 'Continue(R) or Exit(Q)?',0dh,0ah,'$'
exit db 0dh,0ah,' Press any key to quit...',0dh,0ah,'$'
sum dw 0
num1 dw 0
num2 dw 0
DATAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
again:
mov dx,offset msg
mov ah,09h
int 21h
mov dx,offset addp
mov ah,09h
int 21h
mov dx,offset subp
mov ah,09h
int 21h
mov dx,offset msg
mov ah,09h
int 21h
select:
call huan
mov dx,offset sele
mov ah,09h
int 21h
mov ah,1
int 21h
cmp al,31h
jz jiafa
cmp al,32h
call huan
jz jianfa
gono:
mov dx,offset rorq
mov ah,09h
int 21h
key:
mov ah,1
int 21h
cmp al,72h
jz select
cmp al,71h
jnz key
call huan
mov dx,offset exit
mov ah,09h
int 21h
mov ah,4ch
int 21h
jiafa:
call huan
call random1
mov sum,ax
call show
mov dl,'+'
mov ah,2
int 21h
call random2
add sum,ax
call show
jmp next
jianfa:
call random1
mov sum,ax
mov num1,ax
call random2
sbb sum,ax
mov num2,ax
cmp sum,0
jl jianfa
mov ax,num1
call show
mov dl,'-'
mov ah,2
int 21h
mov ax,num2
call show
jmp next
next:
mov dl,'='
mov ah,2
int 21h
call input
cmp bp,sum
jz done
mov dx,offset erro
mov ah,09h
int 21h
jmp next
done:
mov dx,offset corr
mov ah,9
int 21h
jmp gono
random1:
mov ah,2ch
int 21h
mov al,dh
mov ah,0
ret
random2:
mov ah,2ch
int 21h
mov al,dl
mov ah,0
ret
show:
mov ax,ax
aam
or ax,3030h
xchg ah,al
mov dx,ax
mov ah,2
int 21h
mov dl,dh
int 21h
ret
input:
mov bp,0
mov cx,3
get:
mov ah,0
int 16h
cmp al,0dh
jz ok
cmp al,'0'
jb get
cmp al,'9'
ja get
mov ah,0eh
int 10h
and ax,0fh
xchg bp,ax
mov bx,10
mul bx
add bp,ax
loop get
ok:
cmp cx,3
ret
huan:
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
ret
MOV AH,4CH
INT 21H
CODES ENDS
END START
八. 实验结果
图1 菜单
图2 加法练习运算
图3 减法练习运算
图4 运算错误和退出
九. 实验总结
加法练习程序设计可能较于平时的一些实验相对简单些,但这次的课程设计是由自己构思和设计的,遇到麻烦的地方也要靠自己去解决,不像平时实验那样,大家完成的内容都一样能够探讨。所以考验自我学习能力和编程能力,对程序结构流程的设计能力,做出自己满意的程序。通过课程设计,我们将本学期所学的微机原理、汇编语言的知识重新温习和巩固,加深了我们对知识的理解,熟练了汇编语言的运用,提高了我们的编程与设计能力。
十.参考文献
1.《16/32位微机原理、汇编语言及接口技术(第2版)》---(北京电子工业出版社 2003)钱晓捷,陈涛 编著
2.《32位微型计算机原理与接口技术》---(北京清华大学出版社 2000)仇玉章等 编著
展开阅读全文