微机原理课设.doc_第1页
微机原理课设.doc_第2页
微机原理课设.doc_第3页
微机原理课设.doc_第4页
微机原理课设.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

目录1.课程设计的目的32.课程设计的内容31、设计要求32、设计题目33、详细设计说明及流程图44、源代码55.运行结果173.总结及心得体会19 一课程设计的目的本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完微型机原理及应用课程后进行的一次全面的综合练习。本课程设计的目的和任务:1. 巩固和加深学生对微机原理课程的基本知识的理解和掌握。2. 掌握汇编语言编程和程序调试的基本技能。3. 利用汇编语言进行基本程序设计。4. 掌握书写程序设计说明文档的能力。5. 提高运用汇编语言解决实际问题的能力。二.课程设计的内容1、设计要求1) 分析课程设计题目的要求2) 写出详细设计说明3) 编写程序代码,调试程序使其能正确运行4) 设计完成的软件要便于操作和使用5) 设计完成后提交课程设计报告2、设计题目打字游戏基本功能介绍:菜单主界面由“开始”“选择速度”“暂停”“结束”等项组成。进入程序后,按1-6键选择速度,再按回车键进入游戏。在游戏中,按空格键暂停游戏,再按则继续;按Esc键退出游戏。游戏结束后,出现提示界面,按回车键重新开始游戏,按Esc键退出游戏,进入主界面,再按esc则完全退出游戏。3设计说明及流程图开始流程图主界面选择游戏速度或退出判断输入的字符 不处理根据速度,游戏开始退出游戏未定义 esc清屏,并调整框架输入游戏字符输入字符判断 Esc空格正确字母?暂停 字母 是计数下一个字母结束?否返回或继续 是继续返回 4、源代码Init_game macro op1,op2,op3,op4,op5,op6 ;定义游戏宏指令,显示边框 mov cx,00h mov dh,op1 mov dl,op2 op6: mov ah,02h ;显示当前光标位置 mov bh,00h int 10h push cx mov ah,0ah ;显示在光标位置显示字符 mov al,op3 ;字符 mov bh,00h ;显示页 mov cx,01h ;字符重复次数 int 10h pop cx inc cx inc op4 cmp cx,op5 jne op6 endm clear_screen macro op1,op2,op3,op4 ;清屏宏定义 mov ah,06h ;屏幕初始化或上卷 mov al,00h ;整个窗口空白 mov bh,07h ;卷入行属性 mov ch,op1 ;左上角行号 mov cl,op2 ;左上角列号 mov dh,op3 ;右下角行号 mov dl,op4 ;右下角列号 int 10h mov ah,6 mov al,0 mov ch,0 mov cl,0 mov dh,24 mov dl,79 mov bh,7 int 10h mov ah,02h ;显示当前光标位置 mov bh,00h mov dh,00h mov dl,00h int 10h endm menu macro op1,op2,op3 ;菜单显示宏定义 mov ah,02h ;置光标位置 mov bh,00h mov dh,op1 mov dl,op2 int 10h mov ah,09h ;显示当前光标位置字符串 lea dx,op3 int 21h endm data segment xuzhenzhen db Made by XZZ$ no db NO.:09750129$ meg db Let us have a game!Come on!$ meg1 db *Select Menu*$ meg2 db Please select the game speed,ESC to quit.$ meg3 db 1.Very slow Too easy,speed up!$ meg4 db 2.Slow Everybody can deal.$ meg5 db 3.Nomal I think you can deal!$ meg6 db 4.Fast A challenge.Pay attention!$ meg7 db 5.Very Fast Too hard,Have a try?$ meg8 db 6.Fastest Are you crazy?$ meg9 db *Select the number among 1-6 and press ENTER to start!*$ meg10 db Game Speed Select:$ hotkey db When you are playing games:$ hotkey1 db ESC to return to menu$ hotkey2 db SPACE to pause the game$ hotkey3 db Press any key to play games.$ hotkey4 db Are you ready?$ failmeg db Letters arrived the bottom, You are lost ! :($ failmeg0 db Press ENTER to go on.$ failmeg1 db Game over!$ failmeg2 db Press ENTER to return menu and press ESC to exit!$ failmeg3 db Bye-Bye!Thank for your playing!$ failmeg4 db Press any key to quit.$ speed dw 00d,1200d,800d,600d,400d,200d,100d ;选择速度letters db abcdefghijklmnopqrstuvwxyz db abcdefghijklmnopqrstuvwxyz db abcdefghijklmnopqrstuvwxyz letters_bak db abcdefghijklmnopqrstuvwxyz db abcdefghijklmnopqrstuvwxyz db abcdefghijklmnopqrstuvwxyz letter_counter db 0 life_flag db 78 dup(0) position_flag db 78 dup(0) ;当前的位置标志present_position db 1 ;当前的位置data ends stack segment para stack stack ;定义一个堆栈 db 64 dup(0) stack ends code segment ;主代码main proc far assume cs:code,ds:data,ss:stack start: mov ax,data mov ds,ax mov letter_counter,00h mov present_position,1 ;显示字母 lea si,position_flag mov ah,00h mov cx,00hinit_postion_flag: mov si,ah inc si inc cx cmp cx,78d jne init_postion_flag lea di,letters lea si,letters_bak mov cx,00h init_letters: mov ah,si ;初始化字母 mov di,ah inc si inc di inc cx cmp cx,78d jne init_letters mov ah,00h lea si,life_flag mov cx,00h init_life_flag: mov si,ah inc si inc cx cmp cx,78d jne init_life_flag mov cx,00h mov ah,01h or ch,00010000b int 10h clear_screen 00d,00d,24d,79d Init_game 00d,00d,0dh,dl,80d,nextsign1 ;定义上游戏框架 Init_game 24d,00d,0dh,dl,80d,nextsign2 ;定义下游戏框架 Init_game 00d,00d,0ah,dh,25d,nextsign3 ;定义左游戏框架 Init_game 00d,79d,0ah,dh,25d,nextsign4 ;定义右游戏框架 menu 01d,15d,meg ;菜单信息的宏展开 menu 01h,61d,xuzhenzhen menu 03d,20d,meg1 menu 03d,62d,no menu 05d,15d,meg2 menu 07d,15d,meg3 menu 09d,15d,meg4 menu 11d,15d,meg5 menu 13d,15d,meg6 menu 15d,15d,meg7 menu 17d,15d,meg8 menu 19d,15d,meg9 menu 22d,15d,meg10 input: mov ah,02h ;设置光标位置 mov bh,00h mov dh,22d ;将光标停留在第22行 mov dl,33d ;将光标停留在第33列 int 10h mov ah,0ah mov al, mov bh,00h mov cx,01h int 10h mov ah,01h int 21h retry: cmp al,1 ;判断选择速度 je speed1 cmp al,2 je speed2 ;判断选择速度 cmp al,3 je speed3 cmp al,4 ;判断选择速度 je speed4 cmp al,5 je speed5 cmp al,6 je speed6 cmp al,1bh je to_over0 jmp input to_over0: jmp over speed1: mov ah,01h ;跳到速度1 int 21h cmp al,0dh jne otherkey mov ax,speed+2 mov speed,ax jmp begin speed2: mov ah,01h ;跳到速度2 int 21h cmp al,0dh jne otherkey mov ax,speed+4 mov speed,ax jmp begin speed3: mov ah,01h ;跳到速度3 int 21h cmp al,0dh jne otherkey mov ax,speed+6 mov speed,ax jmp begin speed4: mov ah,01h ;跳到速度4 int 21h cmp al,0dh jne otherkey mov ax,speed+8 mov speed,ax jmp begin speed5: mov ah,01h ;跳到速度5 int 21h cmp al,0dh jne otherkey mov ax,speed+10 mov speed,ax jmp begin speed6: mov ah,01h ;跳到速度6 int 21h cmp al,0dh jne otherkey mov ax,speed+12 mov speed,ax jmp begin otherkey: push ax ;处理重复输入的代码段 mov ah,02h mov bh,00h mov dh,22d mov dl,34d int 10h mov ah,0ah mov al, mov bh,00h mov cx,01h int 10h mov ah,02h ;设置光标的位置 mov bh,00h mov dh,22d mov dl,33d int 10h pop ax mov dx,ax mov ah,02h int 21h jmp retry begin: clear_screen 01d,01d,23d,78d ;清屏宏调用 menu 08d,20d,hotkey ;显示游戏提示 menu 10d,20d,hotkey1 menu 12d,20d,hotkey2 menu 14d,20d,hotkey4 ;显示游戏提示 menu 16d,20d,hotkey3 mov ah,07h int 21h clear_screen 01d,01d,23d,78d ;清屏宏调用 Init_game 23d,01d,03h,dl,78d,nextsign5 ;字幕下落时的底边界图形 mov ah,02h ;光标初始化 mov bh,00h mov dh,01h mov dl,01h int 10h mov cx,00h lea si,letters nextletter: ;初始化屏幕上方的字母 mov ah,02h mov dl,si ;输出si里面的内容 int 21h inc si inc cx cmp cx,78d je nextcycle jmp nextletter from_front: sub present_position,78d ;相关循环的算法 jmp gobackto_si find_zero: cmp letter_counter,78d je recycle cmp present_position,78d je from_one mov ah,00h nextsi: add present_position,01h inc si cmp si,ah je gobackto_di cmp present_position,78d je from_one jmp nextsi from_one: mov present_position,01h jmp gobackto_si recycle: mov letter_counter,00h mov present_position,01d lea si,position_flag mov cx,00h mov ah,00h clearsi: mov si,ah inc cx cmp cx,78d je nextcycle inc si jmp clearsi nextcycle: ;改变字母出现的位置 lea di,letters lea si,position_flag add present_position,31d cmp present_position,78 ;无符号数比较 ja from_front ;当present_position大于78时转到fron_front gobackto_si: add si,word ptr present_position dec si mov ah,si cmp ah,01h je find_zero gobackto_di: mov ah,01h mov si,ah add di,word ptr present_position dec di mov dl,present_position mov ah,02h ;字母下落的代码段部分 mov bh,00h mov dh,01h int 10h mov cx,00h nextrow: push cx ; 新的一行 mov cx,00h out_cycle: push cx ; 延迟 mov cx,00h in_cycle: add cx,01h cmp cx,50000d jne in_cycle push dx mov ah,06h ;从键盘输入字符到控制台 mov dl,0ffh int 21h pop dx jz pass ;如果键盘缓冲区部分为空,则跳转 cmp al,1bh ;如果键入ESC,则返回主菜单 je to_start1 cmp al, ;如果键入SPACE,则游戏暂停 je pause cmp al,di ;输入字母正确!跳转! je disappear pass: pop cx inc cx cmp cx,speed je print jmp out_cycle pause: push dx ;暂停处理 mov ah,06h mov dl,0ffh int 21h pop dx cmp al, jne pause jmp pass to_start1: jmp start ;返回主菜单 print: mov ah,0ah mov al, mov bh,00h mov cx,01h int 10h inc dh mov ah,02h mov bh,00h int 10h mov ah,0ah mov al,di mov bh,00h mov cx,01h int 10h pop cx inc cx cmp cx,21d je print_next_letter jmp nextrow ;下一行 disappear: ;击中字母后的相关处理 pop cx mov ah,0ah mov al, mov bh,00h mov cx,01h int 10h jmp hit print_next_letter: ; 处理原位置的空缺 lea si,life_flag

温馨提示

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

评论

0/150

提交评论