Игра "Жизнь", exe в com, Assembler
Формулировка задачи:
Есть программа Игра Жизнь, написанная для exe файла, нужно переделать ее в com, да так чтобы этот файл весил не более 120 байт, как это сделать?
.model small
.stack 100h
.code
.186
LP:
push FAR_BSS
pop ds
xor ax,ax
int 1Ah
mov di,320*200+1
rand_gen:
imul dx,3425h
inc dx
mov ax,dx
shr ax,15
mov byte ptr [di],al
dec di
jnz rand_gen
mov ax,0013h
int 10h
lloop:
mov di,320*200+1
neighbour:
mov al, byte ptr [di+1]
add al, byte ptr [di-1]
add al, byte ptr [di+320]
add al, byte ptr [di-320]
add al, byte ptr [di+321]
add al, byte ptr [di-321]
add al, byte ptr [di+319]
add al, byte ptr [di-319]
shl al,4
or byte ptr [di],al
dec di
jnz neighbour
mov di,320*200+1
selection:
mov al,byte ptr [di]
shr al,4
cmp al,3
je birth
cmp al,2
je cont
and byte ptr [di],0
jmp cont
birth:
mov byte ptr [di],1
cont:
and byte ptr [di],0Fh
dec di
jnz selection
mov si,320*200+1
mov cx,319
mov dx,199
Life:
mov ah,0Ch
mov al, byte ptr [si]
int 10h
dec si
dec cx
jns Life
mov cx,319
dec dx
jns Life
mov ah,1
int 16h
jz lloop
mov ax,0003h
int 10h
mov ax,4C00h
int 21h
.fardata?
db 320*200+1 dup(?)
end LPРешение задачи: «Игра "Жизнь", exe в com, Assembler»
textual
Листинг программы
.model tiny .code .386 org 100h LP: ; ax=0, bx=0, si=100h, di=sp=-2 (0FFFEh) при старте (обычно) mov al,13h int 10h mov bh,0a0h mov es,bx mov al,1 mov ch,40h rand_gen: imul di,25h ; 3425h stosb loop rand_gen shl si,1 mov di,(320-1)+200h lloop: mov bh,(320*200+1)/256 copy: mov al,es:[bx] mov [bx+si],al dec bx jnz copy mov bh,(320*200+1)/256 neighbour: add al,[di+bx] add al,[si+bx-321] sub al,2 jz cont cmp al,1 je set xor al,al set:mov es:[bx],al cont: mov ax,[si+bx-321] add ax,[di+bx] add al,ah add al,[si+bx] add al,[si+bx-2] dec bx jnz neighbour next: mov ah,1 int 16h jz lloop ret last: end LP