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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2008, 11:43   #11
AsmBeginer
Пользователь
 
Регистрация: 09.01.2008
Сообщений: 12
По умолчанию

Рисую отрезок. Хочу, чтоб на нажатие клавиши "вниз", перемещался в низ. Отрезок остается недвижимым:
Код:
       mov AX,12h
       int 10h

       MOV AH,0CH       ;синий цвет точки
       MOV AL,3
       
       mov  CX, 100     ;начальная координата Х
       mov  DX, 100     ;начальная координата Y
label_1:
       inc  cx         ; Х=Х+1
       int  10h        ; вывести пиксель
       cmp  cx, 200    ; если Х <= 200
jle  label_1            ; goto label_1

key_loop:
       mov ah,7         ;ждем символ с клавиатуры
       int 21h

       cmp  al,27      ; Нажали Esc?
je   quit          ; Да, выход

       test al,al         ;проверка на 0-е начало
jnz key_loop   ;если да, не выходим, а ждём другую клавишу
       int 21h

       cmp al,50h      ;сравнение со стрелкой вниз
       inc dx          ;увеличиваем dx

draw:
       MOV AH,0CH     ;черный цвет точки
       MOV AL,0
jmp label_1        ;рисуем черный отрезок
       MOV AH,0CH     ;синий цвет точки
       MOV AL,3
jmp label_1        ;рисуем синий отрезок
       int 10h
jmp key_loop
    
       ;mov ah,0        ; ожидание нажатой клавиши
       ;int 16h
quit:
       RET ; завершение COM-программы
AsmBeginer вне форума Ответить с цитированием
Старый 17.01.2008, 13:33   #12
AsmBeginer
Пользователь
 
Регистрация: 09.01.2008
Сообщений: 12
По умолчанию

То есть, другими словами, как в асме цикл в цикле организовать?
AsmBeginer вне форума Ответить с цитированием
Старый 17.01.2008, 15:28   #13
AsmBeginer
Пользователь
 
Регистрация: 09.01.2008
Сообщений: 12
По умолчанию

Все, разобрался я сам, извините за ложную тревогу )
AsmBeginer вне форума Ответить с цитированием
Старый 21.01.2008, 13:35   #14
AsmBeginer
Пользователь
 
Регистрация: 09.01.2008
Сообщений: 12
По умолчанию

Здравствуйте. Извините, что опять отвлекаю. Вы немогли бы посмотреть исходник. Я написал программку, которая перемещает квадрат по экрану. Управление происходит клавишами со стрелкой. При нажатии на какую-либо из них, прога слетает. Почему, понять не могу. Я подозреваю, что надо сохранять регистры "push", а потом использовать "pop". Только не понимаю, на каких стади программы. Код не оптимизированн. Я хочу сначала написать рабочую версию, а потом оптимизировать. Иначе я не разберусь. Код простой. Сначала покажется что, 'темный лес', а через три-четыре секунды, Вы увидите что все отлично видно. У меня там просто повторение кусков кода.
=================================== ==================
Логика программы:

1. Переменные с инициализацией.

2. Установка видеорежима

3. *Команда вывода точки в цикле (прорисовываю квадрат)

4. ловлю нажатие клавиши (key_loop) и переход в обработчик:

если ESC, quit
если вниз, key_down
если вверх, key_up
если влево, key_left
если вправо, key_right
если влево-вверх, key_home
если вправо-вверх, key_pgup
если влево-вниз, key_end
если враво-вниз, key_pgdn
(далее см. 6 пункт)

5. *Циклический вывод точки (прорисовываю квадрат по новым

координатам полученным из обработчика) и переход
в 4 пункт

6. В обработчике выводится черный квадрат поверх синего, для

закраски, изменяются переменные, прорисовывающие квадрат и

переход на 5 пункт.

*Пункт 3 для начального положения квадрата на экране.
*Пункт 5 для прорисовки квадрата по новым переменным.
=================================== ==================
Посмотрите, пожалуйста, если Вам не трудно.
Вложения
Тип файла: doc ASM.doc (74.0 Кб, 31 просмотров)
AsmBeginer вне форума Ответить с цитированием
Старый 18.06.2010, 11:56   #15
russbarb
Новичок
Джуниор
 
Регистрация: 19.06.2009
Сообщений: 1
По умолчанию Помогитеее

Составить программу, выполняющую следующие действия:
а) вывод на дисплей прямоугольника с координатами левого верхнего угла (XI, У1) , правого нижнего угла (Х2, У2) с заданными атрибутами. Прямоугольник обрамлен рамкой (использовать один или несколько символов по усмотрению студента);
б) выполнение задания в соответствии с вариантом;
в) при нажатии клавиши, отличной от указанной в задании, программа завершает ра¬
боту.
Корд, окна Цвет фона Цвет
текста Задание
xl/yl х2/у2
15/10 49/17
фон синий текст жел¬тый
Справа от окна вывести сообщение «ПРА-ВЫЙ», при нажатии клавиши CTPEJIKA-ВНИЗ выполнить прокрутку окна дисплея вниз на 2 строки, цвет новых строк - красный и на послед-ней новой строке салатным цветом написать «ВЕРХНЯЯ СТРОКА».
russbarb вне форума Ответить с цитированием
Старый 23.06.2010, 14:26   #16
svbezm
Форумчанин
 
Регистрация: 02.04.2010
Сообщений: 104
По умолчанию

Цитата:
Сообщение от JTG Посмотреть сообщение
Стандартными средствами дос - нет.
В паскале это можно было сделать, подключив драйвер svga256.bgi (поддерживает разрешение до 1280x1024 8bit), а как на ассемблере - хз, да и незачем наверно такое разрешение в досе.

У мну в подписе программа - вывод фрактала Серпинского, там вообще разрешение 320х200, а вывод на экран прямой записью в видеобуффер
Во первых INT 10h преывание bios, а не DOS, во вторых обратитесь
к книжке Всеволода Несвижского "Программирование аппаратных средств"
стр 146 таблица биосовских функций для VESA.
Там вы найдете функции INT 10h которые необходимы для разрешения
1280х1024 и 1024х768.
Успехов!
svbezm вне форума Ответить с цитированием
Старый 20.01.2011, 15:53   #17
Vovan91
Пользователь
 
Регистрация: 20.01.2011
Сообщений: 14
По умолчанию

пробовал вывод на экран квадрата с помощью функции, но похоже допускаю ошибку но где не пойму
Код:
.model  small   
    .stack 100h
    .code   

start:   

    mov  AX,11h   
	int  10h        ; видеорежим 640x480   

	call LED_func
	
LED_func PROC NEAR
	
	MOV  AH,0CH        ;ф-ия установки точки   
    MOV  AL,3          ;выбираем цвет 3 палитры   
    MOV  CX, 100        ;X
    MOV  DX, 100        ;Y
	
label_Y:
    MOV  CX, 100        ;X
label_X:

    int  10h   ; вывести пиксель		
    inc  cx    ; Х=Х+1
	
cmp  CX,130   ; если Х <= 30	
jle  label_X      ; goto label_X

    inc  DX    ; Y=Y+1
cmp  DX,130   ; если Y <= 30

jle  label_Y  

ret
LED_func ENDP     

    MOV ah,0        ; ожидание нажатия клавиши   
    INT 16h      

    ret         ; конец программы   
end start
Vovan91 вне форума Ответить с цитированием
Старый 21.01.2011, 04:06   #18
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Vovan91,попробуй таким макаром.
Код:
.model  small   
    .stack 100h
    .code   

start:   

    mov  AX,11h   
	int  10h        ; видеорежим 640x480   

	call LED_func


    MOV ah,0        ; ожидание нажатия клавиши   
    INT 16h      

    ret         ; конец программы   
	
LED_func PROC NEAR
	
	MOV  AH,0CH        ;ф-ия установки точки   
    MOV  AL,3          ;выбираем цвет 3 палитры   
    MOV  CX, 100        ;X
    MOV  DX, 100        ;Y
	
label_Y:
    MOV  CX, 100        ;X
label_X:

    int  10h   ; вывести пиксель		
    inc  cx    ; Х=Х+1
	
cmp  CX,130   ; если Х <= 30	
jle  label_X      ; goto label_X

    inc  DX    ; Y=Y+1
cmp  DX,130   ; если Y <= 30

jle  label_Y  

ret
LED_func ENDP     

end start
А то у тебя возврат из процедуры идёт на её начало.
И ещё: завершать работу exe рекомендуют вызовом функции 4ch прерывания 21h.

Последний раз редактировалось vadimych; 21.01.2011 в 04:11.
vadimych вне форума Ответить с цитированием
Старый 22.01.2011, 20:29   #19
Vovan91
Пользователь
 
Регистрация: 20.01.2011
Сообщений: 14
По умолчанию

vadimych,спасибо
теперь хотел сделать что то типо приведёной сдесь движущейся точки только мне надо чтобы графика которая до этого была чтобы не стиралась
Вложения
Тип файла: zip 1&2.zip (3.2 Кб, 16 просмотров)
Vovan91 вне форума Ответить с цитированием
Старый 23.01.2011, 04:55   #20
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Vovan91, как-нибудь поподробнее о своих замыслах.
vadimych вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
help с графикой SYL@R Помощь студентам 3 07.07.2008 08:11
ПРоблемы с графикой HELP!!! ANARHIST Помощь студентам 2 03.07.2008 09:04
помогите с графикой glasian Помощь студентам 8 26.06.2008 00:15
работа с массивом на ассемблере dmk Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 12.12.2007 19:50