8086汇编贪吃蛇(随机食物+速度递增)
生活随笔
收集整理的這篇文章主要介紹了
8086汇编贪吃蛇(随机食物+速度递增)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
基于8086實現的貪吃蛇
[cpp]?view plaincopy assume?cs:code,ds:data?? ?? data?segment?? ????dw?200?dup(0)???;--蛇身坐標?? ????dw?0,0,0????????;--存儲原始9號中斷?? data?ends?? ?? stack?segment??? ????db?100?dup(0)?? stack?ends?? ?? code?segment?? ?? start:?? ;;-----------------將原始的9號中斷存在data斷的最后,再把9號地址換掉到offset?int9?? ????mov?ax,0?? ????mov?es,ax?? ?? ????mov?ax,data?? ????mov?ds,ax?? ?? ????push?es:[9*4]?? ????pop?ds:[400]?? ?? ????push?es:[9*4+2]?? ????pop?ds:[402]?? ?????? ????mov?word?ptr?es:[9*4],offset?int9?? ????mov?word?ptr?es:[9*4+2],cs?? ?? ;;------------------?? ????mov?ax,stack?? ????mov?ss,ax?? ????mov?sp,100?? ?? ????????mov?ax,0b800h?? ????????mov?es,ax?? ;;-----------------snake的初始化?? ????????mov?bx,0?? ?? ????????mov?cx,10?? s:??????mov?ds:[bx],cx?? ????????add?bx,2?? ????????loop?s?? ????mov?word?ptr?ds:[404],9?? ?? ????call?putfood?? ????mov??bx,0001h?? ????mov?cx,60000?? s1:?? ????call?movnext?? ????call?delay?? ?? ????????loop?s1?? ?? ;;------------恢復中斷向量,程序結束?? end_snake:?? ????mov?ax,0?? ????mov?es,ax?? ?? ????push?ds:[400]?? ????pop?es:[9*4]?? ????push?ds:[402]?? ????pop?es:[9*4+2]?? ?? ????mov?ax,4c00h?? ????????int?21h?? ;------------------------------壁障=遇到墻壁或者咬到自己就退出?? die_or_not:?? ????cmp?dl,-1?? ????je?die?? ?? ????cmp?dl,80?? ????je?die?? ?? ????cmp?dh,-1?? ????je?die?? ?? ????cmp?dh,50?? ????je?die?? ?? ????call?putchar?? ????cmp?byte?ptr?es:[di],0fh?? ????je?die?? ?? ????jmp?no_die?? die:?? ????jmp?end_snake?? ?? no_die:?? ????ret?? ;------------------------------移動蛇身的?? movnext:?? ????????push?dx?? ????????push?cx?? ????????push?ax?? ?? ????????mov?si,0?? ????????mov?dx,ds:[si]?? ????mov?ax,dx?? cli?? ????add?dh,bh?? ????add?dl,bl?? sti?? ????call?die_or_not?? ????????mov??ds:[si],dx?? ?? ????call?putchar?? ????cmp?word?ptr?es:[di],0403h?? ????mov?word?ptr?es:[di],0A0fh?? ????jne?pc_go?? ?? ????mov?di,ds:[404]?? ????add?di,di?? ?? ????push?ds:[di]?? ????pop?ds:[di+2]?? ????inc?word?ptr?ds:[404]?? ????call?putfood?? pc_go:?? ?? mn1:?????? ????add?si,2?? ????cmp?word?ptr?ds:[si],0?? ????je?mn_ok?? ?? ????mov?dx,ds:[si]?? ????call?putchar?? ????mov?word?ptr?es:[di],0?? ?? ????????mov?dx,ax?? ????call?putchar?? ????mov?word?ptr?es:[di],0A0fh?? ?? ????mov?ax,ds:[si]?? ????????mov?ds:[si],dx?? ????jmp?mn1?? ?? mn_ok:??pop?ax?? ????????pop?cx?? ????????pop?dx?? ret?? ;;----------int9-----------------上48?下50??左4B???右4D?? int9:?? ????push?ax?? ????push?es?? ????push?cx?? ?? ????in?al,60h?? ????pushf?? ?????? ????call?dword?ptr?ds:[400]?? ????cmp?bl,0?? ????je?zy?? ?????? sx:?? ????cmp?al,48h?? ????jne?int9x1?? ????mov?bx,0ff00h????? int9x1:?? ????cmp?al,50h?? ????jne?int9x2?? ????mov?bx,0100h?? ?? int9x2:?jmp?int9ok?? ?? zy:?? ????cmp?al,4bh?? ????jne?int9x3?? ????mov?bx,00ffh?????? int9x3:??? ????cmp?al,4Dh?? ????jne?int9x4?? ????mov?bx,0001h?? int9x4:?? ?? int9ok:?? ????pop?cx?? ????pop?es?? ????pop?ax?? ?? ????iret?? int9_end:nop?? ;--------------------------------?? putchar:?? ????push?dx?? ????push?ax?? ?? ????mov?ax,00a0h?? ????mul?dh?? ????mov?dh,0?? ????add?dl,dl?? ????add?ax,dx?? ????mov?di,ax?? ?? ????pop?ax?? ????pop?dx?? ret?? ;---------------------------------?? delay:?? ????push?cx?? ?? ????mov?ch,0bh?? ?? ????cmp?word?ptr?ds:[404],24?? ????ja?level4?? ????????cmp?word?ptr?ds:[404],20?? ????ja?level3?? ????cmp?word?ptr?ds:[404],15?? ????ja?level2?? ????cmp?word?ptr?ds:[404],12?? ????ja?level1?? ?? ????jmp?normal?? ?? level4:?? ????shr?ch,1?? ????shr?ch,1?? level3:?? ????shr?ch,1?? ?? level2:?? ????shr?ch,1?? ?? level1:?shr?ch,1?? ?? normal:??? ?? ????mov?cl,0ffh?? ????dn1:?? ????push?cx?? ????mov?cx,0ffffh??? ????dn2:loop?dn2?? ?????? ????pop?cx??? ????loop?dn1?? ????pop?cx?? ret?? ;;-----------------------------------根據時間變化隨機產生食物?? ?? putfood:?? ????????push?ax?? ????????push?dx?? ????push?cx?? ????push?bx?? put_again:?? ?? ????mov?al,0?? ????out?70h,al?? ????in?al,71h?? ?????? ????mov?ah,al?? ????mov?cl,4?? ????shr?ah,cl????;秒數十位在ah??個位在al?? ?? ????and?al,00001111b?? ????push?ax?? ?????? ????mov?ah,0?? ?????? ????mov?dh,8?? ????mul?dh?? ????mov?dl,al?? ?????? ????pop?ax?? ?? ????sub?al,al?? ????mov?al,ah?? ????add?al,dl?? ?? ????mov?cl,23?? ????div?cl?? ?? ????mov?dh,ah?? ;;-------------------防止隨機產生的食物,在蛇身上?? ????mov?cx,ds:[404]?? ????mov?bx,0?? pt1:????cmp?word?ptr?ds:[bx],dx?? ????je?put_again?? ????add?bx,2?? ????loop?pt1?? ;;-------------------?? ????call?putchar?? ????mov?word?ptr?es:[di],0403h?? ?? pf_end:?pop?bx?? ????pop?cx?? ????????pop?dx?? ????????pop?ax?? ret?? ?? code?ends?? end?start?
總結
以上是生活随笔為你收集整理的8086汇编贪吃蛇(随机食物+速度递增)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言中main函数的研究,以及对代码断
- 下一篇: DEBUG各命令详细说明(很详细)