Вторник, 16 Апреля 2024, 08:19

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Форум игроделов » Программирование » Общие обсуждения программистов » Assembler
Assembler
DeswingДата: Суббота, 19 Октября 2013, 18:01 | Сообщение # 21
заслуженный участник
Сейчас нет на сайте
Извините за глупейший вопрос, но... В
Цитата Deswing ()
Сообщение # 17

код написан на TASM? Я просто присматриваю себе среды разработки...
wcptДата: Суббота, 19 Октября 2013, 19:32 | Сообщение # 22
постоянный участник
Сейчас нет на сайте
это похоже на MASM, хотя, возможно, и для TASM тоже годится(я в основном с масм работал). Хотя если переменная с (точнее, ее имя) не мешает компиляции, тогда все-таки тасм, т.к. в масм с - по сути "ключевое слово".

Сообщение отредактировал wcpt - Суббота, 19 Октября 2013, 19:44
DeswingДата: Четверг, 24 Октября 2013, 00:29 | Сообщение # 23
заслуженный участник
Сейчас нет на сайте
Спасибо всем огромное. Психанул, посидел часик и до меня дошло озарение...
Почитал про всякие директивы db, dw, dd, dq, dt ...
Решил задачку на пересечение и объединение элементов (and - это пересечение, а or - объединение. Хотя, если честно, такие сравнения мне не по душе, кажутся мне глупыми...).
Теперь объясните тупейшему: что такое "МОДЕЛЬ" в асме? Ideal и т. п... И что такое прерывания? Вот когда мне стало интересно как выводить значения на экран появляются какие-то прерывания...
И, собственно, как мне "включить" или "выключить" пиксель в определенном месте на экране?

Добавлено (24.10.2013, 00:29)
---------------------------------------------
...и что вы думаете о книжке от Абеля?.. Все преподы заставляют её читать, говорят что она супер и т.п... Я-то читаю, но, вроде, книг я видел и получше...

pelmenkaДата: Четверг, 24 Октября 2013, 01:32 | Сообщение # 24
Драгоценный Тунеядец
Сейчас нет на сайте
Цитата Deswing ()
И что такое прерывания? Вот когда мне стало интересно как выводить значения на экран появляются какие-то прерывания...
И, собственно, как мне "включить" или "выключить" пиксель в определенном месте на экране?

Прерывания
А данные на экран выводятся установкой видеорежима и либо вызовом соответствующего прерывания, либо записью в видеопамять. Что-то в книге Калашникова про это написано, но я уже не помню


Сталина в каждый дом!
wcptДата: Четверг, 24 Октября 2013, 14:41 | Сообщение # 25
постоянный участник
Сейчас нет на сайте
ideal - это по-моему из тасма, собственно, "режим" работы ассемблера. Про нее подсказать ничего не смогу, т.к. с тасмом слабо знаком
директива .model - директива упрощенной сегментации. Собственно, за тебя создает сегменты .code, .stack, .data и прочие, ну и указатели на них.
Также с .model используется "слово", указывающее используемую модель памяти - TINY, SMALL, и прочие.

Про пиксели - в виндовс на чистом ассемблере по-моему никак не установить, а вот в дос запросто - в реальном режиме, в котором работает дос, можно обращаться к реальной области памяти, предназначенной для вывода на экран. Существует МНОГО различных режимов, текстовых, или графических.
Допустим, хочешь поместить на экран пиксель определенного цвета в режиме 13h - 320x200x256. Используется прерывание 00h bios.
следующий фрагмент программы устанавливает режим 13h и устанавливает несколько пикселей на экране:

Код


;где-то ранее определяем макроподстановки
setpixel macro place,count,pixel           
           mov ax,0a000h   ;а вот и тот самый адрес, специально для вывода на экран в графическом режиме.
           mov es,ax
           cld  ;чтобы адреса увеличивались
           mov di,place    ;куда поместить первый пиксель
           mov al,pixel     ;номер пикселя из палитры(256 цветов всего!)
           mov cx,count  ;сколько пикселей установить
           rep stosb               ;помещаем содержимое al в es:di, пока сx!=0
endm

;Также нам надо установить палитру. Как помнится, можно устанавливать отдельные цвета, либо несколько, предварительно подготовив таблицу.
; устанавливаем один регистр(их всего 262к, по-моему, и одновременно на экране может быть показано только 256 из них)
;функция 10h
setregister macro num,red,green,blue             
           mov ax,1010h
           mov bx,num     ;номер регистра
           mov dh,red      ; компонент R, максимальное значение каждого компонента - 0x3F.
           mov ch,green   ; компонент G
           mov cl,blue       ; компонент  B
           int 10h
                     
endm

;устанавливаем режим 13h
mov ax,0013h
int 10h   ; функция 00 прерывания 10h, в al - номер режима.

setregister 0,3fh,0,0   ;красный цвет, первый регистр
setpixel  0, 10,0 ;самый первый пиксель,10 пикселей, первый регистр



надеюсь, не ошибся.

Добавлено (24.10.2013, 14:41)
---------------------------------------------
насчет Абеля - по-моему,это как раз то, что нужно.

И кстати - не рекомендую устанавливать пиксели через прерывания - это намного медленнее! Намного лучше слать все сразу в память(как в моем примере)


Сообщение отредактировал wcpt - Четверг, 24 Октября 2013, 15:07
Форум игроделов » Программирование » Общие обсуждения программистов » Assembler
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг