Подпрограммы в машинных кодах могут быть написаны вручную или же получены путем дизассемблирования выходных файлов компиляторов Си или некоторых других языков. Пит Эберлейн написал "мини-ассемблер" для использования с Euphoria. Просмотрите Архив файлов. Не забывайте, что ваш машинный код будет исполняться в 32-разрядном защищённом режиме. Просмотрите файл demo\dos32\callmach.ex, чтобы получить более конкретное представление о деталях этого дела.
peek (читать_из_памяти)
- выдаёт один или более байтов из памяти с заданного адреса
peek4s (читать_из_памяти_4_байта_и_знак)
- выдаёт 4-х байтовую величину со знаком из памяти с заданного адреса
peek4u (читать_из_памяти_4_байта_без_знака)
- выдаёт 4-х байтовую величину без знака из памяти с заданного адреса
poke (записать_в_память)
- записывает один или более байтов в память, начиная с заданного адреса
poke4 (записать_в_память_4_байта)
- записывает 4-х байтовую величину в память по заданному адресу
mem_copy (копировать_память)
- копирует в памяти последовательность байтов с одного заданного адреса по другому
mem_set (заполнить_память)
- устанавливает все байты заданного участка памяти в заданное значение
call (вызвать)
- вызывает на исполнение подпрограмму, написанную в машинных кодах
dos_interrupt (прерывание_dos)
- вызывает подпрограмму обработки прерывания DOS (DOS32)
allocate (выделить_память)
- выдаёт адрес свободного участка памяти заданного объёма
free (освободить_память)
- освобождает участок памяти, ранее выделенный по команде allocate
allocate_low (выделить_память_внизу)
- выдаёт адрес свободного участка нижней памяти (адреса менее 1Mb) (DOS32)
free_low (освободить_память_внизу)
- освобождает участок памяти, ранее выделенный по команде allocate_low (DOS32)
allocate_string (поместить_строку_в_память)
- размещает в памяти заданную строку с нуль-терминатором и выдаёт её адрес
register_block (учесть_блок)
- регистрирует в списке безопасных блоков участок памяти, ранее уже выделенный какой-либо подпрограммой
unregister_block (вычеркнуть_блок)
- вычёркивает из списка безопасных ранее зарегистрированный блок памяти (см. выше)
get_vector (получить_адрес_вектора)
- выдаёт адрес обработчика прерывания (DOS32)
set_vector (установить_адрес_вектора)
- устанавливает адрес обработчика прерывания (DOS32)
lock_memory (запереть_память)
- предохраняет заданный блок памяти от перенесения на диск при работе виртуальной памяти (DOS32)
int_to_bytes (байты_из_целого)
- выдаёт 4 байта, соответствующие заданному целому
bytes_to_int (целое_из_байтов)
- выдаёт целое, соответствующее заданным 4 байтам
int_to_bits (биты_из_целого)
- выдаёт ряд битов, соответствующий заданному целому
bits_to_int (целое_из_битов)
- выдаёт целое, соответствующее заданному ряду битов
atom_to_float64 (атом_в_плавающее_64_бит)
- выдаёт ряд из 8 байтов, соответствующий заданному атому, в 64-битном формате IEEE для чисел с плавающей точкой
atom_to_float32 (атом_в_плавающее_32_бит)
- выдаёт ряд из 8 байтов, соответствующий заданному атому, в 32-битном формате IEEE для чисел с плавающей точкой
float64_to_atom (плавающее_64_бит_в_атом)
- выдаёт атом, соответствующий ряду из 8 байтов в 64-битном формате IEEE для чисел с плавающей точкой
float32_to_atom (плавающее_32_бит_в_атом)
- выдаёт атом, соответствующий ряду из 4 байтов в 32-битном формате IEEE для чисел с плавающей точкой
set_rand (установить_датчик_случайных_чисел)
- устанавливает датчик случайных чисел в режим выдачи помеченной серии чисел с восстанавливаемым порядком
use_vesa (использовать_vesa)
- переключает интерпретатор Euphoria в режим выполнения рекомендаций видеостандарта VESA (DOS32)
crash_file (файл_отчета_об_авосте)
- определяет файл для записи диагностической информации, если Euphoria обнаруживает ошибку в вашей программе
crash_message (сообщение_об_авосте)
- определяет сообщение об ошибке, которое будет выводиться, если Euphoria обнаруживает ошибку в вашей программе
crash_routine (подпрограмма_по_авосту)
- определяет подпрограмму, которая должна быть вызвана перед аварийной остановкой, если Euphoria обнаруживает ошибку в вашей программе
2.14 Динамические вызовы
Данные подпрограммы позволяют вам вызывать процедуры и функции Euphoria с использованием вместо обычного имени уникального целого числа, известного как идентификационный номер подпрограммы.
routine_id (подпрограмма_номер)
- выдаёт уникальный идентификационный номер, автоматически присваиваемый заданной подпрограмме Euphoria
call_proc (вызвать_процедуру)
- вызывает процедуру Euphoria по заданному идентификационному номеру
call_func (вызвать_функцию)
- выдаёт результат функции Euphoria, вызванной по заданному идентификационному номеру
2.15 Вызов функций Си (WIN32 и Linux)
Просмотрите файл platform_r.htm, где подробно описано программирование на Euphoria для операционных систем WIN32 и Linux.
open_dll (открыть_dll)
- открывает динамически подключаемую библиотеку Windows (.dll-файл) или общую библиотеку Linux (.so-файл)
define_c_proc (определить_процедуру_Си)
- определяет номер функции Си типа VOID, которая не выдаёт величины, или же когда ваша программа, используя данную функцию Си, игнорирует величину, выдаваемую этой функцией
define_c_func (определить_функцию_Си)
- определяет номер функции Си, которая выдаёт величину, подлежащую учёту и использованию в вашей программе
define_c_var (определить_переменную_Си)
- выдаёт адрес в памяти для заданной переменной Си
c_proc (процедура_Си)
- вызывает функцию Си, игнорируя выдаваемую ею величину
c_func (функция_Си)
- вызывает функцию Си и выдаёт её величину
call_back (обратный_вызов)
- выдаёт 32-битный машинный адрес подпрограммы Euphoria по заданному её номеру для использования в качестве адреса обратного её вызова из операционной системы