Выбрать главу

Подпрограммы в машинных кодах могут быть написаны вручную или же получены путем дизассемблирования выходных файлов компиляторов Си или некоторых других языков. Пит Эберлейн написал "мини-ассемблер" для использования с 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 по заданному её номеру для использования в качестве адреса обратного её вызова из операционной системы