Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите разобраться в программе, игра змейка 
:(
    Опции темы
Krazyzy
Дата 1.5.2011, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите раскомментировать программу (программа - игра змейка) 

Код

;worm.asm
;ЏЁв®­
      .model tiny
      .code
      .186
      org 100h
start:
      mov ax, cs           ;заносим в ax адресс сегмента кода cs
      add ax, 1000h        ;добавляем к ax 1000
      mov ds, ax           ;данные будут считываться с адреса cs + 1000h
      

      push 0A000h          
      pop es
      mov ax, 13h
      int 10h              
      mov di, 320*200
      mov cx, 600h
      rep stosb             ;очистка экрана

      xor si, si              
      mov bp, 10
      jmp init_food
main_cycle:
      mov dx, 20000
      mov ah, 86h
      int 15h
      mov ah, 1
      int 16h
      jz short no_keypress
      xor ah, ah
      int 16h
      cmp ah, 48h
      jne short not_up
      mov word ptr cs:move_direction, -320h
not_up:
      cmp ah, 50h
      jne short not_down
      mov word ptr cs:move_direction, 320
not_down:
      cmp ah, 4Bh
      jne short not_left
      mov word ptr cs:move_direction, -1
not_left:
      cmp ah, 4Dh
      jne short no_keypress
      mov word ptr cs:move_direction, 1
no_keypress:
      and bp, bp
      jnz short advance_head
      lodsw

      xchg bx, ax
      mov byte ptr es:[bx], 0
      mov bx, ax
      inc bp
advance_head:
      dec bp
      add bx, word ptr cs:move_direction

      mov al, es:[bx]
      and al, al
      jz short move_worm
      cmp al, 0Dh
      je short grow_worm
      mov ax, 3
      int 10h
      retn

move_worm:
      mov [di], bx
      inc di
      inc di
      mov byte ptr es:[bx], 09
      cmp byte ptr cs:eaten_food, 1
      je if_eaten_food
      jmp short main_cycle
grow_worm:
      push bx
      mov bx, word ptr cs:food_at
      xor ax, ax
      call draw_food
      call random
      and ax, 3Fh
      mov bp, ax
      mov byte ptr cs:eaten_food, 1
      pop bx
      jmp short move_worm
if_eaten_food:
      mov byte ptr cs:eaten_food, 0
init_food:
      push bx
make_food:
      call random
      and ax, 0FFFEh
      mov bx, ax
      xor ax, ax
      cmp word ptr es:[bx], ax
      jne make_food
      cmp word ptr es:[bx+320], ax
      jne make_food
      mov ax, 0D0Dh
      call draw_food
      pop bx
      jmp main_cycle
draw_food:
      mov es:[bx], ax
      mov word ptr es:[bx+320], ax
      retn
random:
      mov ax, word ptr cs:seed
      mov dx, 8E45h
      mul dx
      inc ax
      mov cs:word ptr seed, ax
      retn

eaten_food      db      0
move_direction  dw      1

seed:
food_at equ     seed+2
        end start

PM MAIL   Вверх
iff
Дата 1.5.2011, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


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

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



Цитата(Krazyzy @  1.5.2011,  16:24 Найти цитируемый пост)
      mov ax, cs           ;заносим в ax адресс сегмента кода cs
      add ax, 1000h        ;добавляем к ax 1000
      mov ds, ax           ;данные будут считываться с адреса cs + 1000h

Не хорошо. Здесь могут быть данные других программ т.к. эта область выходит в любом случае за разрешенную (в PSP по адресу 02-03 находится Объем оперативной памяти в пунктах).
Нужно использовать либо exe-формат, либо функцию 48h прерывания INT 21h для выделения памяти.


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
Krazyzy
Дата 2.5.2011, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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

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


 




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


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

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