Использование Ассемблера

Добрый день. Подскажите, пожалуйста, существует ли возможность использования ассемблерного кода в Pascal.ABC? В настоящий момент проводим с учениками 9-11 классов экспериментальный курс по программированию демосцены и хотелось бы сократить до минимума использование различных IDE.

PascalABC и PascalABC.Net разные языки - и когда дело заходит за что то такое сложное - различие огромное. Давайте что не путаться, если хотите сказать коротко - говорить просто паскаль.

Возможность однозначно есть. Причём несколько. Но чтоб объяснить, для начала - вы понимаете что значит .Net и что такое управляемый код?

Спасибо за ответ. Да, хорошо. Говорим - паскаль, подразумеваем PascalABC.NET. Разницу между управляемым и неуправляем кодом вполне пониманию. Как работает Net - тоже пониманию, но на уровне начинающего программиста.

Ну тогда объясню относительно коротко - вот 2 основных способа:

  1. external: В справке есть пример. Это слово позволяет подключить 1 функцию из полноценной неуправляемой .dll .
    Но имя функции и .dll с таким способом являются константами. Если надо делать динамически - можно, конечно, использовать те же функции что в C++ для динамический загрузки .dll, которые в свою очередь тоже можно подключить через external, но если уже делать динамически - можно проще:

  2. System.Runtime.InteropServices.Marshal.GetDelegateForFunctionPointer&<ТипФункции>(указатель) динамически создаёт простую обёртку неуправляемому куску кода. указатель может указывать на блок памяти, содержащий только тело функции, вся .dll ему не нужна.
    При описании ТипФункции можно указать конвенцию вызова и т. п. атрибутами:

    [UnmanagedFunctionPointer(CallingConvention.StdCall)]
    ТипФункции = function(...): ...;
    

    Эту память желательно выделять как неуправляемую с помощью Marshal.AllocHGlobal и потом освобождать с Marshal.FreeHGlobal. .GetDelegateForFunctionPointer(new IntPtr(@a[0])) теоретически сработает, но приведёт к утечке памяти, потому что освободить память массива a вы уже не сможете.

Если всё же не достаточно подробно - спрашивайте уже отдельные конкретные вопросы.
Ну и можете скинуть код который в итоге сделаете из этого, я укажу что можно подправить.

Благодарю Вас! Если в чем не смогу разобраться, то с удовольствием воспользуюсь Вашими подсказками

 Институт математики, механики и компьютерных наук ЮФУ, 2005–2021
Администрация форума: В.Н. Брагилевский, С.С. Михалкович, А.М. Пеленицын
Yandex.Metrica