Поиск:

Ответ в темуСоздание новой темы Создание опроса
> анимация 
:(
    Опции темы
Mlix
  Дата 1.6.2009, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 27.12.2006

Репутация: нет
Всего: нет



привет всем, сразу сознаюсь, что асм знаю очень плохо, поэтому прошу помочь разобраться
нужно замутить движущегося человечка, вроде все работает, но движется он, если постоянно нажимать клавишу, а нужно чтоб сразу двигался или по нажатию клавиши начинал движение
кроме как грубо зациклить, нечего в голову не приходит, но тогда по нажатию q уже не выйдешь и выходит уже не человечек а просто хрень мерцающая, в общем, если грубый вариант, как можно сделать паузу, только sleep() и что-нибудь такое библиотечное использовать нельзя, а если не грубый, что еще можно с этим сделать?  
если у кого-нибудь есть какие-нибудь мысли или примеры, помогите плз

Код

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'
        JMP     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,0,0,9,9,0,0,9,9,0,0,0
      DB 0,0,0,9,9,0,0,9,9,0,0,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

PM MAIL   Вверх
Mikl_
Дата 2.6.2009, 05:30 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: нет
Всего: 14



Mlix, здесь COM а не EXE -- человечек бежит по экрану -- правда выход из программы Ctrl+Ald+Del  smile 
но если захочешь, то доделаешь сам 
Код
.model tiny
.286
.code
org 100h
start:  mov    ax,0A000h 
        mov    ES,ax
        MOV     AX,13h; устанавливаем разрешение экрана 320*240
        INT     10h
        MOV     BX,2 ; счетчик кадров
        MOV    DI,320*12; выводим первый кадр с 0-ой позиции на 12 строку
MOVE_MASK: MOV  SI,tab[bx] ; в зависимости от счетчика кадров или картинка H1 или H2
SHOW_KADR: MOV  CX,13 ; в каждой картинке 13 строк
DRAW_H: push    cx    ; сохраняем значение CX в стеке
MOV    CX,20     ; в каждой строке 20 точек
        REP MOVSB ; выводим очередную строку
        ADD    DI,320-20 ; положение на экране следующей строки
        pop    cx; восстанавливаем счетчик строк
loop DRAW_H
xor bx,2 ; меняем значение в счетчике кадров или 0 или 2
sub di,320*13-10; сдвигаем картинку при рисовании следующего кадра -- предыдущий кадр сотрется
push bx   ; сохраняем в стеке счетчик кадров
; организуем задержку по времени на 1000/18,2=54,94 мСек
mov ah,0    ;Получить системное время
int 1Ah    ; Return: CX:DX=число тиков от полуночи 
mov bx,dx  ;1 секунда=18.2 тика        
delay:    int 1Ah    ;пропускаем 55 милисекунды
cmp bx, dx
jz delay
pop bx
jmp MOVE_MASK
H1 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,9,9,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,9,9,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,0,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,9,9,9,9,9,9,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,9,9,9,9,9,9,0,0
      DB 0,0,0,0,0,0,0,0,0,0,9,9,0,0,9,9,0,0,9,9
      DB 0,0,0,0,0,0,0,0,0,0,9,9,0,0,9,9,0,0,9,9
      DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,0,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,0,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,0,9,9,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,0,9,9,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,0,9,9,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,0,9,9,0,0
     
H2 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,9,9,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,9,9,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,0,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,9,9,9,9,9,9,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,9,9,9,9,9,9,0,0
      DB 0,0,0,0,0,0,0,0,0,0,9,9,0,0,9,9,0,0,9,9
      DB 0,0,0,0,0,0,0,0,0,0,9,9,0,0,9,9,0,0,9,9
      DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,0,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,9,9,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,0,9,9,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,0,9,9,0,0
      DB 0,0,0,0,0,0,0,0,0,0,9,9,0,0,0,0,9,9,0,0
      DB 0,0,0,0,0,0,0,0,0,0,9,9,0,0,0,0,0,0,0,0
tabl dw H1,H2; адреса картинок
end    start
 smile 
PM MAIL   Вверх
Mlix
Дата 2.6.2009, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 27.12.2006

Репутация: нет
Всего: нет



спасибо, но там все сливается  smile 
в смысле очистка не происходит

Это сообщение отредактировал(а) Mlix - 2.6.2009, 22:27
PM MAIL   Вверх
Mikl_
Дата 3.6.2009, 02:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: нет
Всего: 14



Mlix, где всё сливается? Я рабочий и проверенный пример прислал smile 

Это сообщение отредактировал(а) Mikl_ - 3.6.2009, 03:50
PM MAIL   Вверх
Mikl_
Дата 3.6.2009, 03:57 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: нет
Всего: 14



Mlix, Вариант с выходом в DOS после прохождения указанного времени
Код
.model tiny
.286
.code
org 100h
start:  MOV AH,0Fh ;запомнить видеорежим -- видеорежим может быть не обязательно равным 3
    INT 10h
    MOV byte ptr VIDEOR,AL; запоминаем видеорежим чтобы потом его востановить
    mov    ax,0A000h 
        mov    ES,ax
        MOV     AX,13h
        INT     10h
    cld
        MOV     BX,2 ; инициализируем индекс фаз рисунка
        MOV    DI,320*12
    mov cx,200; время на экране -- ставь любое число
MOVE_MASK: push cx
    MOV  SI,tab[bx]
SHOW_KADR: MOV  CX,13; количество строк в рисунке
DRAW_H: push    cx    
    MOV    CX,10 ; количество точек в строке делим на 2    
        REP MOVSW; выводим сразу по 2 точки
        ADD    DI,320-20; переходим на следующую строку
        pop    cx
    loop DRAW_H
    xor bx,2; переключаем идекс фазы рисунка
    sub di,320*13-1; 1 - плавность перемещения по экрану чем больше число - тем быстрее
    push bx
    mov ah,0    ;Получить системное время
    int 1Ah    ; Return: CX:DX=число тиков от полуночи 
    mov bx,dx  ;1 секунда=18.2 тика        
delay:    int 1Ah    ;пропускаем 55 милисекунды
    cmp bx,dx
    jz delay
    pop bx
    pop cx
    loop MOVE_MASK
exit:   MOV     AX,VIDEOR; восстанавливаем первоначальный режим
        INT     10h                 
        INT     20h; выход в DOS
H1    DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,9,0,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,9,0,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,0,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,9,9,9,9,9,0,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,9,9,9,9,9,9,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,9,9,0,9,9,0,9,9,0
      DB 0,0,0,0,0,0,0,0,0,0,9,9,0,0,9,9,0,0,9,9
      DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,0,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,0,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,9,9,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,9,9,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,9,9,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,9,9,0,0
     
H2    DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,9,0,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,9,0,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,0,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,9,9,9,9,9,9,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,9,9,9,9,9,9,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,9,0,9,9,9,9,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,9,0,9,9,9,9,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,0,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,9,9,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,9,9,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,0,9,9,0,0,9,9,0,0
      DB 0,0,0,0,0,0,0,0,0,0,0,9,9,0,0,0,0,9,9,0
      DB 0,0,0,0,0,0,0,0,0,0,9,9,0,0,0,0,0,0,9,9
tab dw H1,H2; адреса фаз рисунков
VIDEOR dw 0
end    start
 smile 
PM MAIL   Вверх
Mlix
Дата 3.6.2009, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 27.12.2006

Репутация: нет
Всего: нет



PM MAIL   Вверх
Mikl_
Дата 3.6.2009, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: нет
Всего: 14



Mlix
код целиком скопировал? Приаттачь COM и исходник -- посмотрю в чем дело
PM MAIL   Вверх
Mlix
Дата 3.6.2009, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 27.12.2006

Репутация: нет
Всего: нет



Mikl_
блин, я ужасно аццки натупил, все работает на самом деле
спасибо огромнейшее
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для Windows/DOS"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для Windows/Dos | Следующая тема »


 




[ Время генерации скрипта: 0.0695 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.