Поиск:

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


Новичок



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

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



Когда писал змею (показано в недописанном виде, так что не удивляйтесь, почему там одна голова), обратил внимание на её странное поведение: при подходе к левому краю экрана голова иногда сбивается вниз...без нажатия клавишию smile Помогите, пожалуйста, разобраться!


masm
.model small
.stack 100h
.data
right=1
left=2
up=4
down=8
body='*'
head='@'
fill=' '
dir db up
leng dw 5
score db 0
maxx=80
maxy=24
maxleng=2000
x db 12
y db 20

.code

calc proc
push ax
push bx
mov al,80
mul bh
xor bh,bh
add ax,bx

shl ax,1
mov di,ax
pop bx
pop ax
ret
calc endp

main proc
begin:
mov ax,@data
mov ds,ax
mov ax,3
int 10h ;clear screeen
mov bl,10 ;x in bl
mov bh,10 ;y in bh
push 0B800h
pop es
cycle:
redraw:
call calc
mov ah,4
mov al,fill
mov es:[di],ax ;out '@' to (x,y)

xor al,al
mov ah,6
mov dl,0FFh
int 21h ;was pressed key?
jz d ;if key was not pressed then go to processing of d[irection]

cmp al,'Q'
je ex
cmp al,'q'
je ex
cmp al,27
je ex
jmp apro
ex:jmp exit

apro:cmp al,'A'
je dleft
cmp al,'a'
je dleft
cmp al,75
je dleft

cmp al,'S'
je ddown
cmp al,'s'
je ddown
cmp al,80
je ddown

cmp al,'D'
je dright
cmp al,'d'
je dright
cmp al,77
je dright

cmp al,'W'
je daup
cmp al,'w'
je daup
cmp al,72
je daup

d:
cmp dir,left
je rleft
cmp dir,down
je rdown
cmp dir,right
je rright
cmp dir,up
je rup
dleft:
cmp dir,right
je rright
mov dir,left
jmp rleft

ddown:
cmp dir,up
je rup
mov dir,down
jmp rdown

dright:
cmp dir,left
je rleft
mov dir,right
jmp rright

daup:
cmp dir,down
je rdown
mov dir,up
jmp rup ;we have direction

rleft:
dec bl
jmp xless
rdown:
inc bh
jmp xless
rright:
inc bl
jmp xless
rup:
dec bh

xless:
cmp bl,-1
jne xgreater
mov bl,maxx
xgreater:
cmp bl,maxx+1
jne yless
mov bl,0
yless:
cmp bh,-1
jne ygreater
mov bh,maxy
ygreater:
cmp bh,maxy+1
jne draw
mov bl,0

draw:
call calc
mov ah,4
mov al,head
mov es:[di],ax ;out '@' to (x,y)
push bx

mov ah,2
int 1ah
mov bl,dh
and bl,0Fh
inc bl
cmp bl,10
jne delay ;delay : 1 second
mov bl,0

delay:
mov ah,2
int 1ah
and dh,0Fh
cmp dh,bl
jne delay
pop bx

jmp cycle

exit:
;mov ah,0
;int 16h
mov ax,4c00h
int 21h
main endp
end main

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

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

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


 




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


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

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