Книга: Язык программирования Euphoria. Справочное руководство

2.13 Интерфейс уровня машины

2.13 Интерфейс уровня машины

Здесь сгруппированы подпрограммы, которые пригодятся вам, если вы решите поработать со своей машиной на уровне машинных кодов. Предлагаемый интерфейс низкого уровня позволяет вам читать и записывать данные и код непосредственно в оперативной памяти. Это значит, что вы можете разрабатывать свои собственные подпрограммы в кодах машин 386+ и вызывать их на исполнение.

Некоторые из подпрограмм, перечисленных ниже, не являются безопасными в том смысле, что Euphoria не сможет подстраховать вас при некорректном их использовании. Вы рискуете "подвесить" свою программу, операционную систему или даже машину, если сделаете что-то не так, как следовало бы. Если под DOS32 вы обратитесь к негодным адресам в памяти, то в дело вступит расширитель DOS CauseWay, и вы получите от него на экране сообщение об ошибке плюс распечатку информации на машинной тарабарщине в файле cw.err. Под WIN32 операционная система выдаст вам обычную свою табличку о прерывании прогона вашей программы со скупым диагностическим сообщением плюс информацию из регистров процессора. Под Linux в типовом случае вы получите аварийную остановку программы и сообщение о нарушении сегментации.

Примечание: Чтобы помочь программистам в этих рискованных занятиях, мы поставляем библиотечный файл safe.e, как отладочную замену файла machine.e. Если вы скопируете safe.e из каталога euphoriainclude в каталог, содержащий вашу программу, и переименуете safe.e как machine.e в этом вашем рабочем каталоге, ваша программа будет исполняться с использованием более безопасного, но и более медленного, варианта обычных подпрограмм низкого уровня. Этот safe.e может отловить многие ошибки, в том числе и такие, как запись в память по негодным адресам. Просмотрите комментарии в начале файла safe.e, чтобы получить полную инструкцию по его применению и оптимальному его конфигурированию под вашу программу. Подпрограммы интерфейса уровня машины очень важны для продвинутого программирования, так как они позволяют Euphoria-программистам получить доступ ко всем ресурсам, заложенным на низком уровне в ваше оборудование и вашу операционную систему. В некоторых особо ответственных случаях данная возможность может иметь решающее значение.

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

Оглавление книги


Генерация: 1.312. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз