Нужен автокод - иностранцам вежливо настраивать язык кириллический

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



EFI Byte Code (EBC)

Сообщений 1 страница 4 из 4

1

UEFI also includes a virtual machine specification based on a byte code format called EFI Byte Code (EBC),
which can be used to write platform-independent device drivers, but not UEFI applications.

Может написать компилятор как драйвер? Пишем на "устройство" входной файл, "считываем" скомпилированный?
Зато он будет эмулироваться на всех архитектурах не нашим кодом.

EFI Byte Code - чем он вас не устраивает?
Сандро за коммунизм

UPD: На самом деле писать консольные приложения при помощи EBC можно.

Отредактировано Лис (2025-11-16 20:58:00)

0

2

Если я правильно понял, то можно написать пакетный файл для UEFI Shell, который:
1) на процессоре Arm64 загрузит интерпретатор EBC (из состава проекта TianoCore), скомпилированный под aarch64
2) загрузит .efi-модуль с нашим компилятором, написанном на EBC и запустит его.
Осталось только проделать это практически (например в Qemu или на материнской плате от Байкал-а).

Интересно, можно ли загрузить интерпретатор из своей .efi-программы, а не из batch-файла?
Теоретически это должно быть возможно (потому что UEFI-Shell сама является .efi-программой).

Можно даже попробовать объединить их (интерпретатор EBC и компилятор) в один файл? Или нет? Нужны эксперименты.

Отредактировано Лис (2025-10-02 09:17:47)

0

3

«

  • 22 EFI Byte Code Virtual Machine

    • 22.1 Overview

      • 22.1.1 Processor Architecture Independence — 827

      • 22.1.2 OS Independent — 827

      • 22.1.3 EFI Compliant — 827

      • 22.1.4 Coexistence of Legacy Option ROMs — 828

      • 22.1.5 Relocatable Image — 828

      • 22.1.6 Size Restrictions Based on Memory Available — 828

    • 22.2 Memory Ordering — 829

    • 22.3 Virtual Machine Registers — 829

    • 22.4 Natural Indexing

      • 22.4.1 Sign Bit — 830

      • 22.4.2 Bits Assigned to Natural Units — 831

      • 22.4.3 Constant — 831

      • 22.4.4 Natural Units — 831

    • 22.5 EBC Instruction Operands

      • 22.5.1 Direct Operands — 832

      • 22.5.2 Indirect Operands — 832

      • 22.5.3 Indirect with Index Operands — 832

      • 22.5.4 Immediate Operands — 832

    • 22.6 EBC Instruction Syntax — 833

    • 22.7 Instruction Encoding

      • 22.7.1 Instruction Opcode Byte Encoding — 833

      • 22.7.2 Instruction Operands Byte Encoding — 834

      • 22.7.3 Index/Immediate Data Encoding — 834

    • 22.8 EBC Instruction Set

      • 22.8.1 ADD — 834

      • 22.8.2 AND — 835

      • 22.8.3 ASHR — 835

      • 22.8.4 BREAK — 835

      • 22.8.5 CALL — 836

      • 22.8.6 CMP — 837

      • 22.8.7 CMPI — 838

      • 22.8.8 DIV — 840

      • 22.8.9 DIVU — 842

      • 22.8.10 EXTNDB — 843

      • 22.8.11 EXTNDD — 844

      • 22.8.12 EXTNDW — 845

      • 22.8.13 JMP — 846

      • 22.8.14 JMP8 — 847

      • 22.8.15 LOADSP — 848

      • 22.8.16 MOD — 849

      • 22.8.17 MODU — 851

      • 22.8.18 MOV — 852

      • 22.8.19 MOVI — 852

      • 22.8.20 MOVIn — 853

      • 22.8.21 MOVn — 854

      • 22.8.22 MOVREL — 856

      • 22.8.23 MOVsn — 857

      • 22.8.24 MUL — 858

      • 22.8.25 MULU — 859

      • 22.8.26 NEG — 860

      • 22.8.27 NOT — 862

      • 22.8.28 OR — 863

      • 22.8.29 POP — 864

      • 22.8.30 POPn — 865

      • 22.8.31 PUSH — 866

      • 22.8.32 PUSHn — 867

      • 22.8.33 RET — 868

      • 22.8.34 SHL — 869

      • 22.8.35 SHR — 870

      • 22.8.36 STORESP — 870

      • 22.8.37 SUB — 871

      • 22.8.38 XOR — 872

    • 22.9 Runtime and Software Conventions

      • 22.9.1 Calling Outside VM — 873

      • 22.9.2 Calling Inside VM — 874

      • 22.9.3 Parameter Passing — 875

      • 22.9.4 Return Values — 876

      • 22.9.5 Binary Format — 876

    • 22.10 Architectural Requirements

      • 22.10.1 EBC Image Requirements — 876

      • 22.10.2 EBC Execution Interfacing Requirements — 876

      • 22.10.3 Interfacing Function Parameters Requirements — 877

      • 22.10.4 Function Return Requirements — 877

      • 22.10.5 Function Return Values Requirements — 878

    • 22.11 EBC Interpreter Protocol

      • 22.11.1 EFI_EBC_PROTOCOL — 878

      • 22.11.2 EFI_EBC_PROTOCOL.CreateThunk() — 879

      • 22.11.3 EFI_EBC_PROTOCOL.UnloadImage() — 879

      • 22.11.4 EFI_EBC_PROTOCOL.RegisterICacheFlush() — 880

      • 22.11.5 EFI_EBC_PROTOCOL.GetVersion() — 881

    • 22.12 EBC Tools

      • 22.12.1 EBC C Compiler — 882

      • 22.12.2 C Coding Convention — 882

      • 22.12.3 EBC Interface Assembly Instructions — 882

      • 22.12.4 Stack Maintenance and Argument Passing — 882

      • 22.12.5 Native to EBC Arguments Calling Convention — 883

      • 22.12.6 EBC to Native Arguments Calling Convention — 883

      • 22.12.7 EBC to EBC Arguments Calling Convention — 883

      • 22.12.8 Function Returns — 883

      • 22.12.9 Function Return Values — 884

      • 22.12.10 Thunking

        • 22.12.10.1 Thunking EBC to Native Code — 884

        • 22.12.10.2 Thunking Native Code to EBC — 885

        • 22.12.10.3 Thunking EBC to EBC — 885

      • 22.12.11 EBC Linker — 886

      • 22.12.12 Image Loader — 886

      • 22.12.13 Debug Support — 886

    • 22.13 VM Exception Handling

      • 22.13.1 Divide By 0 Exception — 887

      • 22.13.2 Debug Break Exception — 887

      • 22.13.3 Invalid Opcode Exception — 887

      • 22.13.4 Stack Fault Exception — 887

      • 22.13.5 Alignment Exception — 887

      • 22.13.6 Instruction Encoding Exception — 887

      • 22.13.7 Bad Break Exception — 888

      • 22.13.8 Undefined Exception — 888

    • 22.14 Option ROM Formats

      • 22.14.1 EFI Drivers for PCI Add-in Cards — 888

      • 22.14.2 Non-PCI Bus Support — 888

»

Оглавление процитировано по документу

Unified Extensible Firmware Interface (UEFI) Specification
2024-11-21, Release 2.11

Лежат документы по UEFI в web archive:
https://uefi.org/specifications

Отредактировано Лис (2025-11-16 21:03:02)

0

4

Очевидное наблюдение: объём этого описания - 40 страниц. А объём руководства Интел64 - 4000 страниц.

Это означает, что изучать ВМ ЕБК и писать программы должно быть в 100 раз проще чем для реального процессора. Так, например, объём кодогенератора в компиляторе предположительно пропорционален длине описания процессора. Если описание в 100 раз компактнее, то и размер компилятора будет гораздо меньше.

Но если у вас нет материнской платы с UEFI (которая есть у меня), то можете дописать Сказочную Колесницу, или взять за пример виртуальную машину КуМир (мне кажется, что есть сходство между ней и ВМ ЕБК, был бы интересен сравнительный анализ).

Конкретно для UEFI EBC есть готовая опенсорсная виртмашина на сях, эмулятор, ассемблер и компилятор. Надо их изучить тоже.

ВМ ЕБК проработаннее, и документация лучше, и есть дополнительные фичи (многопоточность, графика, разная длина слов)

Да, нет синуса, который хочет Уткин. Но синус и не нужен для написания ассемблера и компилятора. Причём на кириллице можно не с нуля писать, а подглядывать в имеющуюся реализацию на латинице, как и хотел БудДен (догоняющее развитие).

Отредактировано Лис (2025-11-24 05:52:41)

0