Помощь - Поиск - Пользователи - Календарь
Полная версия: Программ на паскале с вставками на ассемблере
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ассемблер
Венечка
Нам на паскале задали написать прогу(требуется создать DOS-программу для просмотра фрагментов содержимого оперативной памяти. Основная цель работы – научиться эффективно пользоваться четырехбайтными адресами реального режима процессоров i80x86.
) с такими требованиями:

-программа использует текстовый режим работы монитора;

-весь вывод на экран производится посредством прямой записи в видеопамять (в диапазон памяти адаптера CGA – сегмент $b800);

-программа выполняется в окне. Это окно исчезает после ее исполнения, при этом восстанавливается исходное содержимое экрана;

-окно состоит из двух полей: поля просмотра фрагмента содержимого памяти и -поля ввода базового адреса;

-после нажатия на ключевую комбинацию клавиш (например клавиша 'Ins' для сегментной части адреса и клавиша 'Del' для смещения) программа позволяет ввести базовый адрес (с которого начинается отображаемый диапазон);

-нажатие на стрелки вверх и вниз вызывает прокрутку содержимого оперативной памяти в окне просмотра;

-нажатие на клавиши 'PgUp' и 'PgDn' вызывает ускоренную прокрутку содержимого;

-в окне отображения выводится несколько (не менее четырех) строк формата: <адрес> - <серия слов>;

-детали ввода базового адреса и вывода дампа памяти оговариваются в вариантах.
Ну вот мое задание:

1) Базовый адрес задается в десятеричном виде одним компонентом – абсолютным номером ячейки и 2)Содержимое выводится в символьном виде сериями по 16 однобайтовых слов.

Я сделала все классно, а препод не принял.... sad.gif Прикололся и говорит перепиши используя ассемблерные вставки... И еще требования:
-Программа предоставляет возможность переключать режимы вывода содержимого памяти во время работы.

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

-Содержимое структур данных DOS производится как в любом из трех стандартных режимов, так и в режиме специфическом для данной структуры, то есть с интерпретацией данных в контексте их предназначения (в виде записи с именованными полями).

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

-В управлении монитором наряду с прямым доступом к видеопамяти используются функции прерывания BIOS 10h. В частности через BIOS выполняется управление положением курсора.

Как, вообще не представляю?! Я в паскале то не ахти, а тут ещё ассемблер... sad.gif
ОБЪЯСНИТЕ, ПОЖАЛУЙСТА!!
volvo
Венечка
А можно попросить присоединить исходник твоей программы? Посмотрим, чего он хочет...
Венечка
Денег, наверно... ;)

Исходник именно для моего задания найти не могу, а вот другой иходник, где задание 1)Базовый адрес задается в десятеричном виде двумя компонентами: сегментом и смещениеми 2)Содержимое выводится в восьмеричном виде сериями по 8 однобайтовых слов.
Оно с моим почти идентично, там чуток поменять - это не проблема, главно хоть в глаза увидеть как должно быть.
Altair
Цитата
Прикололся и говорит перепиши используя ассемблерные вставки... И еще требования:

Ассемблерные вставки? так надо на пасе писать основной код что-ли???

ЗЫ: однако вы самокритичны...
не надо так... ;)
Венечка
Ага, основной код надо на паскале (чтоб его ! sad.gif )
А куда эти вставки? Фиг знает, я поняла что процедуры переписывать надо, там ещё слово "asm" должно быть, какие-то АН, ВН. Я же говорю НУ НЕ ДАНО МНЕ! :ypr:
GoodWind
Цитата
НУ НЕ ДАНО МНЕ!

прекратить самоуничижение angry.gif lol.gif
Ассемблер Вы (а можно на "ты" ? ) изучали ?
Altair
Цитата
там ещё слово "asm" должно быть

Асм это зарезервированно слово для начала вставки ассемблерной.
Цитата
какие-то АН, ВН.

Это регистры.
AX: AH, AL
BX: BH, BK
и так далее... smile.gif
Венечка
Цитата(GoodWind @ 14.11.04 21:15)
Ассемблер Вы (а можно на "ты" ? ) изучали ?

В том-то и дело в жизни об ассемблере ничего не знаю! (на "ты" можно ;) ) А то что знаю недостаточно для решения этой задачи...
Самое главное время на изучение нет, сдавать в пятницу, в эту... unsure.gif
Altair
Стоп!
Если вы не изучали асма, то ва мне могут давать такого задания!
Венечка
Цитата
А куда эти вставки? Фиг знает, я поняла что процедуры переписывать надо, там ещё слово "asm" должно быть, какие-то АН, ВН.

Представляю как это смешно - НЕ МОЧЬ СДЕЛАТЬ ТАКУЮ ПРОГУ, ТОЛЬКО ИЗ_ЗА ТОГО, ЧТО ТОЛКОМ РАЗОБРАТЬСЯ ВРЕМЕНИ НЕ ДАЛИ!
Эээх, быть мне дворником :p7:
Венечка
Цитата(Oleg_Z @ 14.11.04 22:49)
Стоп!
Если вы не изучали асма, то ва мне могут давать такого задания!

В нашем универе всё возможно!!! А так как у нас в группе все ВСЁ понимают, обычным людям никаких объяснений и пояснений не дали. sad.gif Поэтому-то и обидно, и досадно - сижу и парюсь, только толка никакого.
Altair
Цитата
Эээх, быть мне дворником 

Неа, der Soldaten! lol.gif
:D
volvo
Oleg_Z

Offtop:
Цитата
Я сделала все классно

Или не только у нас девушки служат?
Altair
Блин, Run-Time-Error у меня!
Я и не посмотрел профиль, а ник не дочита, мне показалосьт Ванечка!
Извините.. тогда надо помочь на 100% smile.gif
Щас ТП установлю ...
Венечка
Цитата
Я и не посмотрел профиль, а ник не дочита, мне показалосьт Ванечка!

Цитата
Неа, der Soldaten


Ребят! Ну вы насмешили - хоть настроение подняли! Пасибки rolleyes.gif
P@sh@
интересно, зачем через BIOS выполняется управление положением курсора, если вывод на экран производится посредством прямой записи в видеопамять (в диапазон памяти адаптера CGA – сегмент $b800) ?
и еще, какие структуры данных DOS подразумеваются?
P@sh@
Венечка
можно начать с процедуры вывода на экран (как раз посредством прямой записи в видеопамять)
procedure ShowString(x,y: word; s: string);
assembler;
asm
 push ds; push si;   {сохраняем важные регистры}
 mov  ax,0B800h; mov  es,ax;  {загружаем сегмент видеопамяти}
 mov  ax,y; mov  dx,160; mul  dx;  {умножаем Y на 80 и на 2}
 mov  di,x; shl  di,1;  {умножаем X на 2}
 add  di,ax;  {складываем Х и Y}
 lds  si,s;    {загружаем адрес строки s}
 xor  ch,ch;  {в старшем байте счетчика цикла ноль}
 lodsb; mov  cl,al;  {загружаем из строки ее длину в младший байт счетчика }
@1:lodsb; stosb;  {напечатать один символ}
 inc  di; loop @1;  {пропустить на экране байт атрибутов и продолжить цикл}
 pop  si; pop  ds;  {восстанавливаем важные регистры}
end;


а объекты обязательно использовать в программе? может лучше без них?
Венечка
Спасибо, P@sh@! smile.gif
Вот гляньте в ехешник - это он нам пример привел как должна прога выглядеть после компиляции, а сам код должен быть написан с ассемблерными вставками.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.