6 ;; Based on https://wiki.osdev.org/Uefi.inc
13 struc EFI_TABLE_HEADER {
21 struc EFI_SYSTEM_TABLE {
23 .FirmwareVendor dq ? ; CHAR16*
24 .FirmwareRevision dd ? ; UINT32
26 .ConsoleInHandle dq ? ; EFI_HANDLE
27 .ConIn dq ? ; EFI_SIMPLE_TEXT_INPUT_PROTOCOL*
28 .ConsoleOutHandle dq ? ; EFI_HANDLE
29 .ConOut dq ? ; EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL*
32 struct EFI_SYSTEM_TABLE
34 struc EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL {
35 .Reset dq ? ; EFI_TEXT_RESET
36 .OutputString dq ? ; EFI_TEXT_STRING
39 struct EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
43 section '.text' code executable readable
46 ; At program startup, RDX contains an EFI_SYSTEM_TABLE*.
47 mov [system_table], rdx
49 mov rcx, [system_table] ; EFI_SYSTEM_TABLE* rcx
50 mov rcx, [rcx + EFI_SYSTEM_TABLE.ConOut] ; EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL* rcx
51 mov rdx, hello_world_string
52 ; EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString(EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL* rcx, CHAR16* rdx)
53 mov rbx, [rcx + EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString] ; EFI_TEXT_STIRNG rbx
61 section '.data' readable writable
63 system_table dq ? ; EFI_SYSTEM_TABLE*
65 hello_world_string du 'Hello world!', 0xC, 0xA, 0