《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 解決方案 > 匯編源代碼之一個有趣的打字游戲

匯編源代碼之一個有趣的打字游戲

2017-07-23
關鍵詞: 匯編語言

此模板是純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


本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
国产视频在线观看一区二区三区| 欧美电影资源| 亚洲国产精品女人久久久| 亚洲一区高清| 亚洲视频在线观看网站| 日韩视频免费在线观看| 亚洲国产一二三| 亚洲第一成人在线| 一区精品在线| 亚洲高清精品中出| 亚洲国产精品久久久久久女王 | 国产精品青草综合久久久久99 | 久久国产黑丝| 欧美一级久久| 欧美一区日韩一区| 欧美自拍丝袜亚洲| 欧美一级专区免费大片| 香港久久久电影| 欧美在线www| 久久精品卡一| 久久中文字幕一区| 蜜臀久久99精品久久久久久9 | 红桃av永久久久| 一区在线观看视频| 亚洲黄色精品| 99re8这里有精品热视频免费| 日韩视频中文字幕| 一区二区三区|亚洲午夜| 在线视频亚洲| 午夜精品久久久久久久蜜桃app | 欧美日韩激情网| 欧美少妇一区| 国产精品入口| 国语精品中文字幕| 最新亚洲激情| 中日韩视频在线观看| 午夜精品在线观看| 亚洲国产第一| 99热这里只有成人精品国产| 亚洲一区日韩| 久久国产精品久久久| 你懂的视频欧美| 欧美日韩国产一中文字不卡| 国产精品毛片va一区二区三区 | 国产日产精品一区二区三区四区的观看方式 | 亚洲第一色在线| 日韩一区二区免费高清| 亚洲尤物在线视频观看| 亚洲国产成人porn| 日韩午夜电影av| 亚洲欧美日韩一区二区三区在线| 欧美专区在线观看| 欧美成人免费全部| 国产精品每日更新在线播放网址| 国产主播精品在线| 日韩一区二区久久| 欧美一区国产一区| 日韩视频欧美视频| 欧美在线不卡| 欧美日韩国产大片| 国产亚洲综合性久久久影院| 最新日韩在线视频| 午夜视频久久久| 亚洲乱码精品一二三四区日韩在线 | 一区二区三区四区五区视频| 欧美一区二区三区四区在线| 免费影视亚洲| 国产精品女人毛片| 亚洲国产高清自拍| 亚洲免费一区二区| 亚洲精品一区二区三区樱花 | 欧美啪啪成人vr| 国产视频综合在线| 日韩午夜电影在线观看| 久久精品国产免费| 午夜视频一区在线观看| 欧美激情综合网| 国产在线观看91精品一区| 一区二区三区免费看| 亚洲第一主播视频| 午夜精品婷婷| 欧美日韩免费视频| 一区二区高清| 国产精品日韩欧美一区二区| 亚洲电影免费观看高清| 午夜亚洲视频| 亚洲小说春色综合另类电影| 狂野欧美一区| 国产日韩精品在线播放| 一区二区三区波多野结衣在线观看| 亚洲国产午夜| 久久国产免费看| 国产精品久久久久毛片软件 | 国产一区二区三区精品欧美日韩一区二区三区 | 美女主播一区| 国产又爽又黄的激情精品视频| 日韩网站在线看片你懂的| 亚洲福利av| 久久激情婷婷| 国产精品视频自拍| 在线综合亚洲欧美在线视频| 亚洲美女少妇无套啪啪呻吟| 久热爱精品视频线路一| 国产一区二区三区成人欧美日韩在线观看 | 欧美激情一区二区三区蜜桃视频| 男人插女人欧美| 国产在线视频欧美| 午夜精品av| 亚洲欧美伊人| 欧美亚男人的天堂| 亚洲免费观看高清完整版在线观看| 亚洲国产综合在线| 久久综合999| 国语自产精品视频在线看8查询8| 香蕉av777xxx色综合一区| 亚洲欧美日韩国产| 国产精品99一区二区| 夜夜爽www精品| 在线视频欧美日韩| 欧美精品一区二区三区在线播放 | 午夜精品福利一区二区三区av| 欧美色欧美亚洲高清在线视频| 亚洲欧洲在线观看| 亚洲精品少妇30p| 欧美成人情趣视频| 亚洲激情自拍| 一区二区三区日韩在线观看| 麻豆精品视频在线观看| 欧美成年人视频网站| 亚洲第一天堂av| 亚洲美女诱惑| 欧美日韩1080p| 亚洲毛片在线看| 亚洲午夜国产成人av电影男同| 欧美三级第一页| 亚洲视频一二| 欧美一级成年大片在线观看| 国产欧美一区二区三区在线老狼| 欧美一级二级三级蜜桃| 久久久高清一区二区三区| 黄色日韩网站| 亚洲欧洲日产国码二区| 欧美精品色综合| 中文国产成人精品久久一| 午夜在线a亚洲v天堂网2018| 国产欧美精品xxxx另类| 久久成人免费日本黄色| 免费成人网www| 亚洲精品美女久久久久| 亚洲小视频在线| 国产日韩欧美精品| 亚洲激情二区| 欧美午夜免费| 欧美在线|欧美| 欧美高潮视频| 中文久久精品| 久久精视频免费在线久久完整在线看| 黄色国产精品| 夜夜爽99久久国产综合精品女不卡| 国产精品成人观看视频国产奇米| 新67194成人永久网站| 男女精品视频| 亚洲视频成人| 久色成人在线| 一本色道久久综合亚洲精品按摩 | 欧美一区二区三区四区高清| 精品88久久久久88久久久| 一区二区三区四区五区视频| 国产美女精品人人做人人爽| 亚洲国产一区二区精品专区| 欧美视频在线一区| 欧美一区二视频| 欧美日韩在线观看一区二区| 久久se精品一区精品二区| 麻豆国产精品va在线观看不卡| 日韩亚洲一区在线播放| 久久狠狠久久综合桃花| 最新中文字幕亚洲| 久久成人精品无人区| 91久久国产自产拍夜夜嗨| 亚洲一区图片| 影音先锋中文字幕一区| 亚洲欧美精品suv| 亚洲成色777777女色窝| 亚洲欧美国产日韩天堂区| 禁断一区二区三区在线| 亚洲欧美日本伦理| 91久久国产自产拍夜夜嗨| 欧美在线免费看| 亚洲精品日韩综合观看成人91| 欧美在线视频一区| 亚洲三级视频| 久久久久久一区| 中日韩男男gay无套| 欧美v日韩v国产v| 午夜精品久久久久久久99黑人| 欧美日韩国产探花| 亚洲国产欧美在线| 国产区亚洲区欧美区| 亚洲在线一区|