.Байт 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
ПерейтиВ Начало
М0: .Байт 0шг0, 0ш9е, 0шг1, 0ш80, 0шг0, 0шб8, 0шг0, 0шб2, 0шг0, 0шб5, 0шг1, 0ш82, 0ш0а, 0
М1: .Байт 0шг0, 0ша3, 0шг1, 0ш80, 0шг0, 0шб0, 0ш0а, 0
М2: .Байт 0шг0, 0ш9е, 0шг0, 0шбд, 0шг0, 0шб1, 0шг0, 0шб5, 0шг0, 0шб4, 0шг0, 0шб0, 0ш0а, 0
М3: .Байт 0шг0, 0ша2, 0шг0, 0шб5, 0шг0, 0шбе, 0шг0, 0шб5, 0шг1, 0ш80, 0шг1, 0ш8в, 0ш20, 0шг0, 0шбв, 0шг0, 0шбд, 0шг0, 0шб6, 0шг0, 0шбг, 0шг0, 0шбд, 0ш20, 0шг0, 0шб2, 0шг0, 0шб2, 0шг0, 0шбд, 0шг0, 0шб4, 0шг0, 0шб8, 0шг1, 0ш82, 0шг1, 0ш8в, 0ш20, 0шг0, 0шбе, 0шг1, 0ш80, 0шг0, 0шбд, 0шг0, 0шб8, 0шг0, 0шб7, 0шг0, 0шбд, 0шг0, 0шбб, 0шг1, 0ш8в, 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шг1, 0ш83, 0ш2в, 0ш20, 0шг0, 0шбв, 0шг0, 0шб5, 0шг1, 0ш82, 0шг0, 0шба, 0шг0, 0шб0, 0ш20, 0шг1, 0ш84, 0шг0, 0шбд, 0шг1, 0ш80, 0шг0, 0шбв, 0шг0, 0шб8, 0шг1, 0ш80, 0шг1, 0ш83, 0шг0, 0шб5, 0шг1, 0ш82, 0шг1, 0ш81, 0шг1, 0ш8е, 0ш20, 0шг0, 0шб0, 0шг0, 0шб2, 0шг1, 0ш82, 0шг0, 0шбд, 0шг0, 0шбв, 0шг0, 0шб0, 0шг1, 0ш82, 0шг0, 0шб8, 0шг1, 0ш87, 0шг0, 0шб5, 0шг1, 0ш81, 0шг0, 0шба, 0шг0, 0шб8, 0ш2д, 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 - консоль
ВызватьСистему
Вытолкнуть РБ
Вытолкнуть РА
Вытолкнуть РБ
Вытолкнуть РД
; эпилог
Копировать РС, РФ
Вытолкнуть РФ
Назад
; -------------------------------------------------------------------------------------
Начало:
; -------------------------------------------------------------------------------------
Втолкнуть 2387
Вызвать ФункцияВыводаЧисла
Увеличить РС, 0ш8
Втолкнуть М0
Вызвать ФункцияВывода
Увеличить РС, 0ш8
Втолкнуть М1
Вызвать ФункцияВывода
Увеличить РС, 0ш8
Втолкнуть М2
Вызвать ФункцияВывода
Увеличить РС, 0ш8
Втолкнуть М3
Вызвать ФункцияВывода
Увеличить РС, 0ш8
; выход
Копировать РА, 0ш3В ; системная команда - 'выход'
БитИсключающееИли РН, РН ; результат программы
ВызватьСистему