Игра "Жизнь", 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.667 из 5