微机设计.docx
- 文档编号:6235710
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:16
- 大小:718.51KB
微机设计.docx
《微机设计.docx》由会员分享,可在线阅读,更多相关《微机设计.docx(16页珍藏版)》请在冰豆网上搜索。
微机设计
课程设计
课程名称微机原理课程设计
题目名称学生成绩的统计
学生学院应用数学学院
专业班级12信息安全1班
学号
学生姓名
指导教师刘科峰
2014年12月19日
一、课程设计要求
输入十个学生某门课的成绩,统计低于60分,60~69分,70~79分,80~89分,90~99分和100分的人数,并输出统计结果。
要求学生成绩的输入和统计结果的输出使用图形界面。
二、设计结果界面与操作演示
其中有一个超过100分统计前和后两张图片
三、设计思路与制作过程
1、设计思路
用VisualC++6.0建立MFC工程设计出程序界面,得到Dialog..rc文件,和resource.h
然后将相关数据粘帖到老师给的rc文件中,然后根据界面修改Dialog.asm文件,然后用masm32去生成exe文件
2、详细制作过程
(1)界面设计
在VisualC++6.0里建立MFC工程
保存后,去文件夹找到Dialog..rc文件,和resource.h
从resource.h将#define的所有考出来如图
从Dialog..rc将IDD_....到结尾考出来,如图部分
打开老师的例子文件
选定部分修改为如图,(只要控件部分,图标和原来的窗口不要)
继续将选定部分用之前RC文件考出来的替换掉
然后打开老师给的Dialog.asm文件
将自己写好的程序文件复制到如下选定部分
最后我修改了一下图标,这个只是替换比较简单就不详细说了。
最后文件里面有如下东西。
然后将文件夹放到D盘根目录下,我的程序是装在c盘,所以var文件不用修改
最后生成如下文件,第二个就是目标文件exe点击打开
四、程序代码
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;使用nmake或下列命令进行编译和链接:
;ml/c/coffDialog.asm
;rcDialog.rc
;Link/subsystem:
windowsDialog.objDialog.res
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.modelflat,stdcall
optioncasemap:
none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;Include文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
includewindows.inc
includeuser32.inc
includelibuser32.lib
includekernel32.inc
includelibkernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;Equ等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAINequ3000h;图标
DLG_MAINequ11
IDC_EDIT1equ1000
IDC_EDIT2equ1001
IDC_EDIT3equ1002
IDC_EDIT4equ1003
IDC_EDIT5equ1004
IDC_EDIT6equ1005
IDC_EDIT7equ1006
IDC_EDIT8equ1007
IDC_EDIT9equ1009
IDC_EDIT10equ1010
IDC_EDIT11equ1011
IDC_EDIT12equ1012
IDC_EDIT13equ1013
IDC_EDIT14equ1017
IDC_EDIT15equ1018
IDC_EDIT16equ1019
IDC_BUTTON1equ1014
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?
hInstancedd?
scoredword0,0,0,0,0,0,0,0,0,0
faildword0
sixtydword0
seventydword0
eightydword0
ninetydword0
hundreddword0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcDlgMainprocusesebxediesi,hWnd,wMsg,wParam,lParam
local@szBuffer[2]:
byte
moveax,wMsg
.ifeax==WM_CLOSE
invokeEndDialog,hWnd,NULL
.elseifeax==WM_INITDIALOG
invokeLoadIcon,hInstance,ICO_MAIN
invokeSendMessage,hWnd,WM_SETICON,ICON_BIG,eax
.elseifeax==WM_COMMAND
moveax,wParam
.ifax==IDCANCEL
invokeEndDialog,hWnd,NULL
.elseifax==IDC_BUTTON1
invokeSetDlgItemInt,hWnd,IDC_EDIT1,0,TRUE
invokeSetDlgItemInt,hWnd,IDC_EDIT2,0,TRUE
invokeSetDlgItemInt,hWnd,IDC_EDIT3,0,TRUE
invokeSetDlgItemInt,hWnd,IDC_EDIT4,0,TRUE
invokeSetDlgItemInt,hWnd,IDC_EDIT5,0,TRUE
invokeSetDlgItemInt,hWnd,IDC_EDIT6,0,TRUE
invokeSetDlgItemInt,hWnd,IDC_EDIT7,0,TRUE
invokeSetDlgItemInt,hWnd,IDC_EDIT8,0,TRUE
invokeSetDlgItemInt,hWnd,IDC_EDIT9,0,TRUE
invokeSetDlgItemInt,hWnd,IDC_EDIT10,0,TRUE
invokeSetDlgItemInt,hWnd,IDC_EDIT11,0,TRUE
invokeSetDlgItemInt,hWnd,IDC_EDIT12,0,TRUE
invokeSetDlgItemInt,hWnd,IDC_EDIT13,0,TRUE
invokeSetDlgItemInt,hWnd,IDC_EDIT14,0,TRUE
invokeSetDlgItemInt,hWnd,IDC_EDIT15,0,TRUE
invokeSetDlgItemInt,hWnd,IDC_EDIT16,0,TRUE
.elseifax==IDOK
movebx,0
movfail,0
movsixty,0
movseventy,0
moveighty,0
movninety,0
movhundred,0
invokeGetDlgItemInt,hWnd,IDC_EDIT1,addr@szBuffer,TRUE
movscore[ebx*(typescore)],eax
.ifscore[ebx*(typescore)]<=100
incebx
.elseif
invokeSetDlgItemInt,hWnd,IDC_EDIT1,0,TRUE
.endif
invokeGetDlgItemInt,hWnd,IDC_EDIT2,addr@szBuffer,TRUE
movscore[ebx*(typescore)],eax
.ifscore[ebx*(typescore)]<=100
incebx
.elseif
invokeSetDlgItemInt,hWnd,IDC_EDIT2,0,TRUE
.endif
invokeGetDlgItemInt,hWnd,IDC_EDIT3,addr@szBuffer,TRUE
movscore[ebx*(typescore)],eax
.ifscore[ebx*(typescore)]<=100
incebx
.elseif
invokeSetDlgItemInt,hWnd,IDC_EDIT3,0,TRUE
.endif
invokeGetDlgItemInt,hWnd,IDC_EDIT4,addr@szBuffer,TRUE
movscore[ebx*(typescore)],eax
.ifscore[ebx*(typescore)]<=100
incebx
.elseif
invokeSetDlgItemInt,hWnd,IDC_EDIT4,0,TRUE
.endif
invokeGetDlgItemInt,hWnd,IDC_EDIT5,addr@szBuffer,TRUE
movscore[ebx*(typescore)],eax
.ifscore[ebx*(typescore)]<=100
incebx
.elseif
invokeSetDlgItemInt,hWnd,IDC_EDIT5,0,TRUE
.endif
invokeGetDlgItemInt,hWnd,IDC_EDIT6,addr@szBuffer,TRUE
movscore[ebx*(typescore)],eax
.ifscore[ebx*(typescore)]<=100
incebx
.elseif
invokeSetDlgItemInt,hWnd,IDC_EDIT6,0,TRUE
.endif
invokeGetDlgItemInt,hWnd,IDC_EDIT7,addr@szBuffer,TRUE
movscore[ebx*(typescore)],eax
.ifscore[ebx*(typescore)]<=100
incebx
.elseif
invokeSetDlgItemInt,hWnd,IDC_EDIT7,0,TRUE
.endif
invokeGetDlgItemInt,hWnd,IDC_EDIT8,addr@szBuffer,TRUE
movscore[ebx*(typescore)],eax
.ifscore[ebx*(typescore)]<=100
incebx
.elseif
invokeSetDlgItemInt,hWnd,IDC_EDIT8,0,TRUE
.endif
invokeGetDlgItemInt,hWnd,IDC_EDIT9,addr@szBuffer,TRUE
movscore[ebx*(typescore)],eax
.ifscore[ebx*(typescore)]<=100
incebx
.elseif
invokeSetDlgItemInt,hWnd,IDC_EDIT9,0,TRUE
.endif
invokeGetDlgItemInt,hWnd,IDC_EDIT10,addr@szBuffer,TRUE
movscore[ebx*(typescore)],eax
.ifscore[ebx*(typescore)]<=100
incebx
.elseif
invokeSetDlgItemInt,hWnd,IDC_EDIT10,0,TRUE
.endif
movecx,lengthofscore
moveax,0
movebx,eax
again:
.ifscore[ebx*(typescore)]<60
inc[fail]
.elseifscore[ebx*(typescore)]<70
inc[sixty]
.elseifscore[ebx*(typescore)]<80
inc[seventy]
.elseifscore[ebx*(typescore)]<90
inc[eighty]
.elseifscore[ebx*(typescore)]<100
inc[ninety]
.elseifscore[ebx*(typescore)]==100
inc[hundred]
.endif
incebx
loopagain
movesi,[fail]
invokeSetDlgItemInt,hWnd,IDC_EDIT11,esi,TRUE
movesi,[sixty]
invokeSetDlgItemInt,hWnd,IDC_EDIT12,esi,TRUE
movesi,[seventy]
invokeSetDlgItemInt,hWnd,IDC_EDIT13,esi,TRUE
movesi,[eighty]
invokeSetDlgItemInt,hWnd,IDC_EDIT14,esi,TRUE
movesi,[ninety]
invokeSetDlgItemInt,hWnd,IDC_EDIT15,esi,TRUE
movesi,[hundred]
invokeSetDlgItemInt,hWnd,IDC_EDIT16,esi,TRUE
movedi,eax
.endif
.else
moveax,FALSE
ret
.endif
moveax,TRUE
ret
_ProcDlgMainendp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
invokeGetModuleHandle,NULL
movhInstance,eax
invokeDialogBoxParam,hInstance,DLG_MAIN,NULL,offset_ProcDlgMain,NULL
invokeExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
endstart
五、程序的优点与不足
优点:
1、本程序在“输入成绩”区域中,只可输入数字,对于字母、汉字等其他符号是不会识别的。
2、本程序在“统计结果”区域中,设置了不可编辑的文本框,这样统计结果不可以人为的修改
3对于超过100分的当作错误处理,变为0分
不足:
1、本程序在“输入成绩”区域中,无法输入带小数点的分数。
2在清除后再次输入有时如果没有输入完就会出错
六、程序设计过程中的改进
1发现在设计第一次完成后发现超过一百的分数无法统计,而且一开始没有清除功能,所以在原来的代码上加入了判断和清除功能,使得100分以上的都视为错误分数,当0分处理。
添加了如下代码,这是删除代码,将屏幕前全部回0。
.elseifax==IDC_BUTTON1
invokeSetDlgItemInt,hWnd,IDC_EDIT1,0,TRUE
invokeSetDlgItemInt,hWnd,IDC_EDIT2,0,TRUE
invokeSetDlgItemInt,hWnd,IDC_EDIT3,0,TRUE
invokeSetDlgItemInt,hWnd,IDC_EDIT4,0,TRUE
invokeSetDlgItemInt,hWnd,IDC_EDIT5,0,TRUE
invokeSetDlgItemInt,hWnd,IDC_EDIT6,0,TRUE
invokeSetDlgItemInt,hWnd,IDC_EDIT7,0,TRUE
invokeSetDlgItemInt,hWnd,IDC_EDIT8,0,TRUE
invokeSetDlgItemInt,hWnd,IDC_EDIT9,0,TRUE
invokeSetDlgItemInt,hWnd,IDC_EDIT10,0,TRUE
invokeSetDlgItemInt,hWnd,IDC_EDIT11,0,TRUE
invokeSetDlgItemInt,hWnd,IDC_EDIT12,0,TRUE
invokeSetDlgItemInt,hWnd,IDC_EDIT13,0,TRUE
invokeSetDlgItemInt,hWnd,IDC_EDIT14,0,TRUE
invokeSetDlgItemInt,hWnd,IDC_EDIT15,0,TRUE
invokeSetDlgItemInt,hWnd,IDC_EDIT16,0,TRUE
修改前代码:
invokeGetDlgItemInt,hWnd,IDC_EDIT1,addr@szBuffer,TRUE
movscore[ebx*(typescore)],eax
incebx
修改后代码:
增加了对于高于100分的进行处理
invokeGetDlgItemInt,hWnd,IDC_EDIT1,addr@szBuffer,TRUE
movscore[ebx*(typescore)],eax
.ifscore[ebx*(typescore)]<=100
incebx
.elseif
invokeSetDlgItemInt,hWnd,IDC_EDIT1,0,TRUE
.endif
七、总结与体会
在这次的课程设计中,刚开始的时候我真的不知道怎么做,因为对汇编不是很熟悉,加上天生对汇编不太感兴趣。
但是我坚持下去了,一直都去看教程和别人写的一些代码,通过学习人家的东西,我慢慢的觉得汇编其实并不难,只是我们不太习惯。
然后我就开始看老师给的例子,通过观察和修改文件里面的数据和代码,一步一步将程序往往需要的方向改,最终发现其实MFC作的界面只有rc代码才是有用的,其他文件其实可以不用,通过修改老师的rc,结合MFC可以比较简单的将界面完成的比较美观,然后通过查询知道了汇编程序的主要结构和功能代码,然后一步一步自己慢慢的将代码完成,当然,也参考了一部分别人的代码,但是学习就是这样的,通过学习和借鉴可以快速的学到很多东西。
最终完成了这个作业希望老师您能满意。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 设计