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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2011, 20:42   #1
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию ходы по странице видео-памяти

Добрый вечер! Пробую писать змейку, реализовала перемещение точки по экрану, но как только добавила процедуру clear для того чтобы очищать экран от прерыдущего шага и начались глюки вот код:
Код:
.model tiny
.code
org 100h
main:
;======================================================================================
;	инициализация окна
;======================================================================================
	mov ah,05h	;переключение страницы видео памяти с 0 на 1
	mov al,1
	int 10h
	
	mov ah,06h	;функция инициализации окна
	mov al,0	;окно без прокрутки
	mov bh,31h	;бирюзовый фон, синие симоволы
	mov ch,0	;y левый верхний
	mov cl,0	;x левый верхний
	mov dh,10 	;y правый нижний
	mov dl,60	;y правый нижний
	int 10h
	
;======================================================================================
;	первичная настройка курсора
;======================================================================================
	push es
    	mov ax, 0B900h
     	mov es, ax
	push cs
	pop ds
	
	mov ah,02h	;функцифя позиционирования курсора
	mov bh,1	;страница 1
	mov dl,x	;сторка
	mov dh,y	;столбец
	int 10h 
	
	
	mov ah,0ah	;инициализация змейки
	mov bh,1	;страница 1
	mov al,04h	;аскикод
	
	mov cx,1	;количество повторений
	int 10h
	
;======================================================================================
;	основной цикл
;======================================================================================
main_loop:
;======================================================================================
;	слежение за назатой клавишей
;======================================================================================
	xor ah,ah
	mov ah,08h	;считатьсимвол без эха
	int 21h
	
	test al,al
	jz key_cheak	;проверка нажатия стелок
	
	cmp al,1bh	;проверка нажатия esc
	je key_esc
	jmp main_loop

key_cheak:		
	int 21h
	cmp al,48h
	je key_up
	cmp al,50h
	je key_down
	cmp al,4bh
	je key_left
	cmp al,4dh
	je key_right
	
	jmp  main_loop
	
;======================================================================================
;	обработка нажатой клавиши
;======================================================================================
key_esc:
	ret
	
key_up:
	jmp clear	
	mov ah,02h	;функцифя позиционирования курсора
	mov bh,1	;страница 1
	mov dl,x	;сторка
	dec y
	mov dh,y	;столбец
	int 10h 
	
	
	mov ah,0ah	;инициализация змейки
	mov bh,1	;страница 1
	mov al,04h	;аскикод
	
	mov cx,1	;количество повторений
	int 10h
	jmp main_loop
	
key_down:
	call clear
	mov ah,02h	;функцифя позиционирования курсора
	mov bh,1	;страница 1
	mov dl,x	;сторка
	inc y
	mov dh,y	;столбец
	int 10h 
	
	
	mov ah,0ah	;инициализация змейки
	mov bh,1	;страница 1
	mov al,04h	;аскикод
	
	mov cx,1	;количество повторений
	int 10h
	jmp main_loop	

key_left:
	call clear
	mov ah,02h	;функцифя позиционирования курсора
	mov bh,1	;страница 1
	mov dh,y	;сторка
	dec x
	mov dl,x	;столбец
	int 10h 
	
	
	mov ah,0ah	;инициализация змейки
	mov bh,1	;страница 1
	mov al,04h	;аскикод
	
	mov cx,1	;количество повторений
	int 10h
	jmp main_loop


key_right:
	call clear
	mov ah,02h	;функцифя позиционирования курсора
	mov bh,1	;страница 1
	mov dh,y	;сторка
	inc x
	mov dl,x	;столбец
	int 10h 
	
	
	mov ah,0ah	;инициализация змейки
	mov bh,1	;страница 1
	mov al,04h	;аскикод
	
	mov cx,1	;количество повторений
	int 10h
	jmp main_loop

;======================================================================================
;	вспомогательные процедуры
;======================================================================================
clear proc near
	mov ah,02h	;функцифя позиционирования курсора
	mov bh,1	;страница 1
	mov dh,y	;сторка
	mov dl,x	;столбец
	int 10h 
	
	
	mov ah,0ah	;инициализация змейки
	mov bh,1	;страница 1
	mov al,00h	;аскикод
	
	mov cx,1	;количество повторений
	int 10h
endp clear
	
;======================================================================================
;	описание данных
;======================================================================================
	x db 2
	y db 2
     	     	
end main
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 04.05.2011, 21:20   #2
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
Сообщение

1. Забыли возврат из процедуры

Код:
clear proc near
	mov ah,02h	;функцифя позиционирования курсора
	mov bh,1	;страница 1
	mov dh,y	;сторка
	mov dl,x	;столбец
	int 10h 
	
	
	mov ah,0ah	;инициализация змейки
	mov bh,1	;страница 1
	mov al,00h	;аскикод
	
	mov cx,1	;количество повторений
	int 10h
	ret
endp clear
2. Раз уж это процедура, то лучше вызывать её ч.з. call, а не ч.з. jmp
Код:
key_up:
	call clear
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 05.05.2011, 21:14   #3
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

спасибо, реально ret забыла, а вызываю как раз через call =)
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа для тестирования памяти, тестирование ячеек памяти Hunter557 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 30.01.2011 19:20
Кольцевая очередь на массиве в статической памяти с элементами в динамической памяти ]tach[ Общие вопросы C/C++ 1 19.01.2011 13:16
Видео на странице TomFisher HTML и CSS 1 14.06.2010 18:17
как воспроизвести видео не из файла а из памяти? s.Creator Мультимедиа в Delphi 9 06.01.2010 23:42
Ходы конём (pascal) Ирёнок Помощь студентам 6 22.03.2009 01:34