1、mov frow,10mov fcol,6mov dh,10 mov dl,26mov ah,2mov bh,0int 10hmov ah,9lea dx,msg1int 21hmov dh,11mov dl,7lea dx,waymov dh,12mov dl,20lea dx,msgmov ah,0int 16hmov ah,6mov al,0mov ch,0mov cl,0mov dh,24mov dl,79mov bh,10mov dh,0mov dl,0lea dx,score1mov dl,15lea dx,writerlea dx,emailmov score2,48push e
2、s:9*4 ;将原int9入口地址保存pop ds:09*4+22mov word ptr es:9*4,offset int9 ;更改中断向量表mov es:9*4+2,csjmp aawrite macro row,col,cnt ;宏定义用于向当前光标处输出字符 push bx push cx push dx mov dh,row mov dl,col mov ah,2 mov bh,0 int 10h mov ah,9 mov bl,11 mov cx,1 lea di,cnt ;50 mov al,di pop dx pop cx pop bxendmreadh macro row,
3、col ;宏定义用于读出当前光标处字符 push dxpush axpush bxmov dh,rowmov dl,colmov ah,08hmov pst,alpop bxpop axpop dxwnear macro ;宏定义只用在readcg宏中当readcg的所有判断都不成立调用此宏local wnext1local wnext2local wnext3local wnext4dec dhreadh dh,dlcmp pst,1jne wnext1write dh,dl,tal2jmp wnext4wnext1:inc dhdec dljne wnext2wnext2:inc dljn
4、e wnext3wnext3:jne wnext4wnext4:readcg macro row,col ;宏定义用于改变判断出来的字符local tnup,tnup1,tnup2,tnlf,tnlf1,tnlf2,tndn,tndn1,tndn2,tnrt,tnrt1,tnrt2,gooutwrite dh,dl,tal1dec rowcmp pst,4jne tnup1jmp tnup2tnup1:jmp near ptr tnuptnup2:write dh,dl,blkjne tnupjmp near ptr goouttnup:dec coljne tnlf1jmp tnlf2tnl
5、f1:jmp near ptr tnlftnlf2:jne tnlftnlf:inc rowjne tndn1jmp tndn2tndn1:jmp near ptr tndntndn2:jne tndntndn:inc coljne tnrt1jmp tnrt2tnrt1:jmp near ptr tnrttnrt2:jne tnrttnrt:wneargoout:addone: ;此标号功能是将蛇身增加一inc score2mov dh,1mov cx,23cmpad1:push cxmov cx,79cmpad2:cmp pst,2jne nextad3jmp nextad4nextad3
6、:jmp near ptr nextadnextad4:write dh,dl,snkjne natupjmp outonatup:jne natlfnatlf:jne natdnnatdn:jne natrtnatrt:outo:pop cxjmp near ptr endadnextad:jmp nextad2chgad2:jmp near ptr cmpad2nextad2:loop chgad2sub dl,79jmp nextad1chgad1:jmp near ptr cmpad1nextad1:loop chgad1endad:jmp near ptr crtfaa:从这开始产生
7、最原始的蛇mov addrs,offset turnrightmov dh,10mov dl,1mov cx,3wrt: loop wrtmov len,6jmp wrt1ovflw:当蛇碰壁或自身转到此游戏结束mov bh,7mov dh,17mov dl,17lea dx,gmovmov ax,0 ;恢复int9中断push ds:pop es:9*4stop:cmp al,rje aa1jmp aa2aa1:jmp near ptr startaa2:qjne stopjmp near ptr exitwrt1:此处蛇行走过程的无限循环call dlycmp dh,25je ovflwc
8、mp dl,80cmp dh,0cmp dl,-1lea ax,turnrightcmp addrs,axjne tonxt2je tonxt1jmp tonxt2tonxt1:jmp ovflwtonxt2:lea ax,turnupjne tonxt4je tonxt3jmp tonxt4tonxt3:tonxt4:lea ax,turndownjne tonxt6je tonxt5jmp tonxt6tonxt5:tonxt6:lea ax,turnbackjne tonxt8je tonxt7jmp tonxt8tonxt7:tonxt8:jmp nextacrtf1:jmp near
9、 ptr addonecrtf:call rand1call rand2inc frowmov ah,frowmov al,fcolcheck1:check2:je nextnjmp nextnnnextn:cmp ax,dxje crtfnextnn:loop check2loop check1write frow,fcol,foodnexta:je crtf12jmp crtf13crtf12:jmp near ptr crtf1crtf13:cmp score2,58jl normalmov score2,49inc score0normal:mov dl,8write dh,dl,sc
10、ore2add dl,score0write dh,dl,zerocmp adrs,17je jmp1cmp adrs,145cmp adrs,31je jmp2cmp adrs,159cmp adrs,32je jmp3cmp adrs,160cmp adrs,30je jmp4cmp adrs,158jmp addrsjmp1:lea ax, turndowncmp ax,addrsmov addrs,offset turnupjmp near ptr turnupjmp2:mov addrs,offset turndownjmp near ptr turndownjmp3:jmp nea
11、r ptr turnrightjmp4:mov addrs,offset turnbackjmp near ptr turnbackturnright:此处实现蛇向左走cmpr1:cmpr2:je nextr4jmp near ptr nextrnextr4:readcg dh,dljmp near ptr endrnextr:jmp nextr2chgr2:jmp near ptr cmpr2nextr2:loop chgr2jmp nextr1chgr1:jmp near ptr cmpr1nextr1:loop chgr1endr:jmp near ptr wrt1turnup:此处实现
12、蛇向上走cmpu1:cmpu2:jne nextu3jmp nextu4nextu3:jmp near ptr nextunextu4:jmp near ptr endunextu:jmp nextu2chgu2:jmp near ptr cmpu2nextu2:loop chgu2jmp nextu1chgu1:jmp near ptr cmpu1nextu1:loop chgu1endu:turndown:此处实现蛇向下走cmpd1:cmpd2:jne nextd3jmp nextd4nextd3:jmp near ptr nextdnextd4:jmp near ptr enddnext
13、d:jmp nextd2chgd2:jmp near ptr cmpd2nextd2:loop chgd2jmp nextd1chgd1:jmp near ptr cmpd1nextd1:loop chgd1endd:turnback:此处实现蛇向右走cmpb1:cmpb2:jne nextb3jmp nextb4nextb3:jmp near ptr nextbnextb4:jmp near ptr endbnextb:jmp nextb2chgb2:jmp near ptr cmpb2nextb2:loop chgb2jmp nextb1chgb1:jmp near ptr cmpb1ne
14、xtb1:loop chgb1endb:exit:mov ah,4chint9:更改后的中断服务程序in al,60hmov adrs,almov al,20hout 20h,aliretDLY PROC near ;延时子程序 PUSH CX PUSH DX MOV DX,10000DL1: MOV CX,9801DL2: LOOP DL2 DEC DX JNZ DL1 POP DX POP CX RETDLY ENDPRAND1 PROC PUSH AX STI MOV AH,0 ;读时钟计数器值 INT 1AH MOV AX,DX ;清高6位 AND AH,3 MOV DL,23 ;除23,产生023余数 DIV DL MOV frow,AH ;余数存frow,作随机行数 POP AXRAND1 ENDPRAND2 PROC MOV DL,79 ;除79,产生079余数 MOV fcol,AH ;余数存fcol,作随机列数RAND2 ENDPCODE ENDS END start
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1