Подтвердить что ты не робот

Что такое FAR PASCAL?

Мне было интересно, почему в каком-то исходном коде есть такие макросы, как FAR и PASCAL. Что они означают и делают? Благодаря

4b9b3361

Ответ 1

  • PASCAL: это связано с соглашение о вызовах. Параметры помещаются в стек в порядке слева направо (напротив cdecl), и вызывающий отвечает за балансировку стека перед возвратом.

    Это соглашение о вызовах было распространено в следующих 16-битных API: OS/2 1.x и Microsoft Windows 3.x. Там какой-то спор о том, был ли он использован Borland Delphi 1.x

  • FAR: в сегментированном компьютере архитектуры дальний указатель является указателем, который включает селектор сегмента, что позволяет укажите адреса за пределами текущего сегмента.

Для полноты FAR и PASCAL являются макросами prepreocessor, которые при компиляции для 16-разрядных систем расширяются до ключевых слов, необходимых для объявления соглашения о вызовах и размера указателя. В 32-битных системах они обычно расширяются до нуля (если у вас нет странного соглашения о вызове по умолчанию). Макросы сохраняются для обратной совместимости {hat/tip: комментарий от Адриана Маккарти}

Ответ 2

Идя по памяти здесь,

FAR возвращается к 16-битным дням, когда память кучи была разделена на сегменты. Данные NEAR были ограничены по размеру и быстрее, FAR было больше, но дороже.

Насколько я знаю, на 32-битной земле это макрос, который рушится до нуля.

PASCAL - это соглашение о вызове, которое также используется в течение 16-битных дней. С тех пор он был заменен на stdcall.

Оба варианта оставлены для обратной совместимости.

Ответ 3

FAR устарел; он использовался в 16-битном коде для указания указателей, которые могли бы адресовать все адресное пространство, а не только 16-битное смещение к текущему сегменту.

PASCAL - это соглашение о вызове. Как Wikipedia описывает это:

Параметры помещаются в стек в порядке слева направо (напротив cdecl), и вызывающий отвечает за балансировку стека перед возвратом.

Это соглашение о вызовах было распространено в следующих 16-битных API: OS/2 1.x, Microsoft Windows 3.x и Borland Delphi версии 1.x.

Ответ 4

FAR является задержкой с 16-разрядной эры, когда у нас были близкие (16-разрядные) и далеко (32-разрядные) указатели.

PASCAL является соглашением о вызове. Я считаю, что это эквивалентно stdcall в настоящее время.

Ответ 5

это старый вызов...

FAR наследуется от времени, когда процессор регистрирует, где слишком мал, чтобы удерживать полный адрес назначения перехода. так что процессоры имели 2 типа скачка в зависимости от того, как "далеко" место назначения было от текущего счетчика программ.

PASCAL описывает порядок аргументов в стеке, он сообщает, что функция использует порядок, описанный языком программирования Pascal, который отличается от C. (очень старая версия операционных систем, таких как MacOS и Windows, где развивается с использованием Pascal).

Ответ 6

Вероятно, это избыточная/устаревшая кодировка, оставшаяся с 16-разрядной эры.

FAR использовался в 16-разрядных приложениях, указав, что для адреса требуется более 16 бит.

PASCAL (altion) - это тип преобразования, он позволяет компилятору знать, как устроен стек (используя соглашения о вызовах PASCAL), чтобы компилятор мог передать соответствующие параметры в функцию и из нее.

НТН

Ответ 7

В частности, PASCAL говорит, что аргументы функции передаются в порядке слева направо, это уменьшает размер кода (поскольку вызывающий абонент знает, насколько велик стек, и поэтому может его очистить)

C stdcall передает аргументы справа налево, это означает, что вы можете иметь переменное количество аргументов, но для очистки требуется больше кода.