正如标题所说,这是个BUG的制造专家,程序不仅简陋,甚至丑陋的的程序,而且BUG是那样的BUG
assume cs:code,ss:stack,ds:data
stack segment
db 64 dup (0)
stack ends
data segment
data ends
code segment
show_arr:cli
mov ax,0b800h
mov es,ax
mov bx,0
mov cx,4000
mov ax,0000001000000000b
s: mov es:[bx],ax
inc bx
inc bx
loop s
mov bx,0
mov cx,80
mov dl,'-'
mov ax,0
line:mov bx,ax
add bx,ax
mov es:[bx],dl
mov es:[bx+24*160],dl
inc ax
loop line
mov bx,0
mov cx,25
mov dl,'|'
mov di,0
col: mov bx,di
mov al,160
mul bl
mov bx,ax
mov es:[bx],dl
mov es:[bx+158],dl
inc di
loop col
snak_body:jmp snak
trend dw +2,+2,-160,-2,+160
snak:mov dl,'*'
mov si,16*160+24*2
mov bx,si
mov cx,4
mov ax,0
mov ax,trend[0]
snak_0: add bx,ax
mov es:[bx],dl
loop snak_0
push bx
mov bx,160*8+2*56
mov byte ptr es:[bx],'
pop bx mov ax,trend[2] sti move: add bx,trend[0] cmp byte ptr es:[bx],'|' je over cmp byte ptr es:[bx],'-' je over cmp byte ptr es:[bx],'*' je over cmp byte ptr es:[bx],'
je set_money jmp mov_snak mov_snak:call timelag mov es:[bx],dl add si,ax cmp byte ptr es:[si],'*' jne cls_snak_chg cls_snak:mov byte ptr es:[si],0 jmp move cls_snak_chg:sub si,ax mov ax,2 add si,ax cmp byte ptr es:[si],'*' je cls_snak sub si,ax mov ax,-2 add si,ax cmp byte ptr es:[si],'*' je cls_snak sub si,ax mov ax,-160 add si,ax cmp byte ptr es:[si],'*' je cls_snak sub si,ax mov ax,160 add si,ax cmp byte ptr es:[si],'*' je cls_snak timelag:push bx push ax mov bx,09FFH fr_1: dec bx mov ax,0FFFFH fr_2: dec ax cmp ax,0 jne fr_2 cmp bx,0 jne fr_1 pop ax pop bx ret over:jmp show_over over_show db 'Game Over!',0 set_money:mov es:[bx],dl add bx,trend[0] push ax push bx push cx push dx mov ah,02 int 1ah mov al,dh mov ah,0 mov dh,79 div dh inc ah mov al,ah mov dh,2 mul dh mov bx,ax call timelag mov ah,02h int 1ah mov al,dh mov ah,0 mov dh,23 div dh inc ah mov al,ah mov dh,160 mul dh add bx,ax mov byte ptr es:[bx],'
pop dx pop cx pop bx pop ax jmp mov_snak show_over: mov bx,12*160+30*2 mov ax,0 mov di,0 f_show: mov al,over_show[di] cmp al,0 je over_show_end mov es:[bx],al inc di add bx,2 jmp f_show over_show_end: mov ax,0 mov ds,ax mov ax,ds:[200h] mov ds:[4*9],ax mov ax,ds:[202h] mov ds:[4*9+2],ax mov ax,4c00h int 21h int_9:push ax push bx push ds in al,60h pushf mov bx,0 mov ds,bx call dword ptr ds:[200h] cmp al,4dh je life cmp al,48h je up cmp al,4bh je right cmp al,50h je down jmp int_9end life: mov ax,trend[2] mov trend[0],ax jmp int_9end up: mov ax,trend[4] mov trend[0],ax jmp int_9end right: mov ax,trend[6] mov trend[0],ax jmp int_9end down: mov ax,trend[8] mov trend,ax jmp int_9end int_9end:pop ds pop bx pop ax iret start:cli mov ax,0 mov ds,ax mov ax,ds:[4*9] mov ds:[200h],ax mov ax,ds:[4*9+2] mov ds:[202h],ax mov ax,cs mov word ptr ds:[4*9],offset int_9 mov word ptr ds:[4*9+2],ax call show_arrcode endsend start