Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2011, 00:09   #1
bvak
Пользователь
 
Регистрация: 14.04.2011
Сообщений: 12
По умолчанию Анимация на аssembler

Нужна помощь по созданию анимации танцующего человечка. Я нашел здесь на сайте программу, но никак не мог понять как прилепить 3 кадр или больше.
Код:
code segment
        ASSUME CS:code, DS:DATA_SEG, ES:NOTHING, SS:STACK_SEG
start:
        MOV     AX,DATA_SEG
        MOV     DS,AX
        MOV     AX,STACK_SEG
        MOV     SS,AX
        MOV     SP, OFFSET TOP_OF_STACK
        

        MOV     AX,13h
        INT     10h

        MOV     AX,0A000h 
        MOV     ES,AX 
        CLD

        MOV     DI,320*12

        MOV     BH, 48
       

MOVE_MASK:
        MOV     AL, NOM_KADR
        CMP     AL,0
        JNZ     KADR2
        MOV     NOM_KADR, 1
        MOV     SI, OFFSET H1
        JMP     SHOW_KADR
KADR2:
        MOV     NOM_KADR, 0
        MOV     SI, OFFSET H2

SHOW_KADR:
        PUSH    DI        
        MOV     BL,13    


DRAW_H:
        MOV     CX,12     
        REP     MOVSB
        ADD     DI,320-12 
        DEC     BL
        JNZ     DRAW_H
        POP     DI        
        INC     DI        

READ_KEY:
        MOV     AH,08h
        INT     21h
        cmp     al,0 ; Проверка на расш.коды
        JZ      READ_KEY
        cmp     al, 'q'
        JNZ     MOVE_MASK

        MOV     AX,3
        INT     10h                 

        MOV     AH,4Ch
        INT     21h



DATA_SEG SEGMENT

H1 DB 0,0,0,0,0,9,9,9,9,0,0,0
      DB 0,0,0,0,0,9,9,9,9,0,0,0
      DB 0,0,0,0,0,9,9,0,0,0,0,0
      DB 0,0,0,9,9,9,9,9,9,0,0,0
      DB 0,0,0,9,9,9,9,9,9,0,0,0
      DB 0,9,9,0,0,9,9,0,0,9,9,0
      DB 0,9,9,0,0,9,9,0,0,9,9,0
      DB 0,0,0,0,0,9,9,0,0,0,0,0
      DB 0,0,0,0,0,9,9,0,0,0,0,0
      DB 0,0,0,9,9,0,0,9,9,0,0,0
      DB 0,0,0,9,9,0,0,9,9,0,0,0
      DB 0,9,9,0,0,0,0,0,0,9,9,0
      DB 0,9,9,0,0,0,0,0,0,9,9,0
     
H2     DB 0,0,0,0,0,9,9,9,9,0,0,0
       DB 0,0,0,0,0,9,9,9,9,0,0,0
       DB 0,0,0,0,0,9,9,0,0,0,0,0
       DB 0,0,0,9,9,9,9,9,9,0,0,0
       DB 0,0,0,9,9,9,9,9,9,0,0,0
       DB 0,9,9,0,0,9,9,0,0,9,9,0
       DB 0,9,9,0,0,9,9,0,0,9,9,0
       DB 0,0,0,0,0,9,9,0,0,0,0,0
       DB 0,0,0,0,0,9,9,9,9,0,0,0
       DB 0,0,0,9,9,0,0,9,9,0,0,0
       DB 0,0,0,9,9,0,0,9,9,0,0,0
       DB 0,9,9,0,0,0,0,9,9,0,0,0
       DB 0,9,9,0,0,0,0,0,0,0,0,0
NOM_KADR DB 0
DATA_SEG ENDS

STACK_SEG SEGMENT
        DB 64 DUP('STACK')
TOP_OF_STACK DW ?
STACK_SEG ENDS

code ends
end start
end

Последний раз редактировалось Stilet; 31.10.2011 в 09:01.
bvak вне форума Ответить с цитированием
Старый 31.10.2011, 08:46   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

элементарно...
программа написана весьма кузявно, поэтому с добавлением 3-го (а так же 4-го, 5-го и т.д. кадра) проблем вообще не будет!

посмотрите,
по метке MOVE_MASK:
находится код, который по значению переменной NOM_KADR
определяет, какую маску(кадр) использовать.
в данный момент доступны кадры H1 и H2
добавляйте в область данных ещё H3 (рисунок 3-го кадра)
и подправьте процедуру по метке MOVE_MASK, так,
чтобы грузился третий кадр: MOV SI, OFFSET H3
и всё. задача решена!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.10.2011, 13:25   #3
bvak
Пользователь
 
Регистрация: 14.04.2011
Сообщений: 12
По умолчанию

Все сделал как вы сказали. Не понимаю. Вроде должна работать. Но показывает только 3й кадр
Цитата:
MOVE_MASK:
MOV AL, NOM_KADR
CMP AL,0
JNZ KADR2
MOV AL, NOM_KADR
CMP AL,2
JNZ KADR3

MOV NOM_KADR, 1
MOV SI, OFFSET H1
JMP SHOW_KADR

KADR2:
MOV NOM_KADR, 0
MOV SI, OFFSET H2
KADR3:
MOV NOM_KADR, 2
MOV SI, OFFSET H3
bvak вне форума Ответить с цитированием
Старый 31.10.2011, 17:01   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а попробуйте такой код:
Код:
MOVE_MASK:
        MOV     AL, NOM_KADR
        CMP     AL, 0
        JNZ     KADR2
        MOV     NOM_KADR, 1
        MOV     SI, OFFSET H1
        JMP     SHOW_KADR
KADR2:
        CMP     AL, 1
        JNZ     KADR3
        MOV     NOM_KADR, 2
        MOV     SI, OFFSET H2
        JMP     SHOW_KADR

KADR3:
        MOV     NOM_KADR, 0
        MOV     SI, OFFSET H3

SHOW_KADR:
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.10.2011, 21:06   #5
bvak
Пользователь
 
Регистрация: 14.04.2011
Сообщений: 12
По умолчанию

спасибо большое. все заработало.
bvak вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
отладчик Turbo Debbager и Аssembler MaRtOvSkiI_KoT Помощь студентам 6 08.10.2011 11:47
Анимация. Cause Помощь студентам 6 06.11.2010 15:45