assume cs:code,ds:data,ss:stack

data segment
 dw 200 dup(0) ;--蛇身坐标
 dw 0,0,0  ;--存储原始9号中断
data ends

stack segment STACK

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
cli
s1:
  
 call movnext

call delay
sti
        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
 
 add dh,bh
 add dl,bl

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],12
 ja level2
 cmp word ptr ds:[404],10
 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  ;--秒数十位在ah  个位在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汇编 贪吃蛇 源代码相关推荐

  1. 8086汇编贪吃蛇(随机食物+速度递增)

    基于8086实现的贪吃蛇 [cpp] view plaincopy assume cs:code,ds:data data segment dw 200 dup(0)   ;--蛇身坐标 dw 0,0 ...

  2. H5网页版贪吃蛇源代码

    H5网页版贪吃蛇源代码,新建文本文档,将下面的代码复制粘贴到文本文档,然后保存文件.重命名文件及后缀名为index.html.将文章最下面的两个图片保存下来,蓝色背景大图重命名为back.jpg,骷髅 ...

  3. 简单贪吃蛇c语言代码,一个C语言写简单贪吃蛇源代码.doc

    一个C语言写简单贪吃蛇源代码 #include #include #include #include #include #include int grade=5,point=0,life=3; voi ...

  4. 贪吃蛇统计分数的c语言代码,C/C++编程笔记:C语言贪吃蛇源代码控制台(二),分数和食物!...

    接上文<C/C++编程笔记:C语言贪吃蛇源代码控制台(一),会动的那种哦!>如果你在学习C语言开发贪吃蛇的话,零基础建议从上一篇开始哦!接下来正式开始吧! 三.蛇的运动 上次我已经教大家画 ...

  5. C语言七彩贪吃蛇源代码---AI自动寻径,分数排行,数据保存,背景音乐难度设置等 控制台小游戏

    ------------------------------------------------------------------------------------------- 七彩贪吃蛇小游戏 ...

  6. x8086千行汇编项目——汇编贪吃蛇、画图、两个程序的调度

    特别说明:本博客草稿创建于2018年12月5日(设为私密文章),这已经是作品提交截止日期以后,不过为了进一步避免不必要的麻烦将会在比赛彻底结束后发布为公开文章. 发布日期:2018/12/8 12:0 ...

  7. JAVA:贪吃蛇源代码

    嘿嘿 新手来 表现了!!! 2019年结束 游戏截图: 文件布局: 代码分享 用到的一些全局变量 //全局变量 public class Global {public static final int ...

  8. 贪吃蛇c语言自动寻路,C/C++编程笔记:C语言贪吃蛇源代码控制台(一),会动的那种哦!...

    前几天有个同学加我QQ私聊我说他们老师布置了一个贪吃蛇,他不知道怎么写所以来找我求解,我给他简单讲解了思路和一些难点之后他也能够自己独立将项目完成了!考虑到更多同学可能有贪吃蛇上的问题,今天有时间就来 ...

  9. c语言贪吃蛇源代码window32,Win32贪吃蛇源代码。背景非常简单

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 } VOID OnTimer(HWND hWnd){ GAME_RESULT res = snake.move(); if(res != GAME_CON ...

最新文章

  1. 吃货告诉你IaaS、PaaS、SaaS之间的区别
  2. html5 键盘触发事件
  3. 互联网天生本质与产业大局的开始
  4. java.lang.arr_jxl操作java.lang.ArrayIndexOutOfBoundsException: 441 错误的解决
  5. Linux环境下进入MySQL环境报权限问题:Access denied for user 'root@localhost' (using password:YSE)...
  6. php7.3 安装详解,php7.3.20以及常用拓展安装
  7. 乌当区利用大数据织密环境监测保护网
  8. 面向对象和面向过程连接数据库
  9. (一)Windows环境下汇编编程读书笔记
  10. uwp连接mysql数据库_在 UWP 应用中使用 SQLite 数据库
  11. Linux中Docker的yum源与镜像加速器
  12. 从入门到入土:在kali中安装Nessus详细操作
  13. matlab 可视化 —— 高级 api(montage)、insertObjectAnnotation、insertMaker
  14. java垃圾回收机制GC
  15. 【转载】MySQL5.6.27 Release Note解读(innodb及复制模块)
  16. Ueditor、FCKeditor、Kindeditor编辑器漏洞
  17. 批量处理文件内容数据
  18. 360提高计算机运行速度,360安全卫士如何提高开机和运行速度
  19. Visual Odometry
  20. 今天是元旦节,可是我失恋了

热门文章

  1. AtCoder Grand Contest 008: Contiguous Repainting(思维)
  2. 安装laravel5.1项目命令
  3. 11月25日struts培训日记
  4. Msfvenonm生成后门
  5. 【数据结构与算法】之深入解析“H指数”的求解思路与算法示例
  6. 百练 1363.Rails
  7. 二进制信号在信噪比为127:1的4kHz信道上传输,最大数据传输速率可以达到( )
  8. 2015年第六届蓝桥杯 - 省赛 - C/C++大学B组 - C. 三羊献端
  9. 141. Linked List Cycle 环形链表
  10. 【机器视觉】 exit算子