一个有趣的汇编打字游戏

;--------------------------------------------------------------------------------
;此模板是纯DOS程序代码,需要MASM5.0,编译时请使用"编译 -> DOS"方式。
;--------------------------------------------------------------------------------
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,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

linjiang db "Made by lin jiang$"
no db "NO.:021411$"
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 "The letter is arrive the bottom, You are lost ! :($"
failmeg0 db "Press ENTER to go on......$"
failmeg1 db "Game is 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 "jwmilzoeucgpravskntxhdyqfb"
db "iytpkwnxlsvxrmofzhgaebudjq"
db "nwimzoexrphysfqtvdcgljukda"

letters_bak db "jwmilzoeucgpravskntxhdyqfb"
db "iytpkwnxlsvxrmofzhgaebudjq"
db "nwimzoexrphysfqtvdcgljukda"

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,00h

init_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,0ah,dl,80d,nextsign1

Init_game 24d,00d,0ah,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,linjiang
menu 03d,20d,meg1
menu 03d,68d,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
mov dl,33d
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
int 21h
cmp al,0dh
jne otherkey
mov ax,speed+2
mov speed,ax
jmp begin

speed2: mov ah,01h
int 21h
cmp al,0dh
jne otherkey
mov ax,speed+4
mov speed,ax
jmp begin

speed3: mov ah,01h
int 21h
cmp al,0dh
jne otherkey
mov ax,speed+6
mov speed,ax
jmp begin

speed4: mov ah,01h
int 21h
cmp al,0dh
jne otherkey
mov ax,speed+8
mov speed,ax
jmp begin

speed5: mov ah,01h
int 21h
cmp al,0dh
jne otherkey
mov ax,speed+10
mov speed,ax
jmp begin

speed6: mov ah,01h
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,01h,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]
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


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
pop cx

mov ah,0ah
mov al," "
mov bh,00h
mov cx,01h
int 10h


jmp hit


print_next_letter: ; 处理原位置的空缺
lea si,life_flag
add si,word ptr present_position
dec si

mov ah,[si]
cmp ah,1
je fail

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," "
mov bh,00h
mov cx,01h
int 10h


mov ah,1
mov [si],ah


hit: mov ah,02h
mov bh,00h
mov dh,01h
mov dl,present_position
int 10h

mov al,[di] ; 出现下一个新字母的数法
add al,7
cmp al,7ah
ja convey_letter
mov ah,0ah
mov bh,00h
mov cx,01h
int 10h

mov [di],al
add letter_counter,01h
jmp nextcycle

convey_letter:
sub al,7ah
add al,61h
mov ah,0ah
mov bh,00h
mov cx,01h
int 10h

mov [di],al
add letter_counter,01h
jmp nextcycle

fail: mov ah,0ah ;游戏失败后的相关处理
mov al," "
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

mov ah,02h
mov bh,00h
mov dh,12d
mov dl,17d
int 10h

push dx
mov ah,09h
lea dx,failmeg
int 21h
pop dx

add dh,2
mov ah,02h
mov bh,00h
int 10h

mov ah,09h
lea dx,failmeg0
int 21h

re: mov ah,07h
int 21h
cmp al,0dh
jne re


clear_screen 01,01,23,78
mov ah,02h
mov bh,00h
mov dh,11d
mov dl,20d
int 10h

push dx
mov ah,09h
lea dx,failmeg1
int 21h
pop dx

inc dh
inc dh
mov ah,02h
mov bh,00h
int 10h

mov ah,09h
lea dx,failmeg2
int 21h

notkey:
mov ah,07h
int 21h
cmp al,0dh
je to_start
cmp al,1bh
je over
jmp notkey
to_start:
clear_screen 00,00,24,79
jmp start

over: clear_screen 01,01,23,78
mov ah,02h
mov bh,00h
mov dh,11d
mov dl,15h
int 10h

mov ah,09h
lea dx,failmeg3
int 21h

mov ah,02h
mov bh,00h
mov dh,13d
mov dl,15h
int 10h

mov ah,09h
lea dx,failmeg4
int 21h

mov ah,07h
int 21h

mov ah,07h
int 21h

clear_screen 00,00,24,79

mov ax,4c00h
int 21h


main endp
code ends
end start 

投 票

觉得本文不错,投一票   

评 论

  • 嵌入式在线网友  2008-5-24 11:08:13
  • 嵌入式在线网友
    论翻译公司间谍案与中西方文化差异
    据美国《华盛顿时报》网站12月21日报道,美国情报官员说,中国方面曾通过一个中文翻译服务机构以获得美国国家安全局设在夏威夷的一个监听站的情报。这个间谍渗透案是在几年前海军部犯罪调查局进行的一次重大反情报调查中发现的。这次反情报调查揭露了中国方面窃取密码和其它电子情报机密,以及招募有关军事和文职人员的一个大型项目。 官员说,中国方面通过在夏威夷设立一家中文[URL http://www.jiayinte.com]翻译公司[/URL]来执行间谍行动。中方将这家公司伪装成一家来自美国的企业。这一计策使海军和国家安全局同该公司签订了机密合同。根据合同,该公司帮助翻译国家安全局所截获的情报中的一些信息。
    海军部犯罪调查局还发现了一个重大的中国情报行动。该行动的目的是招募美国华裔担任间谍,并招募可以获得那家情报站机密情报的海军和文职情报工作人员。我们可以看到,美国的情报人员在中国威胁论这样接近于变态的指导思想下去勾画出这样一个故事并不是为了制造新闻赚个噱头,而是别有用心的想从各个方面证明中国的发展确实对世界的安全和对别国有着严重的威胁。
    为什么美国人对中国的发展和崛起越来越敏感?为什么美国人没有看到中国的发展为世界经济的发展做出了卓越贡献?难道占世界总人口五分之一的中国如果真的是一个饥饿落后的中国,那世界就和平和安全了吗?所有的这些问题,归根到底是反映出这样一个事实,那就是中国的确在发展中崛起,而美国对中国的发展越来越不感冒。
    稍微有些常识的人都知道,[URL http://www.jiayinte.cn]翻译公司[/URL]的运作和经营都是纯粹的商业行为,在中国,有大约3000家[URL http://www.meilun88.com]翻译公司[/URL],而从事翻译工作的翻译机构、翻译社和个人更是数不胜数。随着我国的经济发展和对外开放,中国和外国的沟通交流与协作越来越密集,因此,最近十年来,翻译行业得到了迅猛的发展,据有关部门统计,2008年翻译市场的总交易额将会达到300亿美金。国内的有关企业抓住机遇,迅猛发展,有不少[URL http://www.jiayinte.net/fygs]翻译公司[/URL]和机构都在世界各地建立起自己的分支机构。目前笔者对国内一些著名的翻译公司进行了电话咨询,这些公司在美国都设有办事机构。北京某著名翻译公司的负责人说:“这纯属无稽之谈,在国内翻译业务涉及的主要范畴是商业方面的内容,稍微涉及商业机密以及高、精、尖的技术文件都还
  • 嵌入式在线网友  2008-5-24 11:09:19
  • 嵌入式在线网友
    需要签署严格的保密协议,除非美国人的脑子里面进水了,把有关国家机密这样重要的内容交给中方的[URL http://www.jiayinte.cn]翻译公司[/URL]来完成。打个比方说吧,就象在中国你把人民大会堂的监控设备交给美国科技公司完成安装调试是一样的,稍微有些常识的人都会知道这是不可能的。而美国方面抓住这一点做文章,简直象跳梁小丑。”
    美国人没有文化,这是众所周知的事情。这个仅仅有200多年历史的牛仔国家没有象我泱泱大国那5000年文化历史的沉淀,没有我中华优秀的道德传统美德,也没有仁、义、礼、智、信的文化浸泡,而是采用那所谓的牛仔智慧,采用胡萝卜加大棒的简单外交政策,能打得过你,就灭你,打不过你,递给你一根胡萝卜。没教养。他们不知道他们的一些言论和做法已经伤害了热爱和平和热爱生活的十几亿人民,也不懂得多行不义必自毖的道理。毖的意思不是枪毙,不是要把谁灭掉的意思,而是“跌倒”的意思,懂吗?我们中国人温文尔雅,从不说灭掉谁这样的脏话,而是把你弄倒,给你一个教训罢了。唉,美国人没有文化,真可怜,跟他们说什么也不懂,翻译成英文吧—Persisting in Evil brings self-destruction…这样可以警告一下。
    欢迎到我[URL http://www.jiayinte.cn]bbs[/URL]上发表议论。
    [URL http://www.jiayinte.cn]http://www.jiayinte.cn[/URL]


验证码: 看不清?换一张