IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

> Построение и управление квадратиками
18192123
сообщение 15.04.2008 17:15
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Имеется набор из 9-ти квадратиков. Выбор активного из них осуществляется нажатием соответствующей цифровой клавиши. Активный квадратик можно передвигать по полю, используя курсорные клавиши, а по нажатию "пробела" - менять его цвет. Написать программу построение различных фигур, испльзуя такой принцип управления.

Пока останавилась на построении набора квадратиков..Вот что получилось:

text	segment 'code' ; (1)  начало сегмента команд
              assume CS:text,DS:data; (2)
vertical	proc; (3)  объявление процедуры построения вертикальной линии
v:	; (4)    
	push	CX; (5)   сохраним в стек счетчик цикла
	mov	AH,0Ch; (6)  функция вывода пикселя
	mov	AL,6; (7)  установка цвета
	mov	BH,0; (8)  видеостраница
	mov	CX,SI; (9)  установка X-координаты
	int	10h; (10)  вызов BIOS
	inc	DX; (11)  счетчик Y-координаты 
	pop	CX; (12)  выгрузим из стека счетчик цикла
	loop	v; (13)  уменьшим его на единицу
ret; (14)  выход из подпрограммы
vertical	endp; (15)  конец текста подпрограммы
horizontal	proc; (16)  объявление процедуры построения горизонтальной линии
h:	; (17)
	push	CX; (18)  сохраним в стек счетчик цикла
	mov	AH,0Ch; (19)  функция вывода пикселя
	mov	AL,6; (20) установка цвета
	mov	BH,0; (21)  видеостраница
	mov	CX,SI; (22)  установка X-координаты
	int	10h; (23)  вызов BIOS
	inc	SI; (24)  счетчик Х-координаты
	pop	CX; (25)   выгрузим из стека счетчик цикла
	loop	h; (26)  уменьшим его на единицу
ret; (27)  выход из подпрограммы
horizontal	endp; (28)   конец текста подпрограммы

begin:	;(29)  начало основной программы
  mov	AX,00h; (30)  функция задания режима
	mov	AL,10h; (31)  графический режим EGA
	int	10h; (32)   вызов BIOS
mov cx,3
rect:	push cx
	mov	SI,100; (33)  Х-координата
	add si,i
	mov	DX,100; (34)  Y-координата
	add dx,i
	mov	CX,20; (35)  длина стороны
	call	vertical; (36)  вызов подпрограммы
	mov	SI,100; (37)  Х-координата
	add si,i
	mov	DX,100; (38) Y-координата
	add dx,i
	mov	CX,20; (39)  длина стороны
	call	horizontal; (40)  вызов подпрограммы
	
	mov	SI,120; (33)  Х-координата
	add si,i
	mov	DX,100; (34)  Y-координата
	add dx,i
	mov	CX,20; (35)  длина стороны
	call	vertical; (36)  вызов подпрограммы
	
	mov	SI,100; (37)  Х-координата
	add si,i
	mov	DX,120; (38) Y-координата
	add dx,i
	mov	CX,21; (39)  длина стороны
	call	horizontal; (40)  вызов подпрограммы
add i,22
pop cx
loop rect	
	
	mov AH,08h
	int 21h
	
	mov AH,00h
	mov AL,03h
	int 10h
	
	mov	AX,4C00h; (41)  завершение программы
	int	21h; (42)
text	ends; (43)   конец сегмента команд

data segment
i dw 0
data ends

stk segment stack
	dw 128 dup (0)
stk ends

end  	begin; (44)  конец текста программы




Хотела получить рядом расположенные квадратики..но как я предполагаю содержимое регистра СХ сбивается..
Как исправить - не пойму..

Сообщение отредактировано: 18192123 - 15.04.2008 17:19


Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 26.07.2025 22:17
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"