21.03.2019, 03:40 [+3 UTC]
в нашей команде: 3 475 чел. | участники онлайн: 1 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.72 (17.03.2019)
JS-v.1.33 | CSS-v.3.35

Общие новости:
09.03.2019, 10:08

Форум:
18.03.2019, 16:49

Последний вопрос:
19.03.2019, 15:15
Всего: 149055

Последний ответ:
20.03.2019, 15:13
Всего: 258006

Последняя рассылка:
21.03.2019, 02:45

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
16.09.2009, 15:50 »
Трофимов Михаил Валерьевич
Сердечно благодарю!
13.04.2010, 19:44 »
Александр Висящев
Классный сайт. Ребята, то, что вы делаете, достойно восхищения. Так держать! С уважением, Александр.
14.07.2010, 15:25 »
Терентьев Валерий Петрович
Большое спасибо!Получилось! [вопрос № 179493, ответ № 262533]

РАЗДЕЛ • Pascal / Delphi / Lazarus

Создание программ на языках Pascal, Delphi и Lazarus.

[администратор рассылки: Зенченко Константин Николаевич (Старший модератор)]

Лучшие эксперты в этом разделе

Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 473
zdwork
Статус: 1-й класс
Рейтинг: 126
puporev
Статус: Профессионал
Рейтинг: 104

Перейти к консультации №:
 

Консультация онлайн # 185912
Раздел: • Pascal / Delphi / Lazarus
Автор вопроса: Mihenze
Отправлена: 26.04.2012, 22:31
Поступило ответов: 1

Здравствуйте! Прошу помощи в следующем вопросе:
В графическом режиме средствами BIOS изобразить на экране окружность радиусом 30.
То есть в коде паскаля будет использоваться ассемблер для рисования.
И очень большая просьба прокомментировать каждую строчку кода.

Состояние: Консультация закрыта

Здравствуйте, Mihenze!

Смотрите приложение!
Код ТР 7.0.
В программе не используются модули, Crt и Graph, вместо них используются вставки ассемблера: нулевые фнукции прерываний 0х10 и 0х16, аналоги функций паскаля InitGraph и ReadKey.

Удачи!

Приложение:


Консультировал: Зенченко Константин Николаевич (Старший модератор)
Дата отправки: 30.04.2012, 19:42

5
нет комментария
-----
Дата оценки: 30.04.2012, 20:05

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 185912

Вадим Исаев ака sir Henry
Мастер-Эксперт

ID: 425

# 1

= общий = | 27.04.2012, 05:29 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

© Цитата:
...изобразить на экране окружность радиусом 30.

30 пикселей?
© Цитата:
В графическом режиме средствами BIOS

Для какой операционной системы?
Вопрос этот не праздный, т.к. начиная с Windows NT, обращения к многим функциям BIOS операционной системой просто напросто блокируются.
© Цитата:
То есть в коде паскаля будет использоваться ассемблер

Ассемблер - это обязательное условие? Мягко говоря, он тут вовсе и не нужен. Ассемблерные вставки в языках высокого уровня, типа Pascal, используются в том случае, если есть повышенные требования к скорости исполнения кода.

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

Сергей Бендер
Профессионал

ID: 304622

# 2

= общий = | 27.04.2012, 21:49 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Вадим Исаев ака sir Henry:

Я сталкивался с таким -- консультировал студента с похожим заданием. Это прямое обращение к видеопамяти через прерывания. Тут функции самые простые и базовые -- они поддерживаются в NTшном виртуальном ДОСе. Может быть напишу.

Зенченко Константин Николаевич
Старший модератор

ID: 31795

# 3

= общий = | 27.04.2012, 23:50 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

1) Какая ОСь у Вас?
Если Vista или семерка, то графическим режимом Вы воспользоватся не сможете, т.к. старые графические режимы эти ОСи не поддерживают, вернее их эммуляторы режима DOS'a. В ХР эммулятор ещё как-то справляется.

2)Assembler:
Есть несколько виделрежимов, которые различаются по типу кодирования одного пикселя:
монохром(1 бит),
CGA(2 бита),
EGA/VGA(4 бита),
SVGA(8 бит),
HiColor(16 бит),
TrueColor(24 и 32 бита).
Каждый из этих режимов требует своего подхода к программированию. Современные видеоадаптеры уже точно не работают в первых трех режимах, их может эммулировать ОСь. 8 бит ещё может кто-либо из производителей поддерживать, но не факт(это лично моё мнение, т.к. нет возможности проверить множество контролерров).

С SVGA можно работать сердствами BIOS: функции 0Ch и 0Dh(прерывание 10h). С режимом Hi и True можно работать с помощью функций BIOS 10h(прерывание 10h), но само такое программирование слишком запутано, т.к. скрывает от программиста именно работу с портами и программирование видеоконтролера, тем самым затрудняя понимание кода, хотя смысл этих функций именно к этому и сводится: получить данные и запрограммировать нужный порт.

Стандарт Borland/Turbo Pascal'я позволяет с помощью InitGraph полключить нужный режим или самый оптимальный по
умолчанию и одновременно нужный BGI-файл драйвера. Соответственно подключаются возможности ввода/вывода информации с/на экран под стандартные функции.


Сейчес уточняющие вопросы:
1)ОСь?
2)Адаптер, процессор?
5)Какой компилятор?
3)Наличие FDD(дисковода) т.е. есть возможность написать под чистый DOS.
4)Запустить на своем РС программку паскаля:
a:=detect;автоопределение оптимального режима
InitGraph(a,b,'');инициализация графического режима, BGI-файл должен быть в одной папке с программой
a:=Graphresult;результат инициализации графического режима
if a<>0 then writeln('error:=',a)ошибка перехода в графический режим
else a:=GetGraphMode;текущий графический режим и соответственно это значение нужно поазать

покажите, что получилось.

-----
Последнее редактирование 28.04.2012, 00:03 Зенченко Константин Николаевич (Старший модератор)

=====
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.
smile

неизвестный

# 4

= общий = | 29.04.2012, 20:09

1. ХР
2. intel core2duo(думаю не имеет значения так как хр установлена на виртуалку)
5. Turbo pascal
3. дисковода нет
4. пытался запустить прогу, она не щапускается, во первых просила добавит бегин - сделал, дальше пишет ненайденный идентификатор к переменной, какой тип я не знаю поэтому не объявлял


В помощь прикрепляю аналогичную прогу, но написанную на си++

=====
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.
smile

-----
 Прикрепленный файл:  скачать (RAR) » [9.4 кб]

Сергей Бендер
Профессионал

ID: 304622

# 5

= общий = | 30.04.2012, 12:34 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

© Цитата:
пытался запустить прогу, она не щапускается,


Вы имеете хоть какие-то минимальные представления о программировании на Паскале?

неизвестный

# 6

= общий = | 30.04.2012, 16:41

Минимальные представления имею, и паскаль понимаю, но как его с ассемблером связать не понимаю! Но прога рабосчая, у меня на хп запускается.

Зенченко Константин Николаевич
Старший модератор

ID: 31795

# 7

= общий = | 30.04.2012, 18:35 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Посмотрите этот код:

const
  r=30;{радиус}
  x0=50;{центр окружности Х}
  y0=50;{центр окружности У}
  myColor=15;{цвет окружности}
var
  x,y,z:integer;
begin
{вызываем ассемблер}
  asm
    mov ax,13h{устанавливаем видеорежим 320х200х256}
    int 10h{вызываем прерывание BIOS}
  end;
{}
  for z:=0 to 359 do
    begin
      {считаем текущую координату точки средствами паскаля}
      x:=x0+round(r*cos(z*pi/180));
      y:=y0+round(r*sin(z*pi/180));
      {выводим средствами ассемблера}
      asm
        {справка по функции BIOS-записать графический пиксель 
AH = 0Ch-номер функции
BH = page number-номер видео страницы
AL = pixel color-цвет пикселя
CX = column-столбец
DX = row-строка
	}
        mov ah,0ch{номер функции}
        mov al,myColor{устанавливаем свой цвет пикселя}
        xor bx,bx{текущая видеостраница}
        mov cx,x{графическая координата Х}
        mov dx,y{графическая координата У}
        int 10h{вызываем прерывание BIOS}
      end;
    end;
  asm
    {ожидаем нажатие любой клавиши на клавиатуре}
    xor ax,ax{номер функции}
    int 16h{вызываем прерывание BIOS}
  end;
end.

Вам всё понятно?

=====
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.
smile

неизвестный

# 8

= общий = | 30.04.2012, 19:28

Да, все понятно, спасибо огромное!!!

=====
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.
smile

 

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.16444 сек.

© 2001-2019, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.72 от 17.03.2019
Версия JS: 1.33 | Версия CSS: 3.35