微机原理课程设计Word文档格式.docx
《微机原理课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计Word文档格式.docx(18页珍藏版)》请在冰点文库上搜索。
使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。
汇编程序把汇编语言翻译成机器语言的过程称为汇编。
作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。
高级的汇编器如MASM,TASM等等为我们写汇编程序提供了很多类似于高级语言的特征,比如结构化、抽象等。
在这样的环境中编写的汇编程序,有很大一部分是面向汇编器的伪指令,已经类同于高级语言。
现在的汇编环境已经如此高级,即使全部用汇编语言来编写windows的应用程序也是可行的,但这不是汇编语言的长处。
汇编语言的长处在于编写高效且需要对机器硬件精确控制的程序。
1.2汇编语言特点
1.面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。
2.保持了机器语言的优点,具有直接和简捷的特点。
3.可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。
4.目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。
5.经常与高级语言配合使用,应用十分广泛。
2设计原理分析
2.1随机数的产生
真正意义上的随机数(或者随机事件)在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结果是不可预测的,是不可见的。
而计算机中的随机函数是按照一定算法模拟产生的,其结果是确定的,是可见的。
我们可以这样认为这个可预见的结果其出现的概率是100%。
所以用计算机随机函数所产生的“随机数”并不随机,是伪随机数。
此程序的关键问题是如何产生一个1~100之间的随机整数(本程序中所涉及的数均指整数,以下不再赘述)。
我们可以调用BIOS的功能调用1AH号中断(MOVAH,0INT1AH)或者调用DOS系统功能调用21H号中断(MOVAH,2CHINT21H)取系统时间,DH:
DL=秒:
1/100秒。
将DX中的内容赋给AX,并将AX的高六位清零,然后AX除以100,则会产生0~99之间的余数。
2.2子模块
本程序共分为六个模块:
MAIN-------程序的入口点,程序运行后在DOS屏幕上显示主菜单,给出相关的操作提示,并调用RAN、GUESS、ENTER等子程序。
RAN-------调用相关的中断,取系统时间,产生一个0~99之间的随机数。
GUESS------本程序的重要模块,调用INPUT、PRINT、ENTER等子程序。
INPUT------用于玩家输入其所猜之数,并给出相关的输入提示。
PRINT------用于游戏结束时输入系统所产生的随机数。
ENTER-------用于回车换行
2.3设计流程图
3子程序分析
3.1RAN的主要算法
RANPROCNEAR
PUSHAX
PUSHDX
MOVAH,0;
读时钟计数器值
INT1AH
MOVAX,DX
ANDAH,3;
将高6位清零
MOVDL,100;
除以100,产生0~99余数,余数在AH中
DIVDL
MOVAL,AH
MOVAH,0
MOVRANDOM,AX;
将随机数保存于RANDOM中
MOVAH,09H
LEADX,MESS2
INT21H
CALLNEARPTRENTER
POPDX
POPAX
RET
RANENDP
3.2INPUT的主要算法
INPUTPROCNEAR
MOVBX,0
INL1:
MOVAH,01H
CMPAL,0DH
JZINEXIT
CMPAL,30H
JAEINL2
CMPAL,08H
JEINL1
CALLNEARPTRENTER
MOVAH,09H
LEADX,MESS9
INL2:
CMPAL,39H
JBEINL3
JMPINL1
INL3:
ANDAL,0FH
XCHGBX,AX
MOVCX,10
MULCX
ADDBX,AX
INEXIT:
MOVINNUM,BX
INPUTENDP
3.3ENTER的主要算法
ENTERPROCNEAR
PUSHAX
PUSHDX
MOVAH,02H
MOVDL,0DH
MOVDL,0AH
ENTERENDP
4源程序
4.1程序代码
DATASEGMENT
RANDOMDW?
;
用于保存产生的随机数
INNUMDW?
;
用于保存玩家输入的数
JISHUDW0;
用于保存玩家猜数的次数
MENUDW0
DB0DH,0AH,"
*----------------------------------------------------*"
DB0DH,0AH,"
**"
DB0DH,0AH,"
*MAINMENU*"
*S.STARTTHEGAME*"
*E.EXITTHEGAME*"
$"
TITLE1DB0DH,0AH,"
NUMBER-GUESSINGGAME"
0DH,0AH,"
MESS1DB0DH,0AH,"
NUMBER-GUESSINGGAMEBEGINS.$"
MESS2DB0DH,0AH,"
THERANDOMNUMBERHASBEENGENERATED.$"
MESS3DB0DH,0AH,"
PLEASEINPUTTHENUMBERYOUGUESS(DECIMAL,BETWEEM0AND99):
MESS4DB0DH,0AH,"
ITISBIGGER,PLEASEREGUESS:
$:
"
MESS5DB0DH,0AH,"
ITISSMALLER,PLEASEREGUESS:
MESS6DB0DH,0AH,"
CONGRATULATIONS,YOUGUESSED!
MESS7DB0DH,0AH,"
THERANDOMNUMBERIS$"
MESS8DB0DH,0AH,"
PLEASEINPUTYOURCHOICE:
DATAENDS
CODESEGMENT
MAINPROCFAR
ASSUMECS:
CODE,DS:
DATA
BEGIN:
PUSHDS
SUBAX,AX
MOVAX,DATA
MOVDS,AX
LEADX,TITLE1
INT21H
MOVDX,OFFSETMENU
LEADX,MESS8
MOVAH,01H
ML1:
CMPAL,'
S'
JEML2
ML2:
MOVJISHU,0
LEADX,MESS1
CALLNEARPTRRAN
CALLNEARPTRGUESS
ML3:
CMPAL,'
E'
JEEXIT
ML4:
MOVAH,09H
JMPML1
EXIT:
CALLNEARPTRENTER
MOVAH,4CH
MAINENDP
RANPROCNEAR
MOVAH,0;
INT1AH
MOVAX,DX;
ANDAH,3
GUESSPROCNEAR
LEADX,MESS3
ADDJISHU,1
GL:
CALLNEARPTRINPUT
MOVAX,INNUM
MOVBX,RANDOM
CMPAX,BX
JAGL1
JBGL2
LEADX,MESS6
LEADX,MESS7
CALLNEARPTRPRINT
JMPGEXIT1
GL1:
LEADX,MESS4
JMPGL
GL2:
CALLNEARPTRENTER
LEADX,MESS5
GEXIT1:
GEXIT2:
GUESSENDP
PRINTPROCNEAR
MOVAX,RANDOM
MOVBL,100
DIVBL
MOVBL,AH
CMPAL,0
JEPL1
MOVDL,AL
ORDL,30H
PL1:
MOVAL,BL
MOVBL,10
JEPL2
PL2:
MOVDL,BL
PRINTENDP
CODEENDS
ENDBEGIN
图4.1利用16位编译系统调试程序
图4.2游戏开始界面
图4.3摁S后开始游戏
图4.4猜数字正确
5心得体会
参考文献
[1]
姚燕南.微型计算机原理.西安:
西安电子科技大学出版社,2002
[2]
艾德才.微型接口技术编程.北京:
清华大学出版社,2002
[3]
冯博琴.微型计算机原理与接口技术.北京:
清华大学出版社,2000
[4]薛钧毅.微型计算机原理及应用.西安:
西安交通大学出版社,2005
[5]陈希林.汇编语言程序设计.北京:
高等教育出版社,2004