![]() |
|
Модераторы: volvo877, Snowy, MetalFan |
![]()
|
|
| Pakshin A. S. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: нет Всего: 61 |
САБЖ.
А то раздел пустует!!! |
|||
|
||||
| Ripper |
|
|||
![]() Lonely soul... ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 30.6.2004 Где: г. Москва Репутация: нет Всего: 23 |
Программа просмотра графических PCX файлов:
---- Для хранения изображений в электронном виде используются различные спобы кодирования и соглашения о способе их записи - графические форматы. Среди них PCX, BMP, GIF, JPEG и другие. Одним из наиболее простых является формат PCX. В данной работе предлагается написать программу, которая выполняет декодирование графического PCX-файла и выводит соответсвущее изображение монитора в видеорежиме 13h VGA. PCX-файл состоит из заголовка размером 128 байт, секции данных произвольного размера и, возможно, секции параметров палитры размером 768 байт. Секция параметров палитры VGA имеется для PCX-формата версии 5 и старше. Ниже приводится описание формата заголовка. Суммарная длина заголовка - 128 байт.
Параметры палитры размещаются в конце файла но их установку лучше производить перед выводом изображения на экран. Предлагается слудующий алгоритм установки цветовой палитры: 1)Найти конец файла 2)Отступить на 768 байт назад 3)Считать значения 4)Все считанные значения разделить на 4 5)Произвести установку палитры в VGA-режиме Диапазон значений интенсивности цветов RGB-палитры в VGA-Режиме - 0..63, а значения использующиеся в PCX-файле лежат в диапазоне 0..255. Поэтому и выполняется деление считанныз значение на 4. Декодирование PCX-файла происзодит следующим образом. Первые 128 байт содержат заголовок. Они могут быть пропущены если будут отображаться только 256-цветные файлы с изображением размером 320х200 пикселов. В противном случае из заголовка извлекается необходимая информация. Далее сччитывается байт данных. Декодированный байт данных в 266-цветном режиме представляет собой номер элемента палитры для графической точки. Если старшие 2 бита считанного байта нулевые, данный байт должен быть выведен на экран. Если же они еденичные, 6 младших битов байта содержат значение, указывающее сколько раз следующий байт должен быть отображен на экране. Для определения числа повторений цикла к считанному значению и числу 63 применяется операция "логическое 6": temp:=значение считанного байта данных; for loop :=1 to (temp AND 63) do . . . Затем считывается очередной байт данных и все повторяется до тех пор пока изображение не будет выведено на экран полностью -------------------- "Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом |
|||
|
||||
| Pakshin A. S. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: нет Всего: 61 |
Начало положено....
Дополнение: пример проги... |
|||
|
||||
| Coder |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: нет Всего: 11 |
Ripper, это взято из учебника Немнюгина - Практика на ТП?
|
|||
|
||||
| ~FoX~ |
|
|||
![]() НЕ рыжий!!! ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2819 Регистрация: 8.10.2003 Где: Зеленоград Репутация: 1 Всего: 68 |
||||
|
||||
| Fedor |
|
|||
![]() Днепрянин ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2090 Регистрация: 8.2.2003 Где: Великий Репутация: нет Всего: 32 |
Я те статьи специально для этого и писал. Но я хочу сначала дописать еще несколько основных алгоритмов, а потом запихну в ФАК. -------------------- Мы - Днепряне. Мы всех сильней. |
|||
|
||||
| Fedor |
|
|||
![]() Днепрянин ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2090 Регистрация: 8.2.2003 Где: Великий Репутация: нет Всего: 32 |
Ребят, давайте поактивнее
Никто не хочет сам статью написать? Давайте с тематиками определимся... Вот например работа с файлами. Или реализация различных алгоритмов... -------------------- Мы - Днепряне. Мы всех сильней. |
|||
|
||||
| AgereS |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 426 Регистрация: 23.6.2004 Репутация: нет Всего: 3 |
по виртуальным методам пожалуйста разъясните кто нибудь...
|
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: нет Всего: 484 |
Качнуть SWAG. Там море всего.
|
|||
|
||||
| MacTep |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1292 Регистрация: 4.8.2003 Где: г. Самара Репутация: нет Всего: 4 |
Кстати, SWAG. Если у кого нет, могу поделиться, да и статейки подкинуть для DRKB. Главное - интерес... Там много всего. Что именно нужно?
-------------------- (A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :) |
|||
|
||||
| Arsuit |
|
||||||||||||||||||||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 17.5.2006 Где: Казань Репутация: нет Всего: нет |
[center][color=#FF0000]Встроенный ассемблер[/color][/center]
[color=#3333FF]Основы[/color] Я думаю, что все, кто хоть немного знаком с Турбо Паскалем, знают, что в нем есть довольно удобный инструмент, который называется встроенным ассемблером, но далеко не все новички умеют им работать. Встроенный ассемблер (далее - просто ассемблер) дает возможность программировать на уровне отдельных машинных инструкций. Это - главное отличие ассемблера от Паскаля и в этом отличии сосредоточены все его достоинства и недостатки. Достоинство заключается в том, что, программируя на ассемблере, программист обычно выбирает последовательность машинных инструкций так, чтобы реализовать нужные вычисления с максимальной скоростью при минимальных затратах памяти, в то время как даже такой весьма совершенный компилятор, как Турбо Паскаль, неизбежно вносит в машинный код некоторую избыточность, уменьшающую скорость счета и увеличивающую затраты памяти. С другой стороны, программирование на уровне машинных инструкций - чрезвычайно хлопотное занятие и не может сравниться по скорости разработки программ с программированием на Паскале - в этом заключается главный недостаток ассемблера. Ассемблерные инструкции в паскале пишутся примерно так:
Операторы asm...end работают, как операндные скобки begin...end;, поэтому можно делать так:
и так:
[color=#3333FF]Регистры[/color] В Турбо Паскале (вернее в МП 8086/8088) имеется 14 регистров. Их можно поделить на 5 групп: 1. Регистры общего назначения (АХ, ВХ, СХ, DX); предназначены для хранения операндов и выполнения основных команд; любой из них может использоваться как совокупность двух независящих друг от друга 8-разрядных регистров: старшего байта регистра (АН, ВН, СН, DH) и младшего байта (AL, BL, CL, DL); например, АХ состоит из АН и AL; 2. Сегментные регистры (CS, DS, SS, ES); используются для указания сегмента при адресации памяти; 3. Регистры-указатели (SP, BP, IP); используются для указания смещения при адресации памяти; 4. Индексные регистры (SI, DI); применяются для индексной адресации; 5. Регистр флагов. используется для хранения признаков состояния процессора. Теперь подробнее: AX, BX, CX, DX можно использовать как переменные. Также в них возвращается значения функций и многое другое. CS, DS, SS, ES используются для указания сегмента. В частности CS - Содержит номер сегмента памяти (сегмента кода), в котором располагается текущая машинная инструкция DS - Содержит номер сегмента памяти (сегмента данных), в котором располагаются данные (константы и переменные) SS - Это сегмент Стека, а ES это... это дополнительный сегментный регистр, который используется для межсегментного обмена данными и в некоторых строковых операциях SP - Указывает на вершину стека. Совместно с регистром SS он адресует ячейку, куда будет помещаться/извлекаться операнд. BP - т.н. указатель базы. Облегчает создание и использование локального стека. IP - Определяет смещение относительно начала сегмента кода CS очередной исполняемой машинной инструкции. Содержимое IP автоматически изменяется в ходе исполнения инструкции, обеспечивая правильный порядок выборки команд из памяти. SI - Определяет адрес источника информации при индексной адресации данных. По умолчанию используется в паре с DS. DI - определяет приемник информации при межсегментном обмене данными. По умолчанию - в паре с ES. [color=#3333FF]Команды.[/color] Ниже приведены команды, которые используются при использовании встроенного Ассемблера. Команды пересылки данных MOV - Переслать значение. push - "Загнать" в стек pop - Извлечь из стека xchg - Обменять значения mov, xchg нельзя использовать для пересылки из памяти в память:
Вот пример. (В комментариях - код на Паскале, чтобы было легче разобраться)
[color=#3333FF]Арифметические команды.[/color] ADD Сложить ADC Сложть, добавить перенос INC Увеличить на единицу SUB Вычесть SBB Вычесть с заемом DEC Уменьшеть на единицу MUL Умножить iMUL Умножить со знаком DIV Поделить iDIV Поделить со знаком Вот пример - программа выполняющая над двумя числами 4 арифметические операции
Вот. Теперь... Битовые команды: and or xor not shl shr
[color=#3333FF]Условия.[/color] Синтаксис написания условий в ассемблере значительно отдичается от Паскаля. Попробую объяснить что и как. Если, например, в паскале синтаксис условия выглядит так: if (условие) then описание, например if a=0 then b := 7; На ассемблере это будет выглядеть совсем по другому:
Вот. Сначала идет оператор cmp и два сравниваемых параметра через запятую. На следующей строчке идет параметр сравнения. В данном случае он расшифровывается как перейти, если не равны. Вот все параметры условий: Операция больше: JA - для беззнаковых чисел JG - для чисел со знаком Числа равны - JE Операция меньше: JB - для беззнаковых чисел JL - для чисел со знаком Операция больше или равно: JAE - для беззнаковых чисел JGE - для чисел со знаком Операция меньше или равно: JBE - для беззнаковых чисел JLE - для чисел со знаком Не равно - JNE Новички часто путаются с написанием условий на ассемблере т.к. логика при их написании должна быть совсем другая. [color=#3333FF]Прерывания.[/color] Здесь уж совсем все просто. В регистры с помощью оператора mov загоняются значения, после этого пишется int (прерывание). Все.
[color=#3333FF]Ассемблерные процедуры.[/color] Синтаксис.
например:
[color=#3333FF]Ассемблерные функции.[/color] Синтаксис:
Результат функции записывается в регистры. А именно: длиной 1 байт (Byte, Char и т.п.) - в регистре AL; длиной 2 байта (Integer, Word) - в регистре АХ; длиной 4 байта (Pointer, LongInt) - в регистрах DX (старшее слово) и АХ (младшее слово); типа Real - в регистрах DX, BX, АХ (старшее слово - в DX, младшее в АХ); вещественных типов Single, Double, Extended, Comp - в регистре ST (0) сопроцессора; строкового типа - во временной области памяти, на которую ссылается @Result. Пример:
Литература Фаронов В. В. Турбо паскаль. Начальный курс Это сообщение отредактировал(а) Arsuit - 18.5.2006, 21:12 |
||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||
| Snaiper |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 14.5.2007 Репутация: нет Всего: нет |
Дейтсвительно ребята давайте кто-нибудь возьмитесь за статью по работе с файлами!!!
|
|||
|
||||
| KuZyagroup |
|
|||
![]() magento solution ![]() ![]() Профиль Группа: Участник Сообщений: 283 Регистрация: 16.4.2007 Где: Kiev Репутация: нет Всего: 4 |
Работа с файлами для новичков
С переменными InPut и OutPut работа с файлами ничем не отличается от работы с екраном. Но будьте осторожны с переменными InPut и OutPut так как посе закрытия файла не во всех компиляторах возвращается привязка к монитору. EoLn(o) - false если после коретки есть ещё символы до конца линии true - если после коретки символ конца стори или файла EoF(o) - false если после коретки есть ещё символы до конца файла true - если после коретки символ конца файла (при этом после этого символа может быть информация, однако этот извращенный случай рассматривать не будем) Если файл открыт через InPut or OutPut то вводить (o) опускается Это сообщение отредактировал(а) KuZyagroup - 23.5.2007, 04:03 Присоединённый файл ( Кол-во скачиваний: 4 )
Q.PAS 1,02 Kb |
|||
|
||||
![]()
|
| Правила форума "Delphi" | |
|
|
Запрещается! 1. Обсуждать и делится взломанными компонентами или программным обеспечением 2. Публиковать ссылки на варез 3. Оффтопить
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |