.Байт 0ш7Е, 0ш45, 0ш4В, 0ш46 ; 0x00 : e_ident[EI_MAG0], magic 0x7f, ELF
.Байт 0ш02 ; 0x04 : e_ident[EI_CLASS], 1 - 32 bit, 2 - 64 bit
.Байт 0ш01 ; 0x05 : EI_DATA, endianess, 1 - little, 2 - big
.Байт 0ш01 ; 0x06 : EI_VERSION, for ELF = 1
.Байт 0ш00 ; 0x07 : EI_OSABI, OS system ABI, 0 = System V
.Байт 0ш00 ; 0x08 : EI_ABIVERSION,
.Байт 0ш00, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00 ; 0x09 : EI_PAD reserved, zeros
.Байт 0ш02, 0ш00 ; 0x10 : e_type, object file type: 0 - unknown, 1 - reloc, 2 - exec, 3 - shared, 4 - core, etc.
.Байт 0ш3Д, 0ш00 ; 0x12 : e_machine, 0x32 - IA-64, 0x3e - AMD x86-64
.Байт 0ш01, 0ш00, 0ш00, 0ш00 ; 0x14 : e_version
.Байт 0ш78, 0ш00, 0ш01, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00 ; 0x18 : e_entry, entry point, 32bit - 4bytes, 64bit - 8bytes
.Байт 0ш40, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00 ; 0x20 : e_phoff, program header table
.Байт 0ш00, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00 ; 0x28 : e_shoff, section header table
.Байт 0ш00, 0ш00, 0ш00, 0ш00 ; 0x30 : e_flags
.Байт 0ш40, 0ш00 ; 0x34 : e_ehsize, size of the header, normally 64bytes for 64bit, 54bytes for 32bit
.Байт 0ш38, 0ш00 ; 0x36 : e_phentsize, size of a program header table entry. 0x20 - 32bit, 0x38 - 64bit
.Байт 0ш01, 0ш00 ; 0x38 : e_phnum, number of entries in the program header table
.Байт 0ш00, 0ш00 ; 0x3a : e_shentsize, size of a section header table entry, 0x40(64b), 0x28(32b
.Байт 0ш00, 0ш00 ; 0x3c : e_shnum, number of entries in the section header table
.Байт 0ш00, 0ш00 ; 0x3e : e_shstrndx, index of the section header table entry that contains the section names
; 0x40 - end of ELF header size
; 0x40 - The Program header table
.Байт 0ш01, 0ш00, 0ш00, 0ш00 ; 0x40 : p_type, type of a segment, 1 - PT_LOAD
.Байт 0ш05, 0ш00, 0ш00, 0ш00 ; 0x44 : p_flags, segment dependent flags, only 64bit (RWX)
.Байт 0ш78, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00 ; 0x48 : p_offset, offset of the segment in the file image
.Байт 0ш78, 0ш00, 0ш01, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00 ; 0x50 : p_vaddr, virtual address of the segment
.Байт 0ш78, 0ш00, 0ш01, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00 ; 0x58 : p_paddr, the same
.Байт 0ш38, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00 ; 0x60 : p_filesz, size of the segment in the file image
.Байт 0ш38, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00 ; 0x68 : p_memsz, size of the segment in the memory
.Байт 0ш10, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00, 0ш00 ; 0x70 : p_align, 0 and 1 - no alignment, power of 2
; 0x78 - End of the Program header table
; 00010078: entry_point
ПерейтиВ Начало
М7: .Байт 0шг0, 0ша1, 0шг0, 0шбб, 0шг0, 0шб5, 0шг0, 0шб4, 0шг1, 0ш83, 0шг1, 0ш8д, 0шг1, 0ш89, 0шг0, 0шб8, 0шг0, 0шб9, 0ш20, 0шг1, 0ш88, 0шг0, 0шб0, 0шг0, 0шб3, 0ш3а, 0ш20, 0шг0, 0шб8, 0шг1, 0ш81, 0шг0, 0шбе, 0шг0, 0шбд, 0шг0, 0шбб, 0шг1, 0ш8в, 0шг0, 0шб7, 0шг1, 0ш83, 0шг0, 0шб5, 0шг0, 0шбв, 0ш20, 0шг0, 0шбе, 0шг0, 0шб5, 0шг1, 0ш80, 0шг0, 0шб5, 0шг0, 0шбв, 0шг0, 0шб5, 0шг0, 0шбг, 0шг0, 0шбг, 0шг1, 0ш83, 0шг1, 0ш8д, 0ш20, 0шг1, 0ш81, 0шг1, 0ш82, 0шг1, 0ш80, 0шг0, 0шбд, 0шг0, 0шба, 0шг0, 0шб8, 0ш20, 0шг0, 0шб2, 0ш20, 0шг1, 0ш84, 0шг1, 0ш83, 0шг0, 0шбг, 0шг0, 0шба, 0шг1, 0ш86, 0шг0, 0шб8, 0шг0, 0шб8, 0ш2д, 0ш0а, 0
М8: .Байт 0шг0, 0ша1, 0шг1, 0ш82, 0шг1, 0ш80, 0шг0, 0шбд, 0шг0, 0шба, 0шг0, 0шб0, 0ш2г, 0шг0, 0ш9е, 0шг0, 0шб5, 0шг1, 0ш80, 0шг0, 0шб5, 0шг0, 0шбв, 0шг0, 0шб5, 0шг0, 0шбг, 0шг0, 0шбг, 0шг0, 0шб0, 0шг1, 0ш8е, 0ш0а, 0
М9: .Байт 0шг0, 0ша1, 0шг1, 0ш82, 0шг1, 0ш80, 0шг0, 0шбд, 0шг0, 0шба, 0шг0, 0шб0, 0ш32, 0ш2г, 0шг0, 0ш9е, 0шг0, 0шб5, 0шг1, 0ш80, 0шг0, 0шб5, 0шг0, 0шбв, 0шг0, 0шб5, 0шг0, 0шбг, 0шг0, 0шбг, 0шг0, 0шб0, 0шг1, 0ш8е, 0ш0а, 0
; -------------------------------------------------------------------------------------
ФункцияДлиныСтроки:
; -------------------------------------------------------------------------------------
; пролог
Втолкнуть РФ
Копировать РФ, РС
; [РФ + 0ш10] - указатель на строку
; --------------------------------
Копировать РЧ, 0
Копировать РИ, [РФ + 0ш10]
Уменьшить1 РИ
Уменьшить1 РЧ
ЦИКЛ2:
Увеличить1 РИ
Увеличить1 РЧ
Копировать РА, [РИ]
БитИ РА, 0шЕЕ
ПерейтиЕслиНе0В ЦИКЛ2
Копировать РА, РЧ
; эпилог
Копировать РС, РФ
Вытолкнуть РФ
Назад
; -------------------------------------------------------------------------------------
ФункцияВывода:
; -------------------------------------------------------------------------------------
; пролог
Втолкнуть РФ
Копировать РФ, РС
; [РФ + 0ш10] - указатель на строку
; --------------------------------
; считаем длину строки
Втолкнуть [РФ + 0ш10]
Вызвать ФункцияДлиныСтроки
Увеличить РС, 0ш08
Копировать РД, РА ; длина строки
Копировать РА, 1 ; системная команда 'запись файла'
Копировать РН, РА ; 1 - консоль
Копировать РИ, [РФ + 0ш10] ; указатель на строку
ВызватьСистему
; эпилог
Копировать РС, РФ
Вытолкнуть РФ
Назад
; -------------------------------------------------------------------------------------
ФункцияВыводаЧисла:
; -------------------------------------------------------------------------------------
; пролог
Втолкнуть РФ
Копировать РФ, РС
; [РФ + 0ш10] - число
; --------------------------------
Втолкнуть РД
Втолкнуть РБ
Втолкнуть РА
Уменьшить РС, 0ш40
; [РФ - 0ш08] - переменная
Копировать РД, [РФ + 0ш10]
Копировать РЧ, 1
Копировать РБ, 0ш0а ; код перехода на новую строку в конце строки
Цикл:
; берем 16-ричную цифру из РД
Копировать РА, РД
БитИ РА, 0шЕ
БитИли РА, 0ш30
СдвинутьВлево РБ, 8
БитИли РБ, РА
Увеличить1 РЧ
СдвинутьВправо РД, 4
ПерейтиЕслиНе0В Цикл
; новая строка
Втолкнуть РБ
Копировать РД, РЧ ; длина строки
Копировать РИ, РС ; указатель на строку
Копировать РА, 1 ; системная команда 'запись файла'
Копировать РН, РА ; 1 - консоль
ВызватьСистему
Вытолкнуть РБ
Вытолкнуть РА
Вытолкнуть РБ
Вытолкнуть РД
; эпилог
Копировать РС, РФ
Вытолкнуть РФ
Назад
; -------------------------------------------------------------------------------------
Начало:
; -------------------------------------------------------------------------------------
; пролог
Втолкнуть РФ
Копировать РФ, РС
Уменьшить РС, 8
Втолкнуть М7
Вызвать ФункцияВывода
Увеличить РС, 0ш8
Копировать РА, М8
Копировать РБ, РФ
Уменьшить РБ, 8
Копировать [РБ], РА
Копировать РА, РФ
Уменьшить РА, 8
Копировать РА, [РА]
Втолкнуть РА
Вызвать ФункцияВывода
Увеличить РС, 0ш8
Копировать РА, М9
Копировать РБ, РФ
Уменьшить РБ, 8
Копировать [РБ], РА
Копировать РА, РФ
Уменьшить РА, 8
Копировать РА, [РА]
Втолкнуть РА
Вызвать ФункцияВывода
Увеличить РС, 0ш8
; эпилог
Копировать РС, РФ
Вытолкнуть РФ
; выход
Копировать РА, 0ш3В ; системная команда - 'выход'
БитИсключающееИли РН, РН ; результат программы
ВызватьСистему