微机原理第七个微机原理打字游戏课程设计程序带注释
打字游戏

湖南农业大学东方科技学院课程设计报告课程名称:微机原理与接口技术设计题目:打字游戏程序设计学生姓名:罗英杰学号: 2年级专业:2008级计算机科学与技术班级: 3 班指导老师:王兴波学院:东方科技学院湖南·长沙提交日期:2009年12月一、任务与要求1. 开始界面的提示信息:进入游戏,退出2. 打字游戏:字母从屏幕上方下落,若用户在字母下落过程中输入正确字母,字母消失,输入不正确,字母继续下落3. 空格键退出游戏二、分析与规划1、结构分析图,如下2、布局分析:首先,出现菜单主界面起到提示作用。
然后进入游戏,接着完成游戏的退出。
三、实现过程1、出现菜单主界面:ZK db "WELCOME TO PLAY$"no db "shejiren: Luo Yingjie 2009/12/09 $"meg db "press Enter key to continue.......$"meg1 db "when a letter is dropping,please hit it!$"meg2 db "press space key to pause!$"meg3 db "press ESC key to return main interface!$"meg4 db "press letter 'E' to exit!$"上面的代码菜单主界面的内容clear_screen 00d,00d,24d,79dInit_game 00d,00d,0ah,dl,80d,nextsign1 Init_game 24d,00d,0ah,dl,80d,nextsign2Init_game 00d,00d,0ah,dh,25d,nextsign3Init_game 00d,79d,0ah,dh,25d,nextsign4menu 05d,15d,ZK ;菜单信息的宏调用menu 07h,15d,nomenu 09d,15d,megmenu 11d,15d,meg1menu 13d,15d,meg2menu 15d,15d,meg3menu 17d,15d,meg4clear_screen 01d,01d,23d,78d ;清屏宏调用clear_screen 01d,01d,23d,78dInit_game 23d,01d,01h,dl,78d,nextsign5mov ah,02hmov bh,00hmov dh,01hmov dl,01hint 10hmov cx,00hlea si,letterscmp al,1bh ;如果键入ESC,则返回主菜单to_start1: ;返回主菜单jmp start上面代码是解决怎样使主界面输出的2、游戏界面的实现:speed dw 600dletters db "jwmilzoeucgpravskntxhdyqfb"db "iytpkwnxlsvxrmofzhgaebudjq"db "nwimzoexrphysfqtvdcgljukda"letters_bak db "jwmilzoeucgpravskntxhdyqfb" db "iytpkwnxlsvxrmofzhgaebudjq" db "nwimzoexrphysfqtvdcgljukda" letter_counter db 0life_flag db 78 dup(0)position_flag db 78 dup(0)present_position db 1以上代码是字母的排列及出现的顺序init_postion_flag:mov [si],ahinc siinc cxcmp cx,78djne init_postion_flaglea di,letterslea si,letters_bakmov cx,00hinit_letters:mov ah,[si]mov [di],ahinc siinc diinc cxcmp cx,78djne init_lettersmov ah,00hlea si,life_flagmov cx,00hinit_life_flag:mov [si],ahinc siinc cxcmp cx,78djne init_life_flagmov cx,00hmov ah,01hor ch,00010000bint 10hput: mov ah,02h ;设置光标位置mov bh,00hmov dh,22dmov dl,33dint 10hmov ah,01h ;从键盘输入任意字符 int 21hcmp al,0dhje speed3cmp al,45hje exitexit: mov ah,4chint 21hspeed3: mov ax,speed+12mov speed,axjmp beginnextletter:mov ah,02h ;显示字母 mov dl,[si]int 21hinc siinc cxcmp cx,78dje nextcyclejmp nextletterfrom_front:sub present_position,78djmp gobackto_sifind_zero:cmp letter_counter,78dje recyclecmp present_position,78dje from_onemov ah,00hnextsi: add present_position,01hinc sicmp [si],ahje gobackto_dicmp present_position,78dje from_onejmp nextsifrom_one:mov present_position,01hjmp gobackto_sirecycle:mov letter_counter,00hmov present_position,01dlea si,position_flagmov cx,00hmov ah,00hclearsi: mov [si],ahinc cxcmp cx,78dje nextcycleinc sijmp clearsinextcycle:lea di,letterslea si,position_flagadd present_position,31dcmp present_position,78ja from_frontgobackto_si:add si,word ptr present_position dec simov ah,[si]cmp ah,01hje find_zerogobackto_di:mov ah,01hmov [si],ahadd di,word ptr present_positiondec dimov dl,present_positionmov ah,02hmov bh,00hmov dh,01hint 10hmov cx,00hnextrow: push cxmov cx,00hout_cycle: ; 延迟push cxmov cx,00hin_cycle:add cx,01hcmp cx,1000jne in_cyclepush dxmov ah,06h ;从键盘输入字符mov dl,0ffhint 21hpop dxjz passcmp al,[di] ;输入字母正确!则字母消失 je disappearpass: pop cxinc cxcmp cx,speedje printjmp out_cyclepause: push dx ;暂停处理mov ah,06hmov dl,0ffhint 21hpop dxcmp al," "jne pausejmp passto_start1: ;返回主菜单jmp startprint:mov ah,0ah ;在当前光标位置写空格 mov al," "mov bh,00hmov cx,01hint 10hinc dhmov ah,02h ;改变光标位置mov bh,00hint 10hmov ah,0ah ;在当前光标位置写字母 mov al,[di]mov bh,00hmov cx,01hint 10hpop cxinc cxcmp cx,21dje print_next_letterjmp nextrow ;下一行disappear: ;击中字母后输出空格 pop cxpop cxmov ah,0ahmov al," "mov bh,00hmov cx,01hint 10hjmp hitprint_next_letter:lea si,life_flagadd si,word ptr present_position dec simov ah,0ahmov al," "mov bh,00hmov cx,01hint 10hinc dhmov ah,02hmov bh,00hint 10hmov ah,0ahmov al," "mov bh,00hmov cx,01hint 10hmov ah,1mov [si],ahmov bh,00hmov dh,01hmov dl,present_positionint 10hmov al,[di] ; 出现下一个新字母的数法 add al,7cmp al,7ahja convey_lettermov ah,0ahmov bh,00hmov cx,01hint 10hmov [di],aladd letter_counter,01hjmp nextcycleconvey_letter:sub al,7ahadd al,61hmov ah,0ahmov bh,00hmov cx,01hint 10hmov [di],aladd letter_counter,01hjmp nextcycleclear_screen 01,01,23,78mov ah,02hmov bh,00hmov dh,11dint 10hinc dhinc dhmov ah,02hmov bh,00hint 10hnotkey:mov ah,07hint 21hcmp al,0dhje to_startcmp al,1bhje overjmp notkeyto_start:clear_screen 00,00,24,79jmp startover: clear_screen 01,01,23,78 mov ah,02hmov bh,00hmov dh,11dmov dl,15hint 10hmov ah,02hmov bh,00hmov dh,13dmov dl,15hint 10hmov ah,07hint 21hmov ah,07hint 21hclear_screen 00,00,24,79 mov ax,4c00hint 21h以上代码是实现游戏的所有代码四、实现的效果1、主界面实现的效果:2、游戏实现的效果:五、结束语在这次课程设计中,通过做打字游戏程序的设计,熟练掌握了编写汇编语言源程序的基本方法和框架;并能熟练编写顺序结果、分支结构和循环结构的汇编程序,而且还掌握了子程序的编写和使用的方法。
微机原理课程设计-打字游戏

;;窗口初始化宏定义;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Init_w macro w_op1,w_op2,w_op3,w_op4,w_op5,w_op6,w_op7 mov cx,00hmov dh,w_op1mov dl,w_op2w_op6:mov ah,02hmov bh,00hint 10hpush cxmov ah,09hmov al,w_op3mov bh,00hmov bl,w_op7mov cx,01hint 10hpop cxinc cxinc w_op4cmp cx,w_op5jne w_op6endm;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;菜单初始化宏定义;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; menu macro m_op1,m_op2,m_op3mov ah,02hmov bh,00hmov dh,m_op1mov dl,m_op2int 10hmov ah,09hlea dx,m_op3int 21hendm ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;draw_text macro t_op1,t_op2,t_op3mov ax,datamov es,axmov bp,offset t_op3mov dh,t_op1mov dl,t_op2mov ah,02hint 10hmov cx,18mov al,00hmov bh,00hmov bl,04h ;框架颜色mov ah,13hint 10hendm ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; time_ch macro c_op1,c_op2lea di,c_op1lea si,c_op2cldmov cx,8rep movsbendm;;;;;;;;;;show_time macro s_op1,s_op2,s_op3,s_op4MOV dh,s_op1mov dl,s_op2MOV BP,OFFSET s_op3MOV CX,s_op4MOV BX,004EHMOV AX,1301HINT 10Hendmdata segmentwel1 db'This is a simple asm word game!$'wel2 db'Edited by wuhanligongdaxue@whut.dq0604$'wel3 db'When a letter is dropping,please hit it!$' wel4 db'Press space to pause$'wel5 db'Press ESC to return back main interface$'wel6 db'Press letter E to exit!$'wel7 db'Enter your name and press enter to start this game!$' wel8 db'Your name here:$'player db'Player:'player_na db 6 dup(' '),'$'failure db 0letter_counter db 0letter_count dw 0score db'score : 'score_show db' $'score_number db 0score_number1 db 30hscore_number2 db 30hchar_pt db'char_?'speed dw 0afffhletters db"qpwoeirutylaksjdhfgzmxncbvpslwpdlemdkgw"letters_bak db"qpwoeirutylaksjdhfgzmxncbvpslwpdlemdkgw" letters_counter db 0letters_count dw 0life_flag db 39 dup(0)present_position db 1start_str db'start: $'start_time db 8 dup(':')now_time db 8 dup(':')end_str db'end: $'end_time db 8 dup(':')t_time db 8 dup(':')word_str db'total word: $'text_frame db 0c9h,16 dup(0cdh),0bbhtext_frame1 db 0bah,16 dup(20h),0bahtext_frame2 db 0bah,16 dup(20h),0bahtext_frame3 db 0bah,16 dup(20h),0bahtext_frame4 db 0bah,16 dup(20h),0bahtext_frame5 db 0bah,16 dup(20h),0bahtext_frame6 db 0bah,16 dup(20h),0bahtext_frame7 db 0bah,16 dup(20h),0bahtext_frame8 db 0bah,16 dup(20h),0bahtext_frame9 db 0bah,16 dup(20h),0bahtext_frame10 db 0cch,16 dup(0cdh),0b9htext_frame11 db 0bah,16 dup(20h),0bahtext_frame12 db 0bah,16 dup(20h),0bahtext_frame13 db 0bah,16 dup(20h),0bahtext_frame14 db 0bah,16 dup(20h),0bahtext_frame15 db 0c8h,16 dup(0cdh),0bchdata endsstack segment stackdb 200 dup(?)stack endscode segmentmain proc farassume cs:code,ds:data,ss:stackstart:mov ax,datamov ds,axmov es,axmov ax,0003hint 10hmov ah,01hor ch,00010000bint 10h ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;利用宏初始化窗口边框;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Init_w 00d,00d,02d,dl,80d,win_x1,04hInit_w 24d,00d,02d,dl,80d,win_x2,04hInit_w 00d,00d,02d,dh,25d,win_y1,04hInit_w 00d,79d,02d,dh,25d,win_y2,04hmenu 08h,14h,wel1menu 09h,14h,wel2menu 0ah,14h,wel3menu 0bh,14h,wel4menu 0ch,14h,wel5menu 0dh,14h,wel6menu 0fh,14h,wel7menu 10h,14h,wel8 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;输入玩家名字;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;input_name:mov cx,16lea si,player_nanext_input:mov ah,01hint 21hcmp al,08hjz erase_namecmp al,0dhjz begin_gamecmp al,45hjz exitmov [si],alinc siloop next_inputjmp begin_gamemov ah,1hint 21hexit:mov ah,4chint 21herase_name:push cxpush axmov ah,0ahmov al,' 'mov bl,00hmov bh,00hmov cx,1int 10hpop axpop cxjmp next_input ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;begin_game:call clear_screencall get_timetime_ch start_time,t_timemov letter_counter,00hmov present_position,1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;lea si,letterslea di,letters_bakmov cx,00hinit_letters: ;LETTERS赋值LETTERS BAKmov ah,[di]mov [si],ahinc siinc diinc cxcmp cx,39jne init_lettersmov ah,00hlea si,life_flagmov cx,00hinit_life_flag: ;LIFE_FLAG赋值0mov [si],ahinc siinc cxcmp cx,39jne init_life_flag ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;初始化菜单;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mov ah,0bhmov bx,0100hint 10h;call clear_screendraw_text 04h,38h,text_framedraw_text 05h,38h,text_frame1draw_text 06h,38h,text_frame2draw_text 07h,38h,text_frame3draw_text 08h,38h,text_frame4draw_text 09h,38h,text_frame5draw_text 0ah,38h,text_frame6draw_text 0bh,38h,text_frame7draw_text 0ch,38h,text_frame8draw_text 0dh,38h,text_frame9draw_text 0eh,38h,text_frame10draw_text 0fh,38h,text_frame11draw_text 10h,38h,text_frame12draw_text 11h,38h,text_frame13draw_text 12h,38h,text_frame14draw_text 13h,38h,text_frame15Init_w 02d,05d,0dbh,dl,40d,rect_x1,04hInit_w 21d,05d,0dbh,dl,40d,rect_x2,04hInit_w 02d,05d,0dbh,dh,20d,rect_y1,04hInit_w 02d,45d,0dbh,dh,20d,rect_y2,04hcall show_infoInit_w 20d,06d,0eh,dl,39d,yinfu,0fhmenu 06d,58d,start_strshow_time 06d,64d,start_time,08menu 08d,58d,end_strmenu 10d,58d,word_str;;;;;;;;;;;;;;;;;;show timemov ah,02hmov bh,00hmov dh,04dmov dl,06dint 10h ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;初始化字母mov ax,datamov es,axmov bp,offset lettersmov dh,03dmov dl,06dmov ah,02hint 10hmov cx,39mov al,00hmov bh,00hmov bl,0fh ;框架颜色mov ah,13hint 10hjmp nextcycle ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;from_front:sub present_position,39djmp backto_sifind_zero:cmp present_position,39dje from_onemov ah,00hnextsi:add present_position,01hinc sicmp [si],ahje backto_dicmp present_position,39je from_onejmp nextsifrom_one:mov present_position,01hjmp backto_sinextcycle:lea di,letterslea si,life_flagadd present_position,16dcmp present_position,39ja from_frontbackto_si:add si,word ptr present_positiondec simov ah,[si]cmp ah,01hje find_zerobackto_di:;mov ah,01h;mov [si],ahpush cxxor ch,chmov cl,present_positioninc_di:inc diloop inc_dipop cx;add di,word ptr present_positiondec di ; DI为字母位置指针,开始指向LETTERS首地址mov dl,present_positionadd dl,05mov ah,02hmov bh,00hmov dh,03hint 10h ;找相对应都字母位置mov cx,00hnextrow: push cxmov cx,00hout_cycle: ; 延迟push cxmov cx,00hin_cycle:add cx,01hcmp cx,1000jne in_cycle;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;push dxmov ah,06h ;从键盘输入字符mov dl,0ffhint 21hpop dxjz pass ;此行已经注释掉cmp al,1bh ;如果键入ESC,则返回主菜单 je to_start1cmp al,' ';如果键入SPACE,则游戏暂停 je pausecmp al,[di] ;输入字母正确!则字母消失 je disappearpass: pop cxinc cxcmp cx,speedje printjmp out_cyclepause: push dx ;暂停处理mov ah,06hmov dl,0ffhint 21hpop dxcmp al,' 'jne pausejmp passto_start1: ;返回主菜单jmp game_loseprint:mov ah,0ah ;在当前光标位置写空格mov al,' 'mov bh,00hmov cx,01hint 10hinc dhmov ah,02h ;改变光标位置mov bh,00hint 10hmov ah,09h ;在当前光标位置写字母mov al,[di]mov bh,00hmov bl,0fhmov cx,01hint 10hpop cxinc cxcmp cx,17dje print_next_letterjmp nextrow ;下一行disappear: ;击中字母后输出空格pop cxpop cxmov ah,0ahmov al,' 'mov bh,00hint 10hadd score_number,1dadd score_number1,1dpush axpush sipush dxmov al,score_number1lea si,score_showcmp al,'9'ja score_nextinc simov [si],aljmp score_overscore_next:inc score_number2mov al,score_number2mov [si],almov al,30hmov score_number1,alinc simov [si],alscore_over:pop sipop axcall show_infojmp hitprint_next_letter:add failure,1cmp failure,39jz game_loselea si,life_flag ;击中下面的符号,符号消失add si,word ptr present_positiondec simov ah,1mov [si],ahmov ah,0ahmov al,20Hmov bh,00hint 10hinc dhhit:mov ah,02h ;上面字母消失mov bh,00hmov dh,03hint 10hmov al,[di] ; 出现下一个新字母数值都算法add al,7dcmp al,'z'ja convey_letter ;ja变jgmov ah,0ahmov bh,00hmov cx,01hint 10hmov [di],aladd letters_counter,1push dxpush axpush bxpush cxcall show_counterpop cxpop bxpop axpop dxshow_time 12d,63d,letters_count,02jmp nextcyclegame_lose:call get_timetime_ch end_time,t_timemenu 08d,58d,end_strshow_time 08d,64d,end_time,08game_again:mov ah,06hmov dl,0ffhint 21hjz game_againjmp startconvey_letter:sub al,'z'add al,'a'mov ah,0ahmov bh,00hmov cx,01hint 10hmov [di],aladd letters_counter,1push dxpush axpush bxpush cxcall show_counterpop cxpop bxpop axpop dxshow_time 12d,63d,letters_count,02jmp nextcycle ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;show_counter proc nearpush axpush bxpush simov al,letters_countercbwmov bl,10div bl;al放商,ah放余数add al,'0'add ah,'0'lea si,letters_countmov [si],alinc simov [si],ahpop sipop bxpop axretshow_counter endp;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; show_info proc nearpush axpush bxpush cxpush dxmov ah,02hmov dh,16dmov dl,58dint 10hlea dx,playermov ah,09hint 21hinc dhmov dh,17dmov dl,58dmov ah,02hint 10hlea dx,scoremov ah,09hint 21hpop dxpop cxpop bxpop axretshow_info endp ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;获取系统时间;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;get_time proc nearMOV SI,0MOV AH,2CHINT 21HMOV AL,CHcall bcd2asc_tINC SIMOV AL,CLcall bcd2asc_tINC SIMOV AL,DHcall bcd2asc_tINT 10Hretget_time endpbcd2asc_t proc near ;时间数值转换成ASCII码字符子程序PUSH BXCBWMOV BL,10DIV BLADD AL,'0'MOV t_time[SI],ALINC SIADD AH,'0'MOV t_time[SI],AHINC SIPOP BXretbcd2asc_t endp ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; clear_screen proc nearmov cx,0mov dh,24hmov dl,79hmov bh,00hmov ax,600hint 10hretclear_screen endp ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; main endpcode ends end start。
《微机原理》课程设计说明书_键盘电子乐器

《微机原理》课程设计说明书_键盘电子乐器武汉理工大学《微机原理》课程设计说明书课程设计任务书学生姓名: 专业班级: 电气0805班指导教师: 工作单位: 自动化学院题目: 键盘电子乐器初始条件:掌握汇编语言程序设计方法,所设计的程序运行后可通过键盘控制,满足系统功能,并实现该系统设计方案。
在DOS,windows,汇编软件环境下运行。
要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.设计一个用键盘演奏音乐的程序,计时器系统设计编程定时输出――电子音调,用pc机内部8253time~使扬声器发声。
用汇编语言对8253进行编程,使其OUT0上输出一定的频率,将其一定频率输出到喇叭上,演奏出不同的音节。
pc机的数字键(1,7)作为电子音调的音调选择2. 课程设计说明书应包括:a)设计任务及要求b)方案比较及认证c)程序设计基本思想,程序流程图,部分源程序及注解d)调试记录及结果分析e)参考资料f)附录:全部源程序清单g)总结时间安排:2011年元月07日--元月09日选题、查阅资料和方案设计 2011年元月10日--元月14日编程2011年元月15日--元月16日调试程序,改进与提高2011年元月17日撰写课程设计报告(有调试过程及结果的截屏) 2011年元月18日答辩和交课程设计报告指导教师签名: 2011 年元月 6 日系主任(或责任教师)签名: 年月日1武汉理工大学《微机原理》课程设计说明书摘要利用PC上的定时/计数芯片8253A控制PC扬声器发声。
编写内核模块,直接操作扬声器相关端口,或字符设备驱动,供应用程序调用,用键盘使其发出不同的声音。
关键字:8253 定时器中断2武汉理工大学《微机原理》课程设计说明书目录1. 方案比较 ....................................... 42.芯片介绍 (4)2.1 8255芯片简述 (4)2.1.1 8255三种方式下工作 (4)2.2 8253芯片简述 (5)2.2.1 8253六种工作方式 ........................ 63.通用发声程序 ..................................... 7 4.音调与频率和时间的关系 ........................... 11 附录 (13)附录一: (13)附录二: (14)附录三: (26)附录四: (27)附录五: ...................................... 32 参考文献 (33)3武汉理工大学《微机原理》课程设计说明书键盘电子乐器1.方案比较1.1 发声程序循环优点:简单,易于思维缺点:程序过于长,比较繁琐1.2 调用宏,进行发声优点:程序短缺点:不易想到2.芯片介绍2.1 8255芯片简述8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,+5V单电源供电。
微机原理课程设计打字练习

微机原理课程设计打字练习一概述1.课程设计分析计算机的不断更新发展,在各个领域的应用越来越多。
而汇编语言是计算机能够提供用户使用的最快而又最好最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。
因而,对程序的空间和时间要求很高的场合,汇编语言的应用就显得必不可少了,一些直接控制硬件的应用场合,则更是非用汇编语言不可。
设计课程设计是在教学实践基础上进行的一次大型实验,也是对该课程所学理论知识的深化和提高。
因此,要求我们能综合应用所学知识,设计与制造出具有较复杂功能的应用系统,并且在实验的基本技能方面上进行一次全面的训练。
通过具体的问题分析、设计、调试、运行程序。
在实际问题中锻炼提高自己,增加了对本门课程内容的理解,锻炼了动手能力。
就这个程序具体而言:调用宏,显示主界面,通过选择不同的选项,可以进入不同的界面;采用BIOS功能的中断,可以在任何时候退出当前所在的界面并通过选择进入其他的界面。
这个程序最终通过菜单所提示的信息选取所要进入的界面,获得所要的功能。
2. 课程设计目的1 对掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。
2培养综合运用所学知识,独立完成汇编程序课题的能力3 能够较全面地巩固和应用课堂中所学的基本理论和程序设计方法,能够较熟练地完成汇编语言程序的设计和调试。
4 培养勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。
5 培养从资料文献、科学实验中获得知识的能力,提高从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。
3. 课程设计的要求1、自行编制键盘中断和时间中断处理程序,并保存原中断向量。
程序运行时,使用自编的中断向量处理程序。
程序退出时,恢复中断向量。
2、在缓冲区中预放了一些字母,运行时,可按照屏幕上显示的小写字母输入练习。
3、每输入完一行按回车键后,可显示出练习输入的时间提高要求:改进程序,将原设计中固定的例句改为随机变化的例句。
微机原理课程设计-打字练习附页

课程设计任务书学生姓名:专业班级:自动化0806 指导教师:杨胤铎工作单位:自动化学院题目: 打字练习程序初始条件:按回车键出现由26个字母组成的乱序行,这时其中任一字母落下,在键盘上敲入该字母,如果输入正确,字母消失。
按Q退出程序。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)设计任务及要求分析(2)方案比较及认证说明(3)系统原理阐述(4)硬件设计课题需要说明:硬件原理,电路图,采用器件的功能说明(5)软件设计课题需要说明:软件思想,流程图,源程序及程序注释(6)调试记录及结果分析(7)总结(8)参考资料(9)附录:芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图时间安排:1月10日~1月12日:收集资料,方案选择1月13日~1月17日:整体流程,程序细节1月18日~1月20日;调试程序,报告撰写1月21日:交设计报告,程序演示,答辩指导教师签名:年月日系主任(或责任教师)签名:年月这次汇编程序设计题目是打字练习,其要求的要实现的功能是写一个程序,运行可执行程序后,出现主界面,按回车键出现由26个字母组成的乱序行,这时其中任一字母落下,在键盘上敲入该字母,如果输入正确,字母消失;按回车键进入打字练习;按ESC键返回主界面;按空格键暂停;按‘Q’退出。
从设计目的,概要设计,详细设计,程序调试以及心得体会五部分来对该程序的设计进行详细解释和说明,并且结合了流程图和实际界面截图。
从构思,编写,调试到完整的实现,每一部分都做了深入的分析和说明。
关键词:功能模块,核心代码,随机字符,模块调用,功能分析1设计目的 (1)2概要设计 (2)2.1系统总体分析 (2)2.2主模块框图及说明 (3)3详细设计 (4)3.1主模块及子模块说明 (4)3.2各模块详细设计 (4)3.2.1主界面模块 (4)3.2.2随机字母产生模块 (6)3.2.3字母落下模块 (7)3.2.4暂停模块 (8)3.2.5返回主界面模块 (9)4程序调试 (10)4.1运行界面分析 (10)4.2调试过程及分析............................. 错误!未定义书签。
微机原理课程设计打字

微机原理课程设计打字一、课程目标知识目标:1. 理解微机原理的基本概念,掌握计算机硬件的基本组成及其工作原理;2. 学习并掌握打字的基本技巧,熟悉键盘布局,了解打字的正确姿势及指法;3. 了解打字软件的基本功能,能够运用软件进行打字练习和测试。
技能目标:1. 培养学生具备一定的打字速度和准确性,提高信息处理能力;2. 学会使用打字软件进行自主练习,养成独立学习的良好习惯;3. 能够运用所学知识,解决实际打字过程中遇到的问题。
情感态度价值观目标:1. 培养学生对计算机科学的兴趣和好奇心,激发学习积极性;2. 培养学生具备耐心、细心的品质,提高克服困难的自信心;3. 增强团队合作意识,学会在小组合作中互相学习、互相帮助;4. 培养学生遵守网络道德规范,养成良好的计算机使用习惯。
课程性质:本课程为实践性较强的课程,注重理论知识与实际操作相结合。
学生特点:学生处于掌握基本计算机知识的阶段,对新鲜事物充满好奇,但学习耐心和自律性有待提高。
教学要求:结合学生特点,注重启发式教学,以学生为主体,教师为主导,培养学生的实际操作能力。
在教学过程中,关注学生的个体差异,因材施教,确保每个学生都能达到课程目标。
将目标分解为具体的学习成果,以便于教学设计和评估。
二、教学内容1. 计算机硬件基本组成:讲解微机原理中的CPU、内存、输入输出设备等硬件组成,及其工作原理;相关教材章节:第一章 计算机硬件基本组成2. 键盘指法训练:介绍键盘布局,教授打字的正确姿势及指法,进行基础指法练习;相关教材章节:第二章 键盘与指法3. 打字技巧与练习:讲解打字的基本技巧,如盲打、连打等,组织学生进行打字练习;相关教材章节:第三章 打字技巧与练习4. 打字软件的使用:介绍打字软件的基本功能,教授如何使用软件进行打字练习和测试;相关教材章节:第四章 打字软件的使用5. 实践操作与提高:组织学生进行实际打字操作,提高打字速度和准确性,针对学生个体差异进行指导;相关教材章节:第五章 实践操作与提高教学内容安排与进度:第一周:计算机硬件基本组成学习;第二周:键盘指法训练;第三周:打字技巧与练习;第四周:打字软件的使用;第五周:实践操作与提高,进行总结测试。
微机原理课程设计 完整版

微机原理课程设计题目基于8086的电子称设计指导教师姓名学号王华民************姓名学号赵儒桐************姓名学号孙敬周************专业11级电子信息工程教学单位物理与电子信息学院(盖章)二O一三年六月二十二日目录摘要及关键字 (1)1绪论 (1)2 总体设计及其框图 (1)2.1 电阻应变式传感器 (1)2.2 信号放大模块 (2)2.3重量显示及其控制模块 (2)3 硬件电路设计 (2)3.1数据采集电路 (2)3.2 放大校正电路 (3)3.3 ADC0809与8255的连接 (3)3.4 8086的可编程外设接口电路 (4)3.5 数据显示部分 (5)3.6 系统硬件原理图 (6)4系统软件流程图 (7)5总结 (8)参考文献 (8)基于8086电子称设计摘要本文介绍了一种基于8086微处理器的电子称系统,采用电子称传感器采集数据,用CPU控制重量值稳定在预设重量:当重量高于预设重量值时报警。
系统操作简便、自动化程度高、扩展方便且具有良好的人机交互的能力。
该系统通过实验,取得了较为满意的控制效果,可应用在一些精度要求不太高的系统中。
为了降低整个系统的成本,在满足性能的要求下,选择低成本器件,简化系统设计。
关键词微处理器;电阻应变式传感器;A/D转换器;控制系统一.绪论随着电子技术的发展,特别是大规模集成电路的产生,给人们的生活带来了根本性的变化,如果说微型计算机的出现使现代的科学研究得到了质的飞跃,那么微型计算机控制技术的出现则是给现代工业控制测控领域带来了一次新的革命。
目前,微处理器8086在工业控制系统诸多领域得到了广泛的应用,由于它具有极好的稳定性,更快和更准确的运算精度。
当前,微机测控系统的发展非常迅速,应用也极为广泛,它由于体积小、功能强、性能稳定、价格低廉等优点,使其在工业控制系统诸多领域得到了极为广泛的应用。
在此基础上发展起来的智能仪器无论是在测量的准确度、灵敏度、可靠性、自动化程度、应用功能等方面或在解决测试技术问题的深度及广度方面都有了巨大的发展,以一种崭新的面貌展现在人们的面前。
《微机原理》课程设计报告

《微机原理》课程设计报告班级:姓名:学号:一、目的结合微机原理课程的学习,进一步巩固所学只是,掌握汇编语言的编程要领,熟悉汇编程序上机过程以及进行程序调试。
二、设计任务,程序清单,流程图任务1(具体题目要求):字符串匹配设计为掌握提示信息的设置方法及读取键入信息的方法。
编写程序实现两个字符串比较。
如相同,则显示:“MATCH”,否则,则显示“NO MATCH”程序清单:DA TA SEGMENTINPUT1 DB 'INPUT STRING1!',0DH,0AH,'$'INPUT2 DB 'INPUT STRING2!',0DH,0AH,'$'MAT DB 0DH,0AH,'MATCH!$'MISMAT DB 0DH,0AH,'NO MA TCH!$'LEN1 DB 20STRING1 DB 20 DUP(?)LEN2 DB 20STRING2 DB 20 DUP(?)DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,ES:DATAMAIN PROC FARMOV AX,DA TAMOV DS,AXMOV ES,AXMOV AH,09HMOV DX,OFFSET INPUT1INT 21HMOV AL,LEN1MOV BX,OFFSET STRING1MOV [BX],ALMOV AH,0AHMOV DX,OFFSET STRING1INT 21HCALL CRLFMOV AH,09HMOV DX,OFFSET INPUT2INT 21HMOV AL,LEN2MOV BX,OFFSET STRING2MOV [BX],ALMOV AH,0AHMOV DX,OFFSET STRING2INT 21HCALL CRLFCLDLEA SI,STRING1LEA DI,STRING2MOV CX,5REPE CMPSBJNE NOMATMOV AH,9MOV DX,OFFSET MATINT 21HJMP EXITNOMA T:MOV AH,9LEA DX,MISMA TINT 21HEXIT: MOV AH,4CHINT 21HCRLF PROC NEARMOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21HRETCRLF ENDPMAIN ENDPCODE ENDSEND MAIN流程图:…….任务2(具体题目要求)将键盘输入的小写字母转换为大写字母的设计为了解小写字母和大写字母在计算机内的表示方法,并学习如何进行转换。
微机原理课程设计打字练习计时

微机原理课程设计书院别电气工程学院专业电气工程及其自动化班级题目打字计时程序学生学号同组者2011年 1 月7日目录第一章设计要求 (1)1.1设计任务 (1)1.2设计要求 (1)1.3设计目的 (1)第二章设计环境 (1)DOS中断介绍 (1)第三章课题设计 (3)3.1硬件设计 (3)3.2软件设计 (3)3.3系统运行过程描述 (4)3.4 设计中遇到的问题及解决方法 (5)3.5 新增功能及其实现方法 (5)第四章设计体会 (6)附录 (6)附录一程序流程图 (6)附录二源程序 (8)第一章设计要求1.1设计任务利用PC机键盘和时间中断、字符显示实现打字练习程序。
1.2设计要求1)自行编制键盘中断和时间中断处理程序,并保存原中断向量,程序运行时,使用自编的中断向量处理程序,程序退出时,恢复中断向量;2)在缓冲区中预放了一些字母,程序运行时,可按照屏幕上显示的小写字母进行输入练习;3)每输入完一行按回车键后,可显示出练习输入的时间。
4)自行添加若干功能。
1.3设计目的熟悉与掌握有关键盘和时间的中断及字符显示技术。
第二章设计环境DOS中断介绍使用DOS提供的程序控制硬件。
优点是兼容性好,使用方便。
DOS是IBM PC系列微机的操作系统(现在的微机仍能运行DOS,而且新的操作系统也能继续提供几乎所有的DOS功能调用)负责管理系统的所有资源,协调微机的操作,其中包括大量可供用户调用的服务程序。
DOS的功能调用不依赖于具体的硬件系统。
所有的DOS系统功能调用都是利用软件中断指令INT 21H来实现的。
也就是说,在程序中需要调用DOS功能的时候,只要使用一条INT 21H指令即可。
INT 21H是一个具有90多个子功能的中断服务程序,这些子功能大致可以分为四类:设备管理、目录管理、文件管理和其他。
其功能一览表可参见附录。
为了方便用户使用这些子功能,INT 21H对每一个子功能都进行了编号——称为功能号。
微机课设报告 打字游戏汇编语言的设计

学号09750223实习报告微型计算机原理及应用课程设计报告打字游戏程序设计起止日期:2012 年1 月3 日至2012年 1 月6 日学生姓名马聪班级09电气2班成绩指导教师(签字)电子与信息工程系2012年1月05日摘要为了更好地掌握学习微机原理的知识,我们进行了这次课程实验,以完善我们的知识体系,我们通过汇编语言在PC机上完成了一个打字游戏的设计,它具有练习打字的功能。
本有游戏主要针对指法练习,并提供字母和单词两种选择。
根据用户自身情况,可以进行速度调节,以达到最佳的练习效果。
同时本游戏提供显示得分,正确率和失败个数的功能。
当失败个数超过一定个数后,游戏结束并提示是否继续。
目录一、课程设计题目 (2)二、设计思路模块划分流程图 (2)㈠设计思路 (2)㈡模块划分 (2)㈢流程图 (3)三、程序源代码 (4)四、调试过程,运行结果和出现的问题及解决 (12)1、调试结果 (12)2、在调试中碰到问题 (14)五、课程设计心得 (14)六、成绩单 (15)一、课程设计题目、内容和实现的功能字母打字游戏基本功能:0 菜单主界面由“开始”“速度调整”“暂停”“结束”“统计得分”等项组成1 按ESC键退出游戏,显示得分,正确打字数和错误打字数.二、设计思路、模块划分、流程图(一)设计思路:利用计算机控制发声的原理,来演奏乐曲的程序。
乐曲按一定的高低、长短和强弱关系组成的音调。
根据歌谱,来编写歌程序的音符表和节奏表。
组成乐谱的每个音符的频率值和持续时间是乐曲程序发声所需要的两个数据。
通过来设时间值,然后通过发声程序“*”来播放音乐。
通过键盘控制扬声器发出各种音符声音,使计算机键盘变成钢琴键盘,这是可以用它来演奏各种简单的声音。
弹奏时对应乐谱上的q音符,按下1,程序将接收到的1键的频率为262Hz送入程序中。
1、音乐播放选择从键盘上输入“1”,则播放“新年好”;从键盘上输入“q”,则退出;从键盘上输入其它字符,则等待重新输入。
微机原理实验(含解答程序)

微机原理实验(含解答程序)-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN微机原理实验课题(共16个内容,附解答程序)(汇编程序可以使用MASM FOR WINDOWS)1.将偏移地址为2000h开始的100个单元依次设置为0~99。
2.将两个64位的二进制数相加,记录相加的和以及各个状态标志的值。
3. 编写程序,在屏幕上分行显示自己的姓名、学号。
4. 编写程序,通过键盘输入0——9之间的一个数字,利用查表法计算其平方。
在DEBUG下查看执行结果。
5. 用分支结构设计程序实现符号函数100010xy xx>⎧⎪==⎨⎪-<⎩,要求x和y存放在内存单元中,并将判断的结果在屏幕上显示输出。
6. 在键盘上输入一个字符,判断是否为小写字母,若不是,显示错误信息,若是,则将其转换为大写字母并显示。
7. 在键盘上输入一个字符,判断它是一个数字、大写字母还是小写字母,若为数字,则显示digital,若为字母,显示letter,否则,显示other。
8. 将字节型变量x的低四位(一位十六进制数)以十六进制数的形式显示。
9. 编制程序计算S=1+2·3+3·4+4·5+……+N(N+1)+……直到N (N+1)大于200为止,并将结果由屏幕上显示出来。
10. 将字形变量x以二进制数的形式在屏幕上显示输出。
11. 将字形变量x以十六进制数的形式在屏幕上显示输出。
12. 将内存单元缓冲区中的符号数(20个)按从小到大的顺序排列,并以十六进制数的形式显示。
13. 编制程序计算S=1+2+3+……+N,并将结果由屏幕上显示出来。
(要求:在屏幕上显示提示信息,提示输入N,N用十六进制表示,且N小于0FH,用子程序实现(段内),将输入的结果用十六进制数输出显示,显示结果的程序用子程序是实现(段间))。
14.要求在键盘上输入一个小于四位的十进制数,将其转换为二进制数存放,并讲转换后的结果以十六进制数的形式在屏幕上显示出来。
微机原理第七个微机原理打字游戏课程设计程序带注释

; 用于输出菜单:在光标在 (op1,op2) 开始地地方输出字符串 op3ENDM ; 将左上角 (op1,op2) MACRO op1,op2,op3,op4MOV AH,06hMOV AL,00h MOV BH,07h MOV CH,op1 MOV CL,op2 MOV DH,op3 MOV DL,op4 INT 10hMOV AH,02hMOV BH,00h MOV DH,op1 MOV DL,op2 INT 10hENDM初始化游戏 , 用于设置游戏地边框 Init_game MACROop1,op2,op3,op4,op5,op6MOV CX,00h将光标设置在 行:DH,列:DLMOV DH,op1INT 10hMOV AH,0ah MOV AL,op3 MOV BH,00h MOV CX,01hINT 10h ;****************** POP CXMACRO op1,op2,op3MOV AH,02h MOV BH,00h MOV DH,op1MOV DL,op2 INT 10h MOV AH,09h LEA DX,op3 INT21hmenuPUSH CX 右下角 (op3,op4) 决定地矩形区域清除显示字符clear_screen ・*******************设置光标在 op1 行 ,op2 列・ **********************************・ ******************MOVop6:MOV MOVDL,op2AH,02hBH,00h在指定光标地位置输出字符 op3"jwmilzoeucgpravskntxhdyqfbiytpkwnxlsvxrmofzhgaebudjqnwimzoexrphysfqtvdcgljukda" speed DW30000Dletter_counter DB 0 present_position DB 0 data ENDS CODE SEGMENTASSUME CS:CODE , DS:data START:MOV AX,data MOVDS,AX;***************** 首先设置游戏地主边框 Init_game 00h,00h,0ah,DL,80d,L1 Init_game 24d,00d,0ah,DL,80d,L2 Init_game 00d,00d,0ah,DH,25d,L3 Init_game 00d,79d,0ah,DH,25d,L4clear_screen 01d,01d,23d,78d menu 05d,15d,ZK menu 07d,15d,mes1 menu 09d,15d,mes2 menu11d,15d,mes3 menu 13d,15d,mes4 menu 15d,15d,mes5 menu 17d,15d,mes6 MOV AH,02h MOV BH,00h MOVDH,22dINC CXINCop4 ;op4用来决疋输出增长地方向是列还是仃DH :仃CMPCX,op5JNEop6;*******************重复输出字符 op3,op5 次 ,ENDM;*********************************** 数据段 , 用于初始化游戏有关地数据data SEGMENTZK DB "WELCOME TO PLAY!$"mes1 DB "data: 2011/01/08$"mes2 DB "press Enter key to continue .. $"mes3 DB "when a letter is droping ,please hit it!$"mes4 DB "press space key to pause!$"mes5 DB "press ESC key to return main interface!$"mes6 DB "press letter 'E'to exit!$"lost DB "Game over!$"letter DBDL :列gobackto_di:ADD DI,WORD PTR present_position DEC DIMOV DL,present_position MOVAH,02hMOV DL,33d INT 10h ;************** 设置光标地位置MOV AH,01h;********************设定DOS 为键盘输入字符并回显功能INT 21h;********************判断输入地字符CMP AL,0dhJE speed3 ; 输入为 enter 键, 跳到游戏主程序CMP AL,45h JE L10; 输入为 E, 跳到退出 , 结束游戏 L10: JMPexitspeed3: clear_screen 01d,01d,23d,78d Init_game 23d,01d,01d,DL,78d,next5MOV AH,02hMOV BH,00h MOV DH,01d MOV DL,01dINT 10hMOV CX,00h LEA SI,lett ernextletter:MOV DL,[SI] MOV AH,02h INT 21h INC SI INC CX CMP CX,78d JE nextcycle JMP nextletter改正下落地址超过 78 列地地址from_front: SUBJMPpresent_position,78d gobackto_dinextcycle:LEADI,letter ;DIADD present_position,31d ;加上 31CMP present_position,78d则改正指向待下落字母地首地址将下落地字母地列数设置为在前一个下落字母基础上; 比较设置过地下落地址地列数是否超过78列, 若超过 ,JA from_front・ ********************用于将光标定位在待下落地字母 , 用于操作该字母・ *********************MOV BH,00h MOV DH,01d INT 10h・ ******************** 三层循环, 第一层用于判断是否下落了21 ;第二层和第三层结合构成延时次, 即一次下落是否完成, 控制每一行地下落速度MOV CX,00h nextrow:PUSHMOV CX,00h out_cycle:PUSHMOV CXCX CX,00hin_cycle:INC CXCMP CX,1000hJNE in_cyclePUSH DX・*******************JMOV AH,06hMOV DL,0ffhINT 21hPOP DX・ ******************* 设置DOS为键盘输入字符且不回显状态判断输入字符:ESC-- 进入主程序选择界面space-- 暂停下落地字符-- 消失CMP JEAL,1bh to_start1CMP JE CMP JE AL,' '・ ************ pauseAL,[DI]disappear延时程序, 用于控制下落过程中在每一行地延时时间时间=speed*10000 pass:POPINC CX CMPJE print; CXCX,speed ; 判断在一行地延时是否达到在该行延时时间达到且没有被击中3000 次(用于控制延时时间), 跳到print, 即该行输出空格, 下一行输出字母JMP out_cycle;・*******************实现,除非再次输入空格延时未达到, 重新开始用于响应空格地暂停程序:通过将, 否则循环检查DOS设置为按键输入且不回显状态pause:PUSH DXMOV AH,06hMOV DL,0ffhINT 21h POP DXCMP AL,' ' JNE pause JMP pass ・ ********************** 用于转接跳转到开始主程序to_start1: JMP start ・ ***********当上一行停留时间达到且没有被正确击中 , 将上一行输出空格 , 该行输出下落地字母 print: ・ *************MOV 将上一行输出空格AH,0ah MOV MOv MOv INT AL,' ' BH,00h CX,01h 10h 增加DH 地值,使光标指向该行 INC DH MOV AH,02h MOV BH,00hINT 10h************* 在该行 MOV AH,0ah MOV AL,[DI] MOV BH,00hMOV CX,01h INT 10h・*************・*************落地字母 POP INC CMP JE 用于确定下落次数是否达到 21 CX CX CX,21d print_next_letter; 次 , 即该字母下落是否完成 落次数达到 21 次, 字母下落完成 , 跳到下一个子程序 , 用 于补充下落地字母 JMP disappear: POP POP MOVMOVnextrow;************CXCX当下落过程中击中该字母 , 使其消失 , 即输出空格代替 MOV MOV INT AH,0ahAL,' 'BH,00h CX,01h 10hJMPhi tprint_next_letter:;************* 将下落到底且没有被击中地位置输出为空格MOV AH,0ah MOV AL,' ' MOV BH,00hMOV CX,01h INT 10hINC DH MOV AH,02h MOV BH,00h INT10h********* 在窗口底框上一次标识字母输出为空格 , 用于表示该列字母下降时未被击中 MOV AH,0ah MOV AL,' ' MOV BH,00h MOV CX,01h INT 10h INCletter_counter ;计算下落未被击中地次数CMP letter_counter,78d ; 下落地未被击中次数达到 78 次 , 返回主界面 , 重新来过 JE completehit:用于补充新字母 , 把光标设置下落字母地所在列地第一行MOV AH,02h MOV BH,00hMOV DH,01hMOV DL,present_position INT10h・**************JvLMOV ADD CMP JA DIsplay: AL,[DI]AL,7h AL,7ahconvey_letter; 判断新字母是否超出了 z 地范围 , 超出则改正MOV MOV MOV AH,0ah BH,00h CX,01h INT 10hJMP nextcycle convey_letter: SUB AL,7ah ADD AL,61h JMPDIsplay・ *****************将光标指向底层一排用于标识字母是否被击中地位置・ **************complete:menu11d,35d,lostMOV CX,00h ・******************* LOOP1:PUSH MOV LOOP2:INC CMP JNE POP INC CMP JNE JMP exit: MOV INTCODE ENDS END CX CX,00hCX CX,60000dLOOP2 CX CX CX,30000d LOOP1 START AH,4ch21h START。
微机原理第七个微机原理打字游戏课程设计程序带注释

; 用于输出菜单:在光标在 (op1,op2) 开始地地方输出字符串 op3ENDM ; 将左上角 (op1,op2) MACRO op1,op2,op3,op4MOV AH,06hMOV AL,00h MOV BH,07h MOV CH,op1 MOV CL,op2 MOV DH,op3 MOV DL,op4 INT 10hMOV AH,02hMOV BH,00h MOV DH,op1 MOV DL,op2 INT 10hENDM初始化游戏 , 用于设置游戏地边框 Init_game MACROop1,op2,op3,op4,op5,op6MOV CX,00h将光标设置在 行:DH,列:DLMOV DH,op1INT 10hMOV AH,0ah MOV AL,op3 MOV BH,00h MOV CX,01hINT 10h ;****************** POP CXMACRO op1,op2,op3MOV AH,02h MOV BH,00h MOV DH,op1MOV DL,op2 INT 10h MOV AH,09h LEA DX,op3 INT21hmenuPUSH CX 右下角 (op3,op4) 决定地矩形区域清除显示字符clear_screen ・*******************设置光标在 op1 行 ,op2 列・ **********************************・ ******************MOVop6:MOV MOVDL,op2AH,02hBH,00h在指定光标地位置输出字符 op3"jwmilzoeucgpravskntxhdyqfbiytpkwnxlsvxrmofzhgaebudjqnwimzoexrphysfqtvdcgljukda" speed DW30000Dletter_counter DB 0 present_position DB 0 data ENDS CODE SEGMENTASSUME CS:CODE , DS:data START:MOV AX,data MOVDS,AX;***************** 首先设置游戏地主边框 Init_game 00h,00h,0ah,DL,80d,L1 Init_game 24d,00d,0ah,DL,80d,L2 Init_game 00d,00d,0ah,DH,25d,L3 Init_game 00d,79d,0ah,DH,25d,L4clear_screen 01d,01d,23d,78d menu 05d,15d,ZK menu 07d,15d,mes1 menu 09d,15d,mes2 menu11d,15d,mes3 menu 13d,15d,mes4 menu 15d,15d,mes5 menu 17d,15d,mes6 MOV AH,02h MOV BH,00h MOVDH,22dINC CXINCop4 ;op4用来决疋输出增长地方向是列还是仃DH :仃CMPCX,op5JNEop6;*******************重复输出字符 op3,op5 次 ,ENDM;*********************************** 数据段 , 用于初始化游戏有关地数据data SEGMENTZK DB "WELCOME TO PLAY!$"mes1 DB "data: 2011/01/08$"mes2 DB "press Enter key to continue .. $"mes3 DB "when a letter is droping ,please hit it!$"mes4 DB "press space key to pause!$"mes5 DB "press ESC key to return main interface!$"mes6 DB "press letter 'E'to exit!$"lost DB "Game over!$"letter DBDL :列gobackto_di:ADD DI,WORD PTR present_position DEC DIMOV DL,present_position MOVAH,02hMOV DL,33d INT 10h ;************** 设置光标地位置MOV AH,01h;********************设定DOS 为键盘输入字符并回显功能INT 21h;********************判断输入地字符CMP AL,0dhJE speed3 ; 输入为 enter 键, 跳到游戏主程序CMP AL,45h JE L10; 输入为 E, 跳到退出 , 结束游戏 L10: JMPexitspeed3: clear_screen 01d,01d,23d,78d Init_game 23d,01d,01d,DL,78d,next5MOV AH,02hMOV BH,00h MOV DH,01d MOV DL,01dINT 10hMOV CX,00h LEA SI,lett ernextletter:MOV DL,[SI] MOV AH,02h INT 21h INC SI INC CX CMP CX,78d JE nextcycle JMP nextletter改正下落地址超过 78 列地地址from_front: SUBJMPpresent_position,78d gobackto_dinextcycle:LEADI,letter ;DIADD present_position,31d ;加上 31CMP present_position,78d则改正指向待下落字母地首地址将下落地字母地列数设置为在前一个下落字母基础上; 比较设置过地下落地址地列数是否超过78列, 若超过 ,JA from_front・ ********************用于将光标定位在待下落地字母 , 用于操作该字母・ *********************MOV BH,00h MOV DH,01d INT 10h・ ******************** 三层循环, 第一层用于判断是否下落了21 ;第二层和第三层结合构成延时次, 即一次下落是否完成, 控制每一行地下落速度MOV CX,00h nextrow:PUSHMOV CX,00h out_cycle:PUSHMOV CXCX CX,00hin_cycle:INC CXCMP CX,1000hJNE in_cyclePUSH DX・*******************JMOV AH,06hMOV DL,0ffhINT 21hPOP DX・ ******************* 设置DOS为键盘输入字符且不回显状态判断输入字符:ESC-- 进入主程序选择界面space-- 暂停下落地字符-- 消失CMP JEAL,1bh to_start1CMP JE CMP JE AL,' '・ ************ pauseAL,[DI]disappear延时程序, 用于控制下落过程中在每一行地延时时间时间=speed*10000 pass:POPINC CX CMPJE print; CXCX,speed ; 判断在一行地延时是否达到在该行延时时间达到且没有被击中3000 次(用于控制延时时间), 跳到print, 即该行输出空格, 下一行输出字母JMP out_cycle;・*******************实现,除非再次输入空格延时未达到, 重新开始用于响应空格地暂停程序:通过将, 否则循环检查DOS设置为按键输入且不回显状态pause:PUSH DXMOV AH,06hMOV DL,0ffhINT 21h POP DXCMP AL,' ' JNE pause JMP pass ・ ********************** 用于转接跳转到开始主程序to_start1: JMP start ・ ***********当上一行停留时间达到且没有被正确击中 , 将上一行输出空格 , 该行输出下落地字母 print: ・ *************MOV 将上一行输出空格AH,0ah MOV MOv MOv INT AL,' ' BH,00h CX,01h 10h 增加DH 地值,使光标指向该行 INC DH MOV AH,02h MOV BH,00hINT 10h************* 在该行 MOV AH,0ah MOV AL,[DI] MOV BH,00hMOV CX,01h INT 10h・*************・*************落地字母 POP INC CMP JE 用于确定下落次数是否达到 21 CX CX CX,21d print_next_letter; 次 , 即该字母下落是否完成 落次数达到 21 次, 字母下落完成 , 跳到下一个子程序 , 用 于补充下落地字母 JMP disappear: POP POP MOVMOVnextrow;************CXCX当下落过程中击中该字母 , 使其消失 , 即输出空格代替 MOV MOV INT AH,0ahAL,' 'BH,00h CX,01h 10hJMPhi tprint_next_letter:;************* 将下落到底且没有被击中地位置输出为空格MOV AH,0ah MOV AL,' ' MOV BH,00hMOV CX,01h INT 10hINC DH MOV AH,02h MOV BH,00h INT10h********* 在窗口底框上一次标识字母输出为空格 , 用于表示该列字母下降时未被击中 MOV AH,0ah MOV AL,' ' MOV BH,00h MOV CX,01h INT 10h INCletter_counter ;计算下落未被击中地次数CMP letter_counter,78d ; 下落地未被击中次数达到 78 次 , 返回主界面 , 重新来过 JE completehit:用于补充新字母 , 把光标设置下落字母地所在列地第一行MOV AH,02h MOV BH,00hMOV DH,01hMOV DL,present_position INT10h・**************JvLMOV ADD CMP JA DIsplay: AL,[DI]AL,7h AL,7ahconvey_letter; 判断新字母是否超出了 z 地范围 , 超出则改正MOV MOV MOV AH,0ah BH,00h CX,01h INT 10hJMP nextcycle convey_letter: SUB AL,7ah ADD AL,61h JMPDIsplay・ *****************将光标指向底层一排用于标识字母是否被击中地位置・ **************complete:menu11d,35d,lostMOV CX,00h ・******************* LOOP1:PUSH MOV LOOP2:INC CMP JNE POP INC CMP JNE JMP exit: MOV INTCODE ENDS END CX CX,00hCX CX,60000dLOOP2 CX CX CX,30000d LOOP1 START AH,4ch21h START。
微机原理打字游戏设计报告

微机应用系统设计与综合实验设计报告目录第一章微机应用系统课程设计的目的意义 (2)1.1 设计目的 (2)1.2 课程在教学计划中的地位和作用 (2)第二章打字游戏程序软件设计任务 (3)2.1 设计内容及要求 (3)2.1.1 设计内容 (3)2.2.2 设计要求 (3)2.2 课程设计的要求 (3)第三章总体设计方案 (4)3.1 设计思想 (4)3.2 总体设计流程图 (5)第四章软件设计 (6)4.1 流程图及其说明 (6)4.2 源程序及其说明 (7)第五章系统调试与使用 (16)5.1 系统调试 (16)5.1.1 主要界面及简介 (16)5.1.2 设计中的问题 (16)5.2 使用说明 (17)第六章收获和体会 (18)参考文献 (20)第一章微机应用系统课程设计的目的及意义1.1设计目的通过该课程的硬件和软件的学习,使学生对微机系统有一个全面的,深刻的了解,能够熟练掌握各种芯片的工作原理和使用方法,从硬件和软件两方面的基础上对所学的只是进行应用,对在课程设计过程中遇到的问题进行相关处理并分析结果,使学生能够在实际应用的过程中掌握软,硬件应用的精华部分,能够进行相对独立的程序设计和硬件设计,本质实现了《微型计算机原理与接口技术》课程的教学目的。
本设计主要能够完成打字游戏程序的主要功能,其中有几个速度选项,选中其中一项按回车键出现由26个字母组成的随机排序行,这时其中任意字母落下,在键盘上敲入该字母,如果输入正确,字母消失;按“ESC”键返回主界面;按空格暂停;按“ESC”退出。
1.2 课程在教学计划中的地位和作用计算机是当今发展最快的领域,随着计算机技术的发展,微型计算机已经是一Pentium为核心的32位微处理器,操作系统平台从DOS环境完全过度到Windows环境,微型计算机体系结构有了巨大的变化,这种软硬件的更新换代,对学生学习微机原理这门课程和掌握相关的软硬件知识变得的更加重要,做到学以致用,使学习的知识有助于今后的工作和学习,有必要将目前的微机原理及相关的课程进行理论和实际的结合,使学生能够真正的独立完成一项有一定知识构架的课程设计,如何自己思考相关问题,如何去查资料并通过资料汇总得出相关结论,如何去学习新的东西,如何去理解现代计算机科学的相关知识,以及在应用的过程中制定相应的问题的解决方案并通过不断实践来提高学生分析问题和解决问题的能力。
微机原理课程设计-打字练习(正文)

打字练习程序1设计目的这次课设的任务是写一个程序,运行可执行程序后,出现主界面,按回车键出现由26个字母组成的乱序行,这时其中任一字母落下,在键盘上敲入该字母,如果输入正确,字母消失;按回车键进入打字练习;按ESC键返回主界面;按空格键暂停;按‘Q’退出。
通过课程设计,主要达到以下目的:(1)增进对汇编语言的认识,加强用汇编语言编程的能力;(2)掌握汇编语言的中断调用功能的应用,可以用汇编语言调用各种中断调用功能,并由此实现对硬件的控制等;(3)了解和掌握汇编语言程序设计过程、方法及实现,为以后微机原理课程的学习打下良好基础;(4)通过课程设计可以使我们更加了解书上的知识,了解书上的语句并且能够应用自己的程序中;(5)掌握屏幕输出显示的设计方法。
2概要设计图2-1 主程序流程图2.1 系统总体分析根据题目要求可以看到有以下几部分来实现打字练习:(1)由26字母乱序组成一行显示行;(2)字母自动落下;(3)从键盘输入的字母与落下字母相同则该字母消失,并且下一个字母自动接着落下;(4)按下“Esc”键则程序返回到主界面;(5)按空格键游戏暂停;(6)在主界面按“Q”则程序退出。
打字练习的主要功能由以上六部分组成,每一部分之间的联系都是比较紧密的。
对于以上几个部分,最主要的部分就是第二三两个部分,这是打字练习的重点,需要详细设计其所需要的功能。
2.2主模块框图及说明程序的核心模块是打字,各个模块功能的实现主要是通过键盘输入指令来融合的,主要流程是先到主界面,然后选择你想要进行的指令:ENTER进入打字界面开始打字,“Q”退出程序,空格在打字练习时执行暂停的功能,ESC是从打字界面返回到主界面。
核心模块的程序流程大体如下面的流程图图2-1。
3详细设计3.1 主模块及子模块说明主界面是程序的初始入口,也是其他功能模块的接入点。
主模块是打字模块,也是核心模块,主要通过各个键盘符来控制各个子模块之间的协调。
子模块分为判断输入字符判断模块(这当中包含两个小的子模块:主界面输入字符判断和打字模块输入字符判断)、暂停模块、退出模块(这当中包含两个小的子模块:打字界面返回主界面模块和主界面退出程序模块)。
微机原理课件ch07

Q(C,D)
2021/1/10
ENDM
第21页
过程调用和宏调用的区别
在处理时间上不同。 用宏指令得到的目标代码长,占内存空间大,而
且宏调用的次数越多,所占内存空间越大;用过 程占内存空间小,而且不会随调用次数的增加而 增加,但执行时间长。 传递参数的方式不同
2021/1/10
第22页
2021/1/10
PTR运算符
格式: 类型 PTR 表达式
例12:INC WORD PTR [BX]
THIS操作符
格式: THIS 类型(或属性)
例13:FIRST
EQU THIS BYTE
SECOND
DW 100 DUP (?)
2021/1/10
第27页
第19页
子程序调用和宏调用的区别
子程序调用工作方式
主程序
X←A,y←B CALL Q
x←C,y←D CALL Q
子程序Q(x,y) 执行时调用
Q: . . .
RET
2021/1/10
第20页
子程序调用和宏调用的区别
宏调用工作方式
主程序
子程序Q(x,y)
汇编时展开
Q A,B
Q(A,B)
Q C,D Q MACRO x,y
2021/1/10
第10页
伪指令
符号定义语句
等值语句
格式:符号名 EQU 表达式
例1: ⑴ PORT
EQU
⑵ BUFF
EQU
⑶ MEM
EQU
⑷ COUNT
EQU
⑸ ABC
EQU
1234 PORT+58 DS:[BP+20H] CX AAA
等号语句
微机原理打字游戏

SET MANUAL TIME:
LEA DX , BUF
MOV AH , 10
INT 21H
MOV BP , DX
INC BP
CMP [ BP ] ,BYTE PTR 8
JNZ SET MANUAL TIME
INC BP
IRET
TIME ELAPSED ENDP
;数据结构
TICKS DW 0 ;时间计数
HOUR1 DB 30H ;时十位
HOUR2 DB 30H ;时个位
DB ':'
MIN1 DB 30H ;分十位
MIN2 DB 30H ;分个位
INT 21H
GET SYS TIME:
MOV AH , 0
MOV AL , 2
INT 10H
MOV AH , 2CH
INT 21H
;初始化时间
MOV AH , 0
MOV AL , CH
MOV BL , 10
;出口参数--------------键盘的输入值ax
down proc far
push cx
push dx
push ax
push si
INC TOTAL ;下降的字符个数的计数器增一
MOV CX,1
MOV DH,1
.............\ta.asm
.............\tab.asm
.............\td.asm
.............\TD.OBJ
.............\td1.asm
.............\TD1.EXE
微机原理课程设计练习打字程序

微机原理课程设计报告目:题练习打字程序学生姓名:傅湘黔学号: 2专业班级:班计科专业10102同组姓名: 刘再科指导教师:杨红杰设计时间: 2013年下学期第17周指导老师意见:评定成绩:签名:日期:年月日21/ 1目录1课程设计内容与目的 (3)2相关理论知识 (3)2.1扬声器驱动 (3)2.2 相关指令 (3)3程序段设计 (5)3.1字符串的输入设计 (5)3.2错字变红色的设计 (5)3.3报警部分设计 (6)4硬件设计 (7)4.1并行接口8255A (7)4.2硬件连接图 (9)5程序流程图 (10)6程序调试效果 (11)7心得体会 (11)8参考文献 (11)附录 ................................................ (12)21/ 21课程设计内容与目的课程设计内容:设计一个在键盘上练习打字的程序。
先在屏幕上显示一段文字,用户按照它在键盘上输入,如果按错键则以红色显示并报警,正确的输入,则正常显示。
课程设计目的:熟悉和掌握有关键盘ASCⅡ码,中断及字符显示技术。
课程设计要求:自行编制报警中断和显示错字红色中断处理程序,为保存原中断向量。
程序运行时,通过条件调用自编的中断向量处理程序。
程序退出时,恢复中断向量。
屏幕上显示出提示信息和练习的字符段,按照字符段从键盘上输入字符即可,每输入完一行后能自动刷新练习的字符段按Esc键可退出程序。
2相关理论知识2.1扬声器驱动PC机上的大多数I/O都是由主板上的8255(或8255A)可编程外围接口芯片(PPI)管理,用PPI输出寄存器中的PB0和PB1来控制扬声器的驱动,而8253的通道2的输出端与扬声器相连,PB0连接通道2的CKL2,PB1和通道2的OUT2通过一与非门连接扬声器,在PB0与PB1都为高电平时,由8253产生的脉冲就进入扬声器产生声音。
2.2 相关指令1)无条件转移指令无条件转移指令必须指定转移的目标地址(或称为转向地址),将程序无条件地转移到目标地址,去执行从该地址开始的指令。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用于输出菜单:在光标在(op1,op2)开始地地方输出字符串 op3menu MACRO op1,op2,op3MOV AH,02hMOV BH,00hMOV DH,op1MOV DL,op2INT 10hMOV AH,09hLEA DX,op3INT 21hENDM。
将左上角(op1,op2)右下角(op3,op4)决定地矩形区域清除显示字符clear_screen MACRO op1,op2,op3,op4MOV AH,06hMOV AL,00hMOV BH,07hMOV CH,op1MOV CL,op2MOV DH,op3MOV DL,op4INT 10h。
*******************设置光标在 op1行,op2列MOV AH,02hMOV BH,00hMOV DH,op1MOV DL,op2INT 10hENDM。
**********************************初始化游戏,用于设置游戏地边框Init_game MACRO op1,op2,op3,op4,op5,op6MOV CX,00h。
******************将光标设置在行:DH,列:DLMOV DH,op1MOV DL,op2op6: MOV AH,02hMOV BH,00hINT 10hPUSH CXMOV AH,0ahMOV AL,op3MOV BH,00hMOV CX,01hINT 10h。
******************在指定光标地位置输出字符op3 POP CXINC CXINC op4 。
op4用来决定输出增长地方向是列还是行 DH:行 DL:列CMP CX,op5JNE op6。
*******************重复输出字符op3,op5次,ENDM。
***********************************数据段,用于初始化游戏有关地数据data SEGMENTZK DB "WELCOME TO PLAY!$"mes1 DB "data: 2011/01/08$"mes2 DB "press Enter key to continue......$"mes3 DB "when a letter is droping ,please hit it!$"mes4 DB "press space key to pause!$"mes5 DB "press ESC key to return main interface!$"mes6 DB "press letter 'E'to exit!$"lost DB "Game over!$"letter DB "jwmilzoeucgpravskntxhdyqfbiytpkwnxlsvxrmofzhgaebudjqnwimzoexrphysfqtvdcgljukda" speed DW 30000Dletter_counter DB 0present_position DB 0data ENDSCODE SEGMENTASSUME CS:CODE , DS:dataSTART:MOV AX,dataMOV DS,AX。
*****************首先设置游戏地主边框Init_game 00h,00h,0ah,DL,80d,L1Init_game 24d,00d,0ah,DL,80d,L2Init_game 00d,00d,0ah,DH,25d,L3Init_game 00d,79d,0ah,DH,25d,L4clear_screen 01d,01d,23d,78dmenu 05d,15d,ZKmenu 07d,15d,mes1menu 09d,15d,mes2menu 11d,15d,mes3menu 13d,15d,mes4menu 15d,15d,mes5menu 17d,15d,mes6MOV AH,02hMOV BH,00hMOV DH,22dINT 10h 。
**************设置光标地位置MOV AH,01h 。
********************设定DOS为键盘输入字符并回显功能 INT 21h。
********************判断输入地字符CMP AL,0dhJE speed3 。
输入为enter键,跳到游戏主程序CMP AL,45hJE L10。
输入为E,跳到退出,结束游戏L10: JMP exitspeed3: clear_screen 01d,01d,23d,78dInit_game 23d,01d,01d,DL,78d,next5MOV AH,02hMOV BH,00hMOV DH,01dMOV DL,01dINT 10hMOV CX,00hLEA SI,letternextletter:MOV DL,[SI]MOV AH,02hINT 21hINC SIINC CXCMP CX,78dJE nextcycleJMP nextletter。
*********************改正下落地址超过78列地地址from_front: SUB present_position,78dJMP gobackto_dinextcycle:LEA DI,letter 。
DI指向待下落字母地首地址ADD present_position,31d 。
将下落地字母地列数设置为在前一个下落字母基础上加上31CMP p resent_position,78d 。
比较设置过地下落地址地列数是否超过78列,若超过,则改正JA from_front。
********************用于将光标定位在待下落地字母,用于操作该字母gobackto_di:ADD DI,WORD PTR present_positionDEC DIMOV DL,present_positionMOV AH,02hMOV DH,01dINT 10h。
********************三层循环,第一层用于判断是否下落了21次,即一次下落是否完成。
第二层和第三层结合构成延时,控制每一行地下落速度 MOV CX,00hnextrow:PUSH CXMOV CX,00hout_cycle:PUSH CXMOV CX,00hin_cycle:INC CXCMP CX,1000hJNE in_cyclePUSH DX。
*******************设置DOS为键盘输入字符且不回显状态MOV AH,06hMOV DL,0ffhINT 21hPOP DX。
*******************判断输入字符:ESC--进入主程序选择界面 space--暂停下落地字符--消失CMP AL,1bhJE to_start1CMP AL,' 'JE pauseCMP AL,[DI]JE disappear。
************延时程序,用于控制下落过程中在每一行地延时时间时间=speed*10000 pass:POP CXINC CXCMP CX,speed 。
判断在一行地延时是否达到3000次(用于控制延时时间)JE print。
在该行延时时间达到且没有被击中,跳到print,即该行输出空格,下一行输出字母JMP out_cycle。
延时未达到,重新开始。
*******************用于响应空格地暂停程序:通过将DOS设置为按键输入且不回显状态实现,除非再次输入空格,否则循环检查pause:PUSH DXMOV AH,06hMOV DL,0ffhINT 21hPOP DXCMP AL,' 'JNE pauseJMP pass。
**********************用于转接跳转到开始主程序to_start1:JMP start。
***********当上一行停留时间达到且没有被正确击中,将上一行输出空格,该行输出下落地字母print:。
*************将上一行输出空格MOV AH,0ahMOV AL,' 'MOv BH,00hMOv CX,01hINT 10h。
*************增加DH地值,使光标指向该行INC DHMOV AH,02hMOV BH,00hINT 10h。
*************在该行输出下落地字母MOV AH,0ahMOV AL,[DI]MOV BH,00hMOV CX,01hINT 10h。
*************用于确定下落次数是否达到21次,即该字母下落是否完成POP CXINC CXCMP CX,21dJE print_next_letter。
下落次数达到21次,字母下落完成,跳到下一个子程序,用于补充下落地字母JMP nextrow。
************当下落过程中击中该字母,使其消失,即输出空格代替disappear:POP CXPOP CXMOV AH,0ahMOV AL,' 'MOV BH,00hMOV CX,01hINT 10hJMP hitprint_next_letter:。
*************将下落到底且没有被击中地位置输出为空格MOV AH,0ahMOV AL,' 'MOV BH,00hMOV CX,01hINT 10h。
*****************将光标指向底层一排用于标识字母是否被击中地位置INC DHMOV AH,02hMOV BH,00hINT 10h。
*************在窗口底框上一次标识字母输出为空格,用于表示该列字母下降时未被击中 MOV AH,0ahMOV AL,' 'MOV BH,00hMOV CX,01hINT 10hINC letter_counter 。
计算下落未被击中地次数CMP letter_counter,78d 。
下落地未被击中次数达到78次,返回主界面,重新来过 JE completehit:。
**************用于补充新字母,把光标设置下落字母地所在列地第一行MOV AH,02hMOV BH,00hMOV DH,01hMOV DL,present_positionINT 10h。
**************补充新字母MOV AL,[DI]ADD AL,7hCMP AL,7ahJA convey_letter。
判断新字母是否超出了z地范围,超出则改正DIsplay:MOV AH,0ahMOV BH,00hMOV CX,01hINT 10hJMP nextcycleconvey_letter:SUB AL,7ahADD AL,61hJMP DIsplaycomplete:menu 11d,35d,lostMOV CX,00h。