Прерывания. Free Pascal.

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Прерывания. Free Pascal.

Сообщение getintvec » 07.12.2015 11:31:23

Здравствуйте.
Получил задачу в университете: заполнить квадратную матрицу с клавиатуры, используя прерывания. Вывести матрицу на экран также используя прерывания. Я так понял, вместо процедур Readln и Writeln. АССЕМБЛЕРНЫЕ ВСТАВКИ ЗАПРЕЩЕНЫ. И вот это условие вводит в ступор. На форуме, поискав, обнаружил, что для win32 прерывания не работают. И как быть? Задание - то дано и сделать надо, а ни методов, ни способов никто не разъяснил.
Так как же мне, собственно, реализовать эти прерывания? Буду рад любой помощи.
getintvec
незнакомец
 
Сообщения: 3
Зарегистрирован: 07.12.2015 11:16:45

Re: Прерывания. Free Pascal.

Сообщение Mikhail » 07.12.2015 12:29:07

getintvec писал(а):Здравствуйте.
Получил задачу в университете: заполнить квадратную матрицу с клавиатуры, используя прерывания. Вывести матрицу на экран также используя прерывания. Я так понял, вместо процедур Readln и Writeln. АССЕМБЛЕРНЫЕ ВСТАВКИ ЗАПРЕЩЕНЫ. И вот это условие вводит в ступор. На форуме, поискав, обнаружил, что для win32 прерывания не работают. И как быть? Задание - то дано и сделать надо, а ни методов, ни способов никто не разъяснил.
Так как же мне, собственно, реализовать эти прерывания? Буду рад любой помощи.

В Windows никак. И что значит используя прерывания, какие именно?
Mikhail
энтузиаст
 
Сообщения: 562
Зарегистрирован: 24.10.2013 16:06:47

Re: Прерывания. Free Pascal.

Сообщение Лекс Айрин » 07.12.2015 12:33:26

Mikhail, ну почему... функция int, вроде как в лазарусе осталась.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Прерывания. Free Pascal.

Сообщение Mikhail » 07.12.2015 12:35:42

Лекс Айрин писал(а):Mikhail, ну почему... функция int, вроде как в лазарусе осталась.

Что за функция int?
Mikhail
энтузиаст
 
Сообщения: 562
Зарегистрирован: 24.10.2013 16:06:47

Re: Прерывания. Free Pascal.

Сообщение Лекс Айрин » 07.12.2015 12:38:21

Mikhail, функция вызова прерывания.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Прерывания. Free Pascal.

Сообщение Mikhail » 07.12.2015 12:49:34

Лекс Айрин писал(а):Mikhail, функция вызова прерывания.

В защищенном режиме, скорее всего, не будет работать. В задании ТС, скорее всего, имеется в виду DOS.
Mikhail
энтузиаст
 
Сообщения: 562
Зарегистрирован: 24.10.2013 16:06:47

Re: Прерывания. Free Pascal.

Сообщение getintvec » 07.12.2015 13:11:10

Здравствуйте.
Прерывания DOS. Наверное. По аналогии
mov ah,02h
mov dl, 'X'
int 21h.
что-то наподобие. В интернете находил информацию по поводу процедуры GetIntVec. Она не работает.
В самом Паскале писал следующее:
Код: Выделить всё
uses dos;
var r:registers;

. . .

procedure Print(t:byte);
begin
   r.ah:=2;
   r.dl:=t;
   MsDos(r);
end;

. . .

Begin

print(byte('N'));

. . .
end.


Компилятор не ругается, но ничего и не делает.
getintvec
незнакомец
 
Сообщения: 3
Зарегистрирован: 07.12.2015 11:16:45

Re: Прерывания. Free Pascal.

Сообщение Vadim » 07.12.2015 13:20:21

Оно и неудивительно. Это прерывание будет работать только в реальном режиме. Например, если поставить в виртуальную машину MS-DOS и там уже извращаться...
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Прерывания. Free Pascal.

Сообщение getintvec » 07.12.2015 13:23:08

Vadim писал(а):Оно и неудивительно. Это прерывание будет работать только в реальном режиме. Например, если поставить в виртуальную машину MS-DOS и там уже извращаться...


Дос-Бокс подойдет? Если подойдет, то не могли бы вы меня проконсультировать? Что, как, куда? Или если у вас нет ни времени, ни желания, может ссылочки дадите какие или инфу подгоните? Мне, правда, очень надо.
Препод вредничает. Говорит, мол сами-сами, хотя семестр по ассемблеру...
getintvec
незнакомец
 
Сообщения: 3
Зарегистрирован: 07.12.2015 11:16:45

Re: Прерывания. Free Pascal.

Сообщение Vadim » 07.12.2015 13:36:02

Можно попробовать вот эту штуку поставить:
ftp://ftp.freepascal.org/pub/fpc/dist/3 ... -msdos.exe
Это кросскомпилятор специально для MS-DOS. Возможно там прерывания будут работать.
getintvec писал(а):Дос-Бокс подойдет?

Вот как раз там и попробуйте откомпилированные проги запускать. ;-)
Сам то я с такими древностями как MS-DOS уже лет 20 как не работаю, так что вряд ли что-то умное подскажу.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Прерывания. Free Pascal.

Сообщение bormant » 07.12.2015 14:43:37

Лекс Айрин писал(а):функция int

имелось в виду, наверняка, содержимое unit Dos:
procedure Intr(IntNo: Byte; var Regs : TRegisters);
procedure MsDos(var Regs : TRegisters);

А функция Int -- это целая часть действительного аргумента:
function Int(X: Real): Real;

Добавлено спустя 4 минуты 23 секунды:
getintvec писал(а): Задание - то дано и сделать надо, а ни методов, ни способов никто не разъяснил.

Взять DosBox, паскаль для реального режима (да хоть тот же TP, достаточно музейного 5.5, или заморочиться с кросскомпиляцией в DOS), сделать и сдать.
Справочник по функциям BIOS/DOS у Вас, насколько понимаю, есть. Если нет, то или книжка какая про ассемблер и ввод данных, либо Ralf Brown's Interrupt List.
Аватара пользователя
bormant
постоялец
 
Сообщения: 407
Зарегистрирован: 21.03.2012 11:26:01

Re: Прерывания. Free Pascal.

Сообщение Лекс Айрин » 07.12.2015 20:11:36

bormant писал(а):имелось в виду, наверняка, содержимое unit Dos:
procedure Intr(IntNo: Byte; var Regs : TRegisters);
procedure MsDos(var Regs : TRegisters);

Угу... именно так. И в новой версии компилятора она вроде бы должна работать. Возможно, кстати, что придется поиграть с ключами и режимами компиляции.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Прерывания. Free Pascal.

Сообщение Cheb » 08.12.2015 20:06:19

32-разрядные ДОСовские экзешники вполне себе выполняются в консоли Виндовс 7. Очень похоже, что Виндовс включает в себя эмулятор типа ДосБокса, только гораздо более ограниченный. Например, не умеет выполнять 16-разрядные программы.
Надо ещё проверить, насколько хорошо эта хрень эмулирует порты и прерывания.

З.Ы. Ткнул свою старую игрушку от 1998 года:
Microsoft Windows [Version 6.1.7601]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.

d:\proj\g>game
Версия "d:\proj\g\GAME.EXE" не совместима с версией Windows, работающей на этом
компьютере. Проверьте сведения о системе, чтобы узнать, какая версия программы x
86 (32-разрядная) или x64 (64-разрядная) вам нужна, и получите ее у поставщика п
рограммного обеспечения.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Прерывания. Free Pascal.

Сообщение скалогрыз » 08.12.2015 21:21:11

Cheb писал(а):32-разрядные ДОСовские экзешники вполне себе выполняются в консоли Виндовс 7. Очень похоже, что Виндовс включает в себя эмулятор типа ДосБокса, только гораздо более ограниченный.


что такое 32-разрядные ДОСовские экзешники? DOS-же 16 битный, пока какой-нить расширитель не запустить. Но запускающий .exe при этом остаётся 16-битным.

Или ты имеешь в винду виндовские консольные приложения? Но тут уж извините, винда запускает виндовое приложение. Удивлятся не стоит.

Добавлено спустя 2 минуты 41 секунду:
bormant писал(а):Взять DosBox, паскаль для реального режима (да хоть тот же TP, достаточно музейного 5.5, или заморочиться с кросскомпиляцией в DOS), сделать и сдать.


А можно выпендрится и на VirtualBox накатить FreeDOS :)
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Прерывания. Free Pascal.

Сообщение Vadim » 09.12.2015 07:28:02

Cheb писал(а):32-разрядные ДОСовские экзешники вполне себе выполняются в консоли Виндовс 7.

Проблема в другом. На многие досовские (и не только) прерывания в винде стоят просто заглушки. Т.е. они есть, но фактически ничего не делают.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22

Рейтинг@Mail.ru