汇编打字程序完整代码.docx_第1页
汇编打字程序完整代码.docx_第2页
汇编打字程序完整代码.docx_第3页
汇编打字程序完整代码.docx_第4页
汇编打字程序完整代码.docx_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

汇编打字程序完整代码 已经经过测试,可以直接使用Init_game macro op1,op2,op3,op4,op5local nsmov cx,00h mov dh,op1 mov dl,op2ns:mov ah,02h;设置光标位置mov bh,00h;页号为0 int 10hpush cxmov ah,0ah;在当前光标位置写字符mov al,op3;al=字符的ascii码mov bh,00h;bh=页号bl=字符属性mov cx,01h;cx=写入字符重复次数int 10hpop cx;cx=0inc cx;cx=cx+1inc op4cmp cx,op5jne ns endmclear_screen macro op1,op2,op3,op4 ;清屏宏定义 cx,屏幕的左上角,dx屏幕的右下角mov ah,06h mov al,00hmov bh,0ah;改变行属性的色彩,字的色彩,bh空白行的属性/07就是正常的黑底白字mov ch,op1mov cl,op2mov dh,op3mov dl,op4int 10hmov ah,02h;设置光标的位置从0000开始mov bh,00hmov dh,00hmov dl,00hint 10hendmmenu macro op1,op2,op3 ;菜单显示宏定义 mov ah,02hmov bh,00hmov dh,op1mov dl,op2int 10hmov ah,09hlea dx,op3int 21hendmdata segment ZK db WELCOME TO PLAY!$ no db date:2014/4/7 BY luozhilei QQ:1121364692 $meg db press Enter to start.$meg1 db when a letter is dropping,please hit it!(just press the$ meg2 db dropping letter,so easy!)$meg3 db press space key to pause!repress space to continue!$meg4 db press ESC key to return main menu!$meg5 db press letter E to exit!$meg6 db version 1.0,$speed dw 600dletters_bak db jwmilzoeucgpravskntxhdyqfb db iytpkwnxlsvxrmofzhgaebudjqdb nwimzoexrphysfqtvdcgljukdaletters db 78d dup(0)letter_counter db 0 life_flag db 78 dup(0)position_flag db 78 dup(0) present_position db 1 data endsstack segment para stack stackdb 64 dup(0)stack endscode segmentmain proc farassume cs:code,ds:data,ss:stackstart: mov ax,datamov ds,axmov letter_counter,00h mov present_position,1 lea si,position_flag; mov ah,00hmov cx,00h-lea di,letters;di的偏移地址为letters lea si,letters_bak;si的偏移地址为letter_bakmov cx,00h;cx=0init_letters:mov ah,si;ah=jmov di,ah;ah的值放到letters里面;letters_bak的值放入letters里面inc si;si+1inc di;di+1inc cx;cx+1cmp cx,78d;jne init_letters;不为0就到init_letters,一直循环到letters里mov ah,00hlea si,life_flag;mov cx,00hover后,自动回去吧init_life_flag:mov si,ahinc siinc cxcmp cx,78djne init_life_flag;-mov cx,00h ;ch=光标开始行,cl=光标结束行 根据CX给出光标的大小 mov ah,01h or ch,00010000b;ch20h,光标消失,cl20h,覆盖字符int 10hclear_screen 00d,00d,24d,79d ;清屏,0000- 2479Init_game 00d,00d,07h,dl,80d ;这个四个是初始化屏幕的上下左右的框框 Init_game 24d,00d,07h,dl,80dInit_game 00d,00d,07h,dh,25dInit_game 00d,79d,07h,dh,25dmenu 05d,15d,ZK ;菜单信息的宏调用,这五行是在屏幕上显示提示消息menu 07h,15d,no menu 09d,15d,megmenu 11d,15d,meg1menu 13d,10d,meg2menu 15d,15d,meg3menu 17d,15d,meg4menu 19d,15d,meg5menu 21d,15d,meg6put: mov ah,02h ;设置光标位置mov bh,00h;设置页码mov dh,22d;dx行列坐标mov dl,33dint 10hmov ah,01h ;从键盘输入任意字符并回显示,al=输入字符int 21hcmp al,0dh;是否为换行符je speed3;如果是换行符则跳转到speed3处cmp al,45h;比较是否为eje exit;如果为e,转到exitexit: mov ah,4chint 21h speed3: mov ax,speed+12mov speed,axjmp beginbegin: clear_screen 01d,01d,23d,78d ;清屏宏调用 ; clear_screen 01d,01d,23d,78d Init_game 23d,01d,03h,dl,78d;23d01d行列坐标,初始化倒数第二行的字符mov ah,02h mov bh,00hmov dh,01hmov dl,01hint 10hmov cx,00h lea si,letters ;si的偏移地址是lettersnextletter: mov ah,02h ;显示字母mov dl,si ;把letters的字符放到dl里int 21h ;通过dos中断的2号功能项,把字符显示出来inc siinc cxcmp cx,78d je nextcycle;全部显示完了后,跳到nextcyclejmp nextletterfrom_front: sub present_position,78d ;当超过78个字时的处理方式 减去78 jmp gobackto_si;跑到gobackto_si这来find_zero:cmp letter_counter,78d ;letter_counter有78了,初始化je recycle;如果有跑到recyclecmp present_position,78d;如果present_position等于78d,je from_onemov ah,00hnextsi: add present_position,01hinc sicmp si,ahje gobackto_dicmp present_position,78dje from_onejmp nextsifrom_one:mov present_position,01h ;present_position=01 jmp gobackto_si;-recycle:mov letter_counter,00h;letter_counter=0mov present_position,01d;present_position=01lea si,position_flag;si=position_flag的偏移地址mov cx,00hmov ah,00hclearsi: mov si,ah;position_flag地址搞成0inc cxcmp cx,78dje nextcycleinc sijmp clearsinextcycle: lea di,letters;di的偏移地址是letters字母lea si,position_flag;si的偏移地址是position_flagadd present_position,31d;31一跳,这个你可以随便设置cmp present_position,78d;超过78个字节ja from_front;-gobackto_si:add si,word ptr present_position;si=si+present_position,si向后偏移dec si; 要不要都无所谓,只不过,因为开始就觉定了是要31一跳,所以这里减一个1位mov ah,si;把position_flag放到ah里cmp ah,01h;看看position_flag里面有没有标志1je find_zero;如果ah为1转移,否则gobackto_di:mov ah,01hmov si,ahadd di,word ptr present_positiondec di;因为列坐标是从0开始,而字符是从1开始,所以这里是32-1mov dl,present_position;mov ah,02h mov bh,00h mov dh,01hint 10hmov cx,00h;-nextrow: push cx mov cx,00hout_cycle: ; 延迟push cxmov cx,00hin_cycle:add cx,01hcmp cx,1000 ;jne in_cycle ;zf=0转到标号处执行,push dxmov ah,06h ;从键盘输入字符,al等于字符mov dl,0ffhint 21hpop dx jz 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 startprint: mov ah,0ah ;在当前光标位置写空格 mov al, mov bh,00hmov cx,01hint 10hinc dhmov ah,02h ;改变光标位置mov bh,00hint 10hmov ah,0ah ;在当前光标位置写字母 mov al,dimov bh,00hmov cx,01hint 10hpop cxinc cxcmp cx,21dje print_next_letterjmp nextrow ;下一行disappear: ;击中字母后输出空格pop cxpop cxmov ah,0ah;在光标处按原来属性显示字符mov al, mov bh,00hmov cx,01hint 10hjmp hit print_next_letter: lea si,life_flagadd si,word ptr present_positiondec simov ah,0ah;在当前光标处按原有属性显示字符mov al, ;最倒数第二排写入字符,意思是当掉下来的字符到倒数第二行的时候,自动变成空格消失mov bh,00hmov cx,01hint 10hinc dh ;这就是到了最后一行 mov ah,02hmov bh,00hint 10hmov ah,0ah;把最后一行的字符变成空格mov al, mov bh,00hmov cx,01h;重复输出,这里的重复输出的意思就是输入一个空格int 10hmov ah,1;把life_flag变成1,这样下次就可以不在同一个位置掉字符下来mov si,ahhit: mov ah,02h;设置光标mov bh,00hmov dh,01h;第一行mov dl,present_position;下一个字符的列int 10hmov al,di ; 出现下一个新字母的数法add al,7;di+7cmp al,7ah;z的ascii码就是7ah,所以当al大于7ah时转移ja convey_lettermov ah,0ah;在当前光标按原有属性显示字符,al=字符mov bh,00hmov cx,01hint 10hmov di,aladd letter_counter,01h;统计次数jmp nextcycleconvey_letter:

温馨提示

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

评论

0/150

提交评论