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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2011, 13:38   #1
Nicko_mt
Пользователь
 
Аватар для Nicko_mt
 
Регистрация: 14.04.2011
Сообщений: 31
По умолчанию Оптимизация стандартной процедуры.

Доброго времени суток.Возник вопрос.Возможно ли написать ассемблерную вставку для паскаля оптимизирующую его стандартную функцию putpixel.Вопрос впринципе частый однако как её переписать под режим svga 1024*768*256 и возможно ли это. Можно ли добится ускорения процедуры этим.
Nicko_mt вне форума Ответить с цитированием
Старый 29.04.2011, 08:34   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Nicko_mt
Если под Windows то ускорения при использовании ассемблерной вставки не будет, так как и ассемблер и паскаль будут использовать WinAPI-фукцию PutPixel другое дело, для чего тебе понадобилось выводить точку на экран? Явно для рисования, поэтому и в ассемблере и в Паскале для ускорения графики можно использовать графические функции которые работают с графическими примитивами например Pie, LineTo, Poligone, Ellips и т.п. также если требуется выводить картинки, то используется функция BitBlt
Mikl___ вне форума Ответить с цитированием
Старый 05.05.2011, 22:37   #3
Nicko_mt
Пользователь
 
Аватар для Nicko_mt
 
Регистрация: 14.04.2011
Сообщений: 31
По умолчанию

И всё же в продолжение темы
Код:
asm
  mov ax,y
  mov bx,y
  shl ax,9
  shl bx,9
  add ax,bx
  add ax,x
  mov di,ax
  mov ax,0A000h
  mov es,ax
  mov al,c
  stosb
end;
Пиксели выводит но вверху экрана в небольном секторе.Как оптимизировать корректно на 1024*768*256?Заранее благодарен.
Nicko_mt вне форума Ответить с цитированием
Старый 06.05.2011, 03:43   #4
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Nicko_mt
а как ты установил графический режим 1024*768*256? В коде этого нет возможно причина в этом. Если через VESA, то установка координат точки через ES=0A000h и DI будет работать только в самой верхней части экрана. Считай сам 1024х768=786432 а DI может изменяться только в пределах от 0 до 65535 (0FFFFh). В видеопамять SVGA можно выводить только кусками по 65536 байт. 786432=12*65536 то есть 12 сегментов по 64 Кбайта с адресами от 0000 до FFFFh. В сегменте 65536/768=85 полных строк и одна неполная строка из 256 пикселей. После чего требуется переключить экран функцией 4F05h прерывания 10h и заполнить следующие 85 строк и т.д
Mikl___ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со стандартной библиотекой С. Lag Общие вопросы C/C++ 0 30.05.2010 19:03
VS05 находит ошибки в стандартной библиотеке Lavisa Помощь студентам 1 08.01.2010 03:26
Изменение стандартной формы qwerra Помощь студентам 10 25.06.2009 19:13
Задача по стандартной матрице. Нужна помощь! Rav4 Паскаль, Turbo Pascal, PascalABC.NET 2 26.12.2008 21:48