Новости

30.08.2017

Российская компания Positive Technologies анонсировала ...

  • Все новости (36)
  • Разделы новостей

    Публикации

    Майнеру на заметку

    Утилиты

    Реклама

    Обзоры компьютерных гаджетов, которые должны быть всегда под рукой

        Яндекс.Метрика
    Главная » Программы » Hello, UEFI!

    Hello, UEFI!

    Как приступить к программированию для UEFI? Лучше всего начать с разбора ассемблерного кода простейшего 64-битного приложения, которое, пользуясь стандартными EFI-средст­ва­ми, обслуживает ввод и вывод информации. Предлагаемая вашему вниманию демон­стра­ци­он­ная версия HELLO.ASM именно для этого и предназначена. Исходный текст написан для дальнейшей компиляции в среде FASM в предположении, что пакет размещается в одноименном каталоге. Файл ASM.BAT призван по возможности облегчить эту процедуру.

    Как работает UEFI-приложение HELLO.EFI?

    Запуск приложения

    Результатом компиляции ассемблерной программы HELLO.ASM является простейшее x64 UEFI-приложение HELLO.EFI, знакомство с которым может приблизить понимание работы рас­ши­ря­е­мо­го интерфейса фирменного программного обеспечения. Запустив это приложение из оболочки UEFI, мы вправе ожидать вывод на экран дисплея следующего сообщения:

    UEFI x64 programming demo. (C) IC Book Labs.
    http://jelezo.com.ua/
    Press any key...

    Работа UEFI-приложения завершается после нажатия любой клавиши.

    Сохранение контекста

    Изменение состояния некоторых регистров в UEFI-приложении может привести к нарушению контекста окаймляющей среды (UEFI Shell или UEFI BIOS). Во избежание этого мы сохраняем все регистры процессора при запуске (инструкции PUSH) и восстанавливает при выходе (инструкции POP). Обязательный для сохранения список приведен в спецификации UEFI. Заметим, что 64-битный режим не поддерживает инструкции PUSHA/POPA, позволяющие сохранять и восстанавливать все регистры одной инструкцией.

    Входные параметры

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

    Обслуживание вывода

    Выводим текстовое сообщение с помощью подпрограммы Output_String. Эта подпрограмма использует EFI Simple Text Output Protocol.

    Обработка ввода

    Ожидаем нажатия клавиши, вызвав подпрограмму Input_Check_Key, которая использует EFI Simple Text Input Protocol.

    Возврат управления

    Дождавшись нажатия клавиши, восстанавливаем регистры, обнуляем EFI_STATUS (регистр RAX=0) и возвращаем управление родительской задаче. Таковой может быть UEFI Shell или UEFI firmware.

    Особенности реализации

    Внутренние подпрограммы

    В целях экономии размера кода, вызов заданной функции заданного UEFI протокола, с сохранением-восстановлением регистров и обработкой статуса реализован подпрограммой EFI_API.

    Вызовы процедур

    UEFI x64 использует плоскую 64-битную модель адресации памяти, поэтому все подпрограммы в нашем приложении, а также используемые функции UEFI-протоколов, вызываются как внутрисегментные процедуры с 64-битным адресом (NEAR 64).



    24.09.2017