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 |
|
| |
|