日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

8086汇编 贪吃蛇 源代码

發(fā)布時間:2024/4/18 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 8086汇编 贪吃蛇 源代码 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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

data segment
?dw 200 dup(0)?;--蛇身坐標(biāo)
?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

;;------------恢復(fù)中斷向量,程序結(jié)束
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
;;-----------------------------------根據(jù)時間的隨機性變化產(chǎn)生食物
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? ;--秒數(shù)十位在ah? 個位在al

?and al,00001111b
?push ax
?
?mov ah,0
?mov dh,8
?mul dh
?mov dl,al
?
?pop ax??;--秒數(shù)十位在ah? 個位在al
?mov al,ah
?add al,dl

?mov cl,23
?div cl
?mov dh,ah
;;-------------------防止隨機產(chǎn)生的食物,在蛇身上
?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

總結(jié)

以上是生活随笔為你收集整理的8086汇编 贪吃蛇 源代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。