Применение искинов - шоссе империализма (Стенгазета русификаторов ИТ)

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

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


Вы здесь » Применение искинов - шоссе империализма (Стенгазета русификаторов ИТ) » другое разное » ИванАс пишет язык, похожий на Си или Паскаль


ИванАс пишет язык, похожий на Си или Паскаль

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

1

input.ruc:

Код:
ФункцияДлиныСтроки {асм("
	; [РФ + 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 - консоль
	ВызватьСистему

	Вытолкнуть РБ


	Вытолкнуть РА
	Вытолкнуть РБ
	Вытолкнуть РД
")}

Начало {
	ФункцияВывода("Следующий шаг: добавляем Иначе.")

	Целое число
	число = 0ш24

	Если число = 0ш25 {
    ФункцияВывода("число равно 0ш25")
	} 

	Если число = 0ш24 {
    ФункцияВывода("число равно 0ш24")
	} 

	Если число = 0ш24 {
    ФункцияВывода("число равно 0ш24")
	} Иначе {
    ФункцияВывода("число не равно 0ш24")
	}

	Если число = 0ш23 {
    ФункцияВывода("число равно 0ш23")
	} Иначе {
    ФункцияВывода("число не равно 0ш23")
	}

	ФункцияВывода("Выход")

	;ФункцияВыводаЧисла(число)
}

input.txt:

Код:
.Байт 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

ПерейтиВ Начало
С4: .Байт 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шБ4, 0шГ0, 0шБД, 0шГ0, 0шБ1, 0шГ0, 0шБ0, 0шГ0, 0шБ2, 0шГ0, 0шББ, 0шГ1, 0ш8Е, 0шГ0, 0шБ5, 0шГ0, 0шБВ, 0ш20, 0шГ0, 0ш98, 0шГ0, 0шБГ, 0шГ0, 0шБ0, 0шГ1, 0ш87, 0шГ0, 0шБ5, 0ш2Д, 0ш0А, 0
С5: .Байт 0шГ1, 0ш87, 0шГ0, 0шБ8, 0шГ1, 0ш81, 0шГ0, 0шББ, 0шГ0, 0шБД, 0ш20, 0шГ1, 0ш80, 0шГ0, 0шБ0, 0шГ0, 0шБ2, 0шГ0, 0шБГ, 0шГ0, 0шБД, 0ш20, 0ш30, 0шГ1, 0ш88, 0ш32, 0ш35, 0ш0А, 0
С6: .Байт 0шГ1, 0ш87, 0шГ0, 0шБ8, 0шГ1, 0ш81, 0шГ0, 0шББ, 0шГ0, 0шБД, 0ш20, 0шГ1, 0ш80, 0шГ0, 0шБ0, 0шГ0, 0шБ2, 0шГ0, 0шБГ, 0шГ0, 0шБД, 0ш20, 0ш30, 0шГ1, 0ш88, 0ш32, 0ш34, 0ш0А, 0
С7: .Байт 0шГ1, 0ш87, 0шГ0, 0шБ8, 0шГ1, 0ш81, 0шГ0, 0шББ, 0шГ0, 0шБД, 0ш20, 0шГ0, 0шБГ, 0шГ0, 0шБ5, 0ш20, 0шГ1, 0ш80, 0шГ0, 0шБ0, 0шГ0, 0шБ2, 0шГ0, 0шБГ, 0шГ0, 0шБД, 0ш20, 0ш30, 0шГ1, 0ш88, 0ш32, 0ш34, 0ш0А, 0
С8: .Байт 0шГ1, 0ш87, 0шГ0, 0шБ8, 0шГ1, 0ш81, 0шГ0, 0шББ, 0шГ0, 0шБД, 0ш20, 0шГ1, 0ш80, 0шГ0, 0шБ0, 0шГ0, 0шБ2, 0шГ0, 0шБГ, 0шГ0, 0шБД, 0ш20, 0ш30, 0шГ1, 0ш88, 0ш32, 0ш33, 0ш0А, 0
С9: .Байт 0шГ1, 0ш87, 0шГ0, 0шБ8, 0шГ1, 0ш81, 0шГ0, 0шББ, 0шГ0, 0шБД, 0ш20, 0шГ0, 0шБГ, 0шГ0, 0шБ5, 0ш20, 0шГ1, 0ш80, 0шГ0, 0шБ0, 0шГ0, 0шБ2, 0шГ0, 0шБГ, 0шГ0, 0шБД, 0ш20, 0ш30, 0шГ1, 0ш88, 0ш32, 0ш33, 0ш0А, 0
С10: .Байт 0шГ0, 0ш92, 0шГ1, 0ш8Б, 0шГ1, 0ш85, 0шГ0, 0шБД, 0шГ0, 0шБ4, 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

	Втолкнуть С4
	Вызвать ФункцияВывода
	Увеличить РС, 0ш8

	Копировать РА, 0ш24
	Копировать РБ, РФ
	Уменьшить РБ, 8
	Копировать [РБ], РА

	Копировать РА, РФ
	Уменьшить РА, 8
	Копировать РА, [РА]
	Уменьшить РА, 0ш25

	ПерейтиЕслиНе0 ПослеЕсли1

	Втолкнуть С5
	Вызвать ФункцияВывода
	Увеличить РС, 0ш8

ПослеЕсли1:
	Копировать РА, РФ
	Уменьшить РА, 8
	Копировать РА, [РА]
	Уменьшить РА, 0ш24

	ПерейтиЕслиНе0 ПослеЕсли3

	Втолкнуть С6
	Вызвать ФункцияВывода
	Увеличить РС, 0ш8

ПослеЕсли3:
	Копировать РА, РФ
	Уменьшить РА, 8
	Копировать РА, [РА]
	Уменьшить РА, 0ш24

	ПерейтиЕслиНе0 Иначе6

	Втолкнуть С6
	Вызвать ФункцияВывода
	Увеличить РС, 0ш8

	Перейти ПослеЕсли5

Иначе6:
	Втолкнуть С7
	Вызвать ФункцияВывода
	Увеличить РС, 0ш8

ПослеЕсли5:
	Копировать РА, РФ
	Уменьшить РА, 8
	Копировать РА, [РА]
	Уменьшить РА, 0ш23

	ПерейтиЕслиНе0 Иначе8

	Втолкнуть С8
	Вызвать ФункцияВывода
	Увеличить РС, 0ш8

	Перейти ПослеЕсли7

Иначе8:
	Втолкнуть С9
	Вызвать ФункцияВывода
	Увеличить РС, 0ш8

ПослеЕсли7:
	Втолкнуть С10
	Вызвать ФункцияВывода
	Увеличить РС, 0ш8


	; эпилог
	Копировать РС, РФ
	Вытолкнуть РФ

	; выход
	Копировать РА, 0ш3В           ;  системная команда - 'выход'
	БитИсключающееИли РН, РН    ;  результат программы
	ВызватьСистему

rax:

Код:
./rex ./output.bin
00000000: 7Е 45 4В 46  02 01 01 00  00 00 00 00  00 00 00 00  |.ELF............|
00000010: 02 00 3Д 00  01 00 00 00  78 00 01 00  00 00 00 00  |..>.....x.......|
00000020: 40 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  |@...............|
00000030: 00 00 00 00  40 00 38 00  01 00 00 00  00 00 00 00  |....@.8.........|
00000040: 01 00 00 00  05 00 00 00  78 00 00 00  00 00 00 00  |........x.......|
00000050: 78 00 01 00  00 00 00 00  78 00 01 00  00 00 00 00  |x.......x.......|
00000060: 38 00 00 00  00 00 00 00  38 00 00 00  00 00 00 00  |8.......8.......|
00000070: 10 00 00 00  00 00 00 00  Д9 А1 01 00  00 Г0 А1 Г0  |................|
00000080: ББ Г0 Б5 Г0  Б4 Г1 83 Г1  8Д Г1 89 Г0  Б8 Г0 Б9 20  |............... |
00000090: Г1 88 Г0 Б0  Г0 Б3 3А 20  Г0 Б4 Г0 БД  Г0 Б1 Г0 Б0  |......: ........|
000000А0: Г0 Б2 Г0 ББ  Г1 8Е Г0 Б5  Г0 БВ 20 Г0  98 Г0 БГ Г0  |.......... .....|
000000Б0: Б0 Г1 87 Г0  Б5 2Д 0А 00  Г1 87 Г0 Б8  Г1 81 Г0 ББ  |................|
000000В0: Г0 БД 20 Г1  80 Г0 Б0 Г0  Б2 Г0 БГ Г0  БД 20 30 Г1  |.. .......... 0.|
000000Г0: 88 32 35 0А  00 Г1 87 Г0  Б8 Г1 81 Г0  ББ Г0 БД 20  |.25............ |
000000Д0: Г1 80 Г0 Б0  Г0 Б2 Г0 БГ  Г0 БД 20 30  Г1 88 32 34  |.......... 0..24|
000000Е0: 0А 00 Г1 87  Г0 Б8 Г1 81  Г0 ББ Г0 БД  20 Г0 БГ Г0  |............ ...|
00000100: Б5 20 Г1 80  Г0 Б0 Г0 Б2  Г0 БГ Г0 БД  20 30 Г1 88  |. .......... 0..|
00000110: 32 34 0А 00  Г1 87 Г0 Б8  Г1 81 Г0 ББ  Г0 БД 20 Г1  |24............ .|
00000120: 80 Г0 Б0 Г0  Б2 Г0 БГ Г0  БД 20 30 Г1  88 32 33 0А  |......... 0..23.|
00000130: 00 Г1 87 Г0  Б8 Г1 81 Г0  ББ Г0 БД 20  Г0 БГ Г0 Б5  |........... ....|
00000140: 20 Г1 80 Г0  Б0 Г0 Б2 Г0  БГ Г0 БД 20  30 Г1 88 32  | .......... 0..2|
00000150: 33 0А 00 Г0  92 Г1 8Б Г1  85 Г0 БД Г0  Б4 0А 00 55  |3..............U|
00000160: 48 89 Д5 48  В7 В1 00 00  00 00 48 8Б  75 10 48 ЕЕ  |H..H......H.u.H.|
00000170: ВД 48 ЕЕ В9  48 ЕЕ В6 48  ЕЕ В1 48 8Б  06 48 81 Д0  |.H..H..H..H..H..|
00000180: ЕЕ 00 00 00  0Е 85 ДА ЕЕ  ЕЕ ЕЕ 48 89  В8 48 89 ДВ  |..........H..H..|
00000190: 5Г В3 55 48  89 Д5 ЕЕ 75  10 Д8 В1 ЕЕ  ЕЕ ЕЕ 48 81  |].UH...u......H.|
000001А0: В4 08 00 00  00 48 89 В2  48 В7 В0 01  00 00 00 48  |.....H..H......H|
000001Б0: 89 В7 48 8Б  75 10 0Е 05  48 89 ДВ 5Г  В3 55 48 89  |..H.u...H..].UH.|
000001В0: Д5 52 53 50  48 81 ДВ 40  00 00 00 48  8Б 55 10 48  |.RSPH..@...H.U.H|
000001Г0: В7 В1 01 00  00 00 48 В7  В3 0А 00 00  00 48 89 Г0  |......H......H..|
000001Д0: 48 81 Д0 0Е  00 00 00 48  81 В8 30 00  00 00 48 В1  |H......H..0...H.|
000001Е0: Д3 08 48 09  В3 48 ЕЕ В1  48 В1 ДА 04  0Е 85 ГБ ЕЕ  |..H..H..H.......|
00000200: ЕЕ ЕЕ 53 48  89 ВА 48 89  Д6 48 В7 В0  01 00 00 00  |..SH..H..H......|
00000210: 48 89 В7 0Е  05 5Б 58 5Б  5А 48 89 ДВ  5Г В3 55 48  |H....[X[ZH..].UH|
00000220: 89 Д5 48 81  ДВ 08 00 00  00 68 7Г 00  01 00 Д8 5Е  |..H......h}...._|
00000230: ЕЕ ЕЕ ЕЕ 48  81 В4 08 00  00 00 48 В7  В0 24 00 00  |...H......H..$..|
00000240: 00 48 89 ДБ  48 81 ДБ 08  00 00 00 48  89 03 48 89  |.H..H......H..H.|
00000250: Д8 48 81 Д8  08 00 00 00  48 8Б 00 48  81 Д8 25 00  |.H......H..H..%.|
00000260: 00 00 0Е 85  11 00 00 00  68 Б8 00 01  00 Д8 20 ЕЕ  |........h..... .|
00000270: ЕЕ ЕЕ 48 81  В4 08 00 00  00 48 89 Д8  48 81 Д8 08  |..H......H..H...|
00000280: 00 00 00 48  8Б 00 48 81  Д8 24 00 00  00 0Е 85 11  |...H..H..$......|
00000290: 00 00 00 68  Г5 00 01 00  Д8 Е5 ЕД ЕЕ  ЕЕ 48 81 В4  |...h.........H..|
000002А0: 08 00 00 00  48 89 Д8 48  81 Д8 08 00  00 00 48 8Б  |....H..H......H.|
000002Б0: 00 48 81 Д8  24 00 00 00  0Е 85 16 00  00 00 68 Г5  |.H..$.........h.|
000002В0: 00 01 00 Д8  ВА ЕД ЕЕ ЕЕ  48 81 В4 08  00 00 00 Д9  |........H.......|
000002Г0: 11 00 00 00  68 Е2 00 01  00 Д8 Б4 ЕД  ЕЕ ЕЕ 48 81  |....h.........H.|
000002Д0: В4 08 00 00  00 48 89 Д8  48 81 Д8 08  00 00 00 48  |.....H..H......H|
000002Е0: 8Б 00 48 81  Д8 23 00 00  00 0Е 85 16  00 00 00 68  |..H..#.........h|
00000300: 14 01 01 00  Д8 89 ЕД ЕЕ  ЕЕ 48 81 В4  08 00 00 00  |.........H......|
00000310: Д9 11 00 00  00 68 31 01  01 00 Д8 73  ЕД ЕЕ ЕЕ 48  |.....h1....s...H|
00000320: 81 В4 08 00  00 00 68 53  01 01 00 Д8  62 ЕД ЕЕ ЕЕ  |......hS....b...|
00000330: 48 81 В4 08  00 00 00 48  89 ДВ 5Г 48  В7 В0 3В 00  |H......H..]H..<.|
00000340: 00 00 48 31  ЕЕ 0Е 05                               |..H1...|
00000347:

Вывод программы:

Следующий шаг: добавляем Иначе.
число равно 0ш24
число равно 0ш24
число не равно 0ш23
Выход

0

2

Я не уверен, что конструкция else (само такое понятие) относится к языку ассемблера.

0

3

input.rcx:

Код:
ФункцияДлиныСтроки {асм("
    ; [РФ + 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 - консоль
    ВызватьСистему

    Вытолкнуть РБ

    Вытолкнуть РА
    Вытолкнуть РБ
    Вытолкнуть РД
")}

Начало {
    ФункцияВывода("Следующий шаг: сложение, вычитание, больше, меньше.")

    Целое число
    число = 0ш20
    число = 12 + число - 3 - 4 
    ФункцияВыводаЧисла(число)

    Если число > 0ш24 {
        ФункцияВывода("число больше 0ш24")
        число = 1 + число
    } 

    Если число = 0ш16 + 0ш19 + 0ш9 - 0ш12 {
        ФункцияВывода("число равно 0ш26")
        число = число - 3
    } 
    ФункцияВыводаЧисла(число)
    Если число < 0ш24 {
        ФункцияВывода("число меньше 0ш24")
    } 
    
    Если 0ш15 + 0ш11 + 1 = 0ш16 + 0ш19 + 0ш9 - 0ш12 + 1 {
        ФункцияВывода("равенство1 истинно")
    } Иначе {
        ФункцияВывода("равенство1 ложно")
    }

    Если 0ш15 + 0ш11 + 1 = 0ш16 + 0ш19 + 0ш9 - 0ш12 {
        ФункцияВывода("равенство2 истинно")
    } Иначе {
        ФункцияВывода("равенство2 ложно")
    }

    ФункцияВывода("Выход.")
}

input.rax:

Код:
.Байт 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

ПерейтиВ Начало
С4: .Байт 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шГ1, 0ш81, 0шГ0, 0шББ, 0шГ0, 0шБД, 0шГ0, 0шБ6, 0шГ0, 0шБ5, 0шГ0, 0шБГ, 0шГ0, 0шБ8, 0шГ0, 0шБ5, 0ш2В, 0ш20, 0шГ0, 0шБ2, 0шГ1, 0ш8Б, 0шГ1, 0ш87, 0шГ0, 0шБ8, 0шГ1, 0ш82, 0шГ0, 0шБ0, 0шГ0, 0шБГ, 0шГ0, 0шБ8, 0шГ0, 0шБ5, 0ш2В, 0ш20, 0шГ0, 0шБ1, 0шГ0, 0шБД, 0шГ0, 0шББ, 0шГ1, 0ш8В, 0шГ1, 0ш88, 0шГ0, 0шБ5, 0ш2В, 0ш20, 0шГ0, 0шБВ, 0шГ0, 0шБ5, 0шГ0, 0шБГ, 0шГ1, 0ш8В, 0шГ1, 0ш88, 0шГ0, 0шБ5, 0ш2Д, 0ш0А, 0
С5: .Байт 0шГ1, 0ш87, 0шГ0, 0шБ8, 0шГ1, 0ш81, 0шГ0, 0шББ, 0шГ0, 0шБД, 0ш20, 0шГ0, 0шБ1, 0шГ0, 0шБД, 0шГ0, 0шББ, 0шГ1, 0ш8В, 0шГ1, 0ш88, 0шГ0, 0шБ5, 0ш20, 0ш30, 0шГ1, 0ш88, 0ш32, 0ш34, 0ш0А, 0
С6: .Байт 0шГ1, 0ш87, 0шГ0, 0шБ8, 0шГ1, 0ш81, 0шГ0, 0шББ, 0шГ0, 0шБД, 0ш20, 0шГ1, 0ш80, 0шГ0, 0шБ0, 0шГ0, 0шБ2, 0шГ0, 0шБГ, 0шГ0, 0шБД, 0ш20, 0ш30, 0шГ1, 0ш88, 0ш32, 0ш36, 0ш0А, 0
С7: .Байт 0шГ1, 0ш87, 0шГ0, 0шБ8, 0шГ1, 0ш81, 0шГ0, 0шББ, 0шГ0, 0шБД, 0ш20, 0шГ0, 0шБВ, 0шГ0, 0шБ5, 0шГ0, 0шБГ, 0шГ1, 0ш8В, 0шГ1, 0ш88, 0шГ0, 0шБ5, 0ш20, 0ш30, 0шГ1, 0ш88, 0ш32, 0ш34, 0ш0А, 0
С8: .Байт 0шГ1, 0ш80, 0шГ0, 0шБ0, 0шГ0, 0шБ2, 0шГ0, 0шБ5, 0шГ0, 0шБГ, 0шГ1, 0ш81, 0шГ1, 0ш82, 0шГ0, 0шБ2, 0шГ0, 0шБД, 0ш31, 0ш20, 0шГ0, 0шБ8, 0шГ1, 0ш81, 0шГ1, 0ш82, 0шГ0, 0шБ8, 0шГ0, 0шБГ, 0шГ0, 0шБГ, 0шГ0, 0шБД, 0ш0А, 0
С9: .Байт 0шГ1, 0ш80, 0шГ0, 0шБ0, 0шГ0, 0шБ2, 0шГ0, 0шБ5, 0шГ0, 0шБГ, 0шГ1, 0ш81, 0шГ1, 0ш82, 0шГ0, 0шБ2, 0шГ0, 0шБД, 0ш31, 0ш20, 0шГ0, 0шББ, 0шГ0, 0шБД, 0шГ0, 0шБ6, 0шГ0, 0шБГ, 0шГ0, 0шБД, 0ш0А, 0
С10: .Байт 0шГ1, 0ш80, 0шГ0, 0шБ0, 0шГ0, 0шБ2, 0шГ0, 0шБ5, 0шГ0, 0шБГ, 0шГ1, 0ш81, 0шГ1, 0ш82, 0шГ0, 0шБ2, 0шГ0, 0шБД, 0ш32, 0ш20, 0шГ0, 0шБ8, 0шГ1, 0ш81, 0шГ1, 0ш82, 0шГ0, 0шБ8, 0шГ0, 0шБГ, 0шГ0, 0шБГ, 0шГ0, 0шБД, 0ш0А, 0
С11: .Байт 0шГ1, 0ш80, 0шГ0, 0шБ0, 0шГ0, 0шБ2, 0шГ0, 0шБ5, 0шГ0, 0шБГ, 0шГ1, 0ш81, 0шГ1, 0ш82, 0шГ0, 0шБ2, 0шГ0, 0шБД, 0ш32, 0ш20, 0шГ0, 0шББ, 0шГ0, 0шБД, 0шГ0, 0шБ6, 0шГ0, 0шБГ, 0шГ0, 0шБД, 0ш0А, 0
С12: .Байт 0шГ0, 0ш92, 0шГ1, 0ш8Б, 0шГ1, 0ш85, 0шГ0, 0шБД, 0шГ0, 0шБ4, 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 - консоль
    ВызватьСистему

    Вытолкнуть РБ

    Вытолкнуть РА
    Вытолкнуть РБ
    Вытолкнуть РД

	; эпилог
	Копировать РС, РФ
	Вытолкнуть РФ
	Назад

; -------------------------------------------------------------------------------------
    Начало:
; -------------------------------------------------------------------------------------
	; пролог
	Втолкнуть РФ
	Копировать РФ, РС
	Уменьшить РС, 8

	Втолкнуть С4
	Вызвать ФункцияВывода
	Увеличить РС, 0ш8

	Копировать РА, 0ш20
	Копировать РБ, РФ
	Уменьшить РБ, 8
	Копировать [РБ], РА

	Копировать РБ, РФ
	Уменьшить РБ, 8
	Копировать РА, [РБ]
	Увеличить РА, 12
	Уменьшить РА, 3
	Уменьшить РА, 4
	Копировать РБ, РФ
	Уменьшить РБ, 8
	Копировать [РБ], РА

	Копировать РБ, РФ
	Уменьшить РБ, 8
	Копировать РА, [РБ]
	Втолкнуть РА
	Вызвать ФункцияВыводаЧисла
	Увеличить РС, 0ш8

	Копировать РБ, РФ
	Уменьшить РБ, 8
	Копировать РА, [РБ]
	Втолкнуть РА
	Вытолкнуть РБ
	Уменьшить РБ, 0ш24

	ПерейтиЕслиМеньшеИлиРавно М1

	Втолкнуть С5
	Вызвать ФункцияВывода
	Увеличить РС, 0ш8

	Копировать РБ, РФ
	Уменьшить РБ, 8
	Копировать РА, [РБ]
	Увеличить РА, 1
	Копировать РБ, РФ
	Уменьшить РБ, 8
	Копировать [РБ], РА

М1:
	Копировать РБ, РФ
	Уменьшить РБ, 8
	Копировать РА, [РБ]
	Втолкнуть РА
	Копировать РА, 0ш16
	Увеличить РА, 0ш19
	Увеличить РА, 0ш9
	Уменьшить РА, 0ш12
	Вытолкнуть РБ
	Уменьшить РБ, РА
	ПерейтиЕслиНе0 М3

	Втолкнуть С6
	Вызвать ФункцияВывода
	Увеличить РС, 0ш8

	Копировать РБ, РФ
	Уменьшить РБ, 8
	Копировать РА, [РБ]
	Уменьшить РА, 3
	Копировать РБ, РФ
	Уменьшить РБ, 8
	Копировать [РБ], РА

М3:
	Копировать РБ, РФ
	Уменьшить РБ, 8
	Копировать РА, [РБ]
	Втолкнуть РА
	Вызвать ФункцияВыводаЧисла
	Увеличить РС, 0ш8

	Копировать РБ, РФ
	Уменьшить РБ, 8
	Копировать РА, [РБ]
	Втолкнуть РА
	Вытолкнуть РБ
	Уменьшить РБ, 0ш24

	ПерейтиЕслиБольшеИлиРавно М5

	Втолкнуть С7
	Вызвать ФункцияВывода
	Увеличить РС, 0ш8

М5:
	Копировать РА, 0ш15
	Увеличить РА, 0ш11
	Увеличить РА, 1
	Втолкнуть РА
	Копировать РА, 0ш16
	Увеличить РА, 0ш19
	Увеличить РА, 0ш9
	Уменьшить РА, 0ш12
	Увеличить РА, 1
	Вытолкнуть РБ
	Уменьшить РБ, РА
	ПерейтиЕслиНе0 М8

	Втолкнуть С8
	Вызвать ФункцияВывода
	Увеличить РС, 0ш8

	Перейти М7
М8:
	Втолкнуть С9
	Вызвать ФункцияВывода
	Увеличить РС, 0ш8

М7:
	Копировать РА, 0ш15
	Увеличить РА, 0ш11
	Увеличить РА, 1
	Втолкнуть РА
	Копировать РА, 0ш16
	Увеличить РА, 0ш19
	Увеличить РА, 0ш9
	Уменьшить РА, 0ш12
	Вытолкнуть РБ
	Уменьшить РБ, РА
	ПерейтиЕслиНе0 М10

	Втолкнуть С10
	Вызвать ФункцияВывода
	Увеличить РС, 0ш8

	Перейти М9
М10:
	Втолкнуть С11
	Вызвать ФункцияВывода
	Увеличить РС, 0ш8

М9:
	Втолкнуть С12
	Вызвать ФункцияВывода
	Увеличить РС, 0ш8


	; эпилог
	Копировать РС, РФ
	Вытолкнуть РФ

	; выход
	Копировать РА, 0ш3В           ;  системная команда - 'выход'
	БитИсключающееИли РН, РН    ;  результат программы
	ВызватьСистему

output.bin:

Код:
./rex ./output.bin
00000000: 7Е 45 4В 46  02 01 01 00  00 00 00 00  00 00 00 00  |.ELF............|
00000010: 02 00 3Д 00  01 00 00 00  78 00 01 00  00 00 00 00  |..>.....x.......|
00000020: 40 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  |@...............|
00000030: 00 00 00 00  40 00 38 00  01 00 00 00  00 00 00 00  |....@.8.........|
00000040: 01 00 00 00  05 00 00 00  78 00 00 00  00 00 00 00  |........x.......|
00000050: 78 00 01 00  00 00 00 00  78 00 01 00  00 00 00 00  |x.......x.......|
00000060: 38 00 00 00  00 00 00 00  38 00 00 00  00 00 00 00  |8.......8.......|
00000070: 10 00 00 00  00 00 00 00  Д9 0Г 02 00  00 Г0 А1 Г0  |................|
00000080: ББ Г0 Б5 Г0  Б4 Г1 83 Г1  8Д Г1 89 Г0  Б8 Г0 Б9 20  |............... |
00000090: Г1 88 Г0 Б0  Г0 Б3 3А 20  Г1 81 Г0 ББ  Г0 БД Г0 Б6  |......: ........|
000000А0: Г0 Б5 Г0 БГ  Г0 Б8 Г0 Б5  2В 20 Г0 Б2  Г1 8Б Г1 87  |........, ......|
000000Б0: Г0 Б8 Г1 82  Г0 Б0 Г0 БГ  Г0 Б8 Г0 Б5  2В 20 Г0 Б1  |............, ..|
000000В0: Г0 БД Г0 ББ  Г1 8В Г1 88  Г0 Б5 2В 20  Г0 БВ Г0 Б5  |.........., ....|
000000Г0: Г0 БГ Г1 8В  Г1 88 Г0 Б5  2Д 0А 00 Г1  87 Г0 Б8 Г1  |................|
000000Д0: 81 Г0 ББ Г0  БД 20 Г0 Б1  Г0 БД Г0 ББ  Г1 8В Г1 88  |..... ..........|
000000Е0: Г0 Б5 20 30  Г1 88 32 34  0А 00 Г1 87  Г0 Б8 Г1 81  |.. 0..24........|
00000100: Г0 ББ Г0 БД  20 Г1 80 Г0  Б0 Г0 Б2 Г0  БГ Г0 БД 20  |.... .......... |
00000110: 30 Г1 88 32  36 0А 00 Г1  87 Г0 Б8 Г1  81 Г0 ББ Г0  |0..26...........|
00000120: БД 20 Г0 БВ  Г0 Б5 Г0 БГ  Г1 8В Г1 88  Г0 Б5 20 30  |. ............ 0|
00000130: Г1 88 32 34  0А 00 Г1 80  Г0 Б0 Г0 Б2  Г0 Б5 Г0 БГ  |..24............|
00000140: Г1 81 Г1 82  Г0 Б2 Г0 БД  31 20 Г0 Б8  Г1 81 Г1 82  |........1 ......|
00000150: Г0 Б8 Г0 БГ  Г0 БГ Г0 БД  0А 00 Г1 80  Г0 Б0 Г0 Б2  |................|
00000160: Г0 Б5 Г0 БГ  Г1 81 Г1 82  Г0 Б2 Г0 БД  31 20 Г0 ББ  |............1 ..|
00000170: Г0 БД Г0 Б6  Г0 БГ Г0 БД  0А 00 Г1 80  Г0 Б0 Г0 Б2  |................|
00000180: Г0 Б5 Г0 БГ  Г1 81 Г1 82  Г0 Б2 Г0 БД  32 20 Г0 Б8  |............2 ..|
00000190: Г1 81 Г1 82  Г0 Б8 Г0 БГ  Г0 БГ Г0 БД  0А 00 Г1 80  |................|
000001А0: Г0 Б0 Г0 Б2  Г0 Б5 Г0 БГ  Г1 81 Г1 82  Г0 Б2 Г0 БД  |................|
000001Б0: 32 20 Г0 ББ  Г0 БД Г0 Б6  Г0 БГ Г0 БД  0А 00 Г0 92  |2 ..............|
000001В0: Г1 8Б Г1 85  Г0 БД Г0 Б4  2Д 0А 00 55  48 89 Д5 48  |...........UH..H|
000001Г0: В7 В1 00 00  00 00 48 8Б  75 10 48 ЕЕ  ВД 48 ЕЕ В9  |......H.u.H..H..|
000001Д0: 48 ЕЕ В6 48  ЕЕ В1 48 8Б  06 48 81 Д0  ЕЕ 00 00 00  |H..H..H..H......|
000001Е0: 0Е 85 ДА ЕЕ  ЕЕ ЕЕ 48 89  В8 48 89 ДВ  5Г В3 55 48  |......H..H..].UH|
00000200: 89 Д5 ЕЕ 75  10 Д8 В1 ЕЕ  ЕЕ ЕЕ 48 81  В4 08 00 00  |...u......H.....|
00000210: 00 48 89 В2  48 В7 В0 01  00 00 00 48  89 В7 48 8Б  |.H..H......H..H.|
00000220: 75 10 0Е 05  48 89 ДВ 5Г  В3 55 48 89  Д5 52 53 50  |u...H..].UH..RSP|
00000230: 48 81 ДВ 40  00 00 00 48  8Б 55 10 48  В7 В1 01 00  |H..@...H.U.H....|
00000240: 00 00 48 В7  В3 0А 00 00  00 48 89 Г0  48 81 Д0 0Е  |..H......H..H...|
00000250: 00 00 00 48  81 В8 30 00  00 00 48 В1  Д3 08 48 09  |...H..0...H...H.|
00000260: В3 48 ЕЕ В1  48 В1 ДА 04  0Е 85 ГБ ЕЕ  ЕЕ ЕЕ 53 48  |.H..H.........SH|
00000270: 89 ВА 48 89  Д6 48 В7 В0  01 00 00 00  48 89 В7 0Е  |..H..H......H...|
00000280: 05 5Б 58 5Б  5А 48 89 ДВ  5Г В3 55 48  89 Д5 48 81  |.[X[ZH..].UH..H.|
00000290: ДВ 08 00 00  00 68 7Г 00  01 00 Д8 5Е  ЕЕ ЕЕ ЕЕ 48  |.....h}...._...H|
000002А0: 81 В4 08 00  00 00 48 В7  В0 20 00 00  00 48 89 ДБ  |......H.. ...H..|
000002Б0: 48 81 ДБ 08  00 00 00 48  89 03 48 89  ДБ 48 81 ДБ  |H......H..H..H..|
000002В0: 08 00 00 00  48 8Б 03 48  81 В0 0В 00  00 00 48 81  |....H..H......H.|
000002Г0: Д8 03 00 00  00 48 81 Д8  04 00 00 00  48 89 ДБ 48  |.....H......H..H|
000002Д0: 81 ДБ 08 00  00 00 48 89  03 48 89 ДБ  48 81 ДБ 08  |......H..H..H...|
000002Е0: 00 00 00 48  8Б 03 50 Д8  2Г ЕЕ ЕЕ ЕЕ  48 81 В4 08  |...H..P.-...H...|
00000300: 00 00 00 48  89 ДБ 48 81  ДБ 08 00 00  00 48 8Б 03  |...H..H......H..|
00000310: 50 5Б 48 81  ДБ 24 00 00  00 0Е 8Д 32  00 00 00 68  |P[H..$.....2...h|
00000320: ГБ 00 01 00  Д8 Г5 ЕД ЕЕ  ЕЕ 48 81 В4  08 00 00 00  |.........H......|
00000330: 48 89 ДБ 48  81 ДБ 08 00  00 00 48 8Б  03 48 81 В0  |H..H......H..H..|
00000340: 01 00 00 00  48 89 ДБ 48  81 ДБ 08 00  00 00 48 89  |....H..H......H.|
00000350: 03 48 89 ДБ  48 81 ДБ 08  00 00 00 48  8Б 03 50 48  |.H..H......H..PH|
00000360: В7 В0 16 00  00 00 48 81  В0 19 00 00  00 48 81 В0  |......H......H..|
00000370: 09 00 00 00  48 81 Д8 12  00 00 00 5Б  48 29 В3 0Е  |....H......[H)..|
00000380: 85 32 00 00  00 68 ЕА 00  01 00 Д8 6Е  ЕД ЕЕ ЕЕ 48  |.2...h.....o...H|
00000390: 81 В4 08 00  00 00 48 89  ДБ 48 81 ДБ  08 00 00 00  |......H..H......|
000003А0: 48 8Б 03 48  81 Д8 03 00  00 00 48 89  ДБ 48 81 ДБ  |H..H......H..H..|
000003Б0: 08 00 00 00  48 89 03 48  89 ДБ 48 81  ДБ 08 00 00  |....H..H..H.....|
000003В0: 00 48 8Б 03  50 Д8 5Е ЕД  ЕЕ ЕЕ 48 81  В4 08 00 00  |.H..P._...H.....|
000003Г0: 00 48 89 ДБ  48 81 ДБ 08  00 00 00 48  8Б 03 50 5Б  |.H..H......H..P[|
000003Д0: 48 81 ДБ 24  00 00 00 0Е  8Г 11 00 00  00 68 17 01  |H..$.........h..|
000003Е0: 01 00 Д8 07  ЕД ЕЕ ЕЕ 48  81 В4 08 00  00 00 48 В7  |.......H......H.|
00000400: В0 15 00 00  00 48 81 В0  11 00 00 00  48 81 В0 01  |.....H......H...|
00000410: 00 00 00 50  48 В7 В0 16  00 00 00 48  81 В0 19 00  |...PH......H....|
00000420: 00 00 48 81  В0 09 00 00  00 48 81 Д8  12 00 00 00  |..H......H......|
00000430: 48 81 В0 01  00 00 00 5Б  48 29 В3 0Е  85 16 00 00  |H......[H)......|
00000440: 00 68 36 01  01 00 Д8 Б3  ЕГ ЕЕ ЕЕ 48  81 В4 08 00  |.h6........H....|
00000450: 00 00 Д9 11  00 00 00 68  5А 01 01 00  Д8 9Г ЕГ ЕЕ  |.......hZ.......|
00000460: ЕЕ 48 81 В4  08 00 00 00  48 В7 В0 15  00 00 00 48  |.H......H......H|
00000470: 81 В0 11 00  00 00 48 81  В0 01 00 00  00 50 48 В7  |......H......PH.|
00000480: В0 16 00 00  00 48 81 В0  19 00 00 00  48 81 В0 09  |.....H......H...|
00000490: 00 00 00 48  81 Д8 12 00  00 00 5Б 48  29 В3 0Е 85  |...H......[H)...|
000004А0: 16 00 00 00  68 7А 01 01  00 Д8 50 ЕГ  ЕЕ ЕЕ 48 81  |....hz....P...H.|
000004Б0: В4 08 00 00  00 Д9 11 00  00 00 68 9Д  01 01 00 Д8  |..........h.....|
000004В0: 3А ЕГ ЕЕ ЕЕ  48 81 В4 08  00 00 00 68  БД 01 01 00  |:...H......h....|
000004Г0: Д8 29 ЕГ ЕЕ  ЕЕ 48 81 В4  08 00 00 00  48 89 ДВ 5Г  |.)...H......H..]|
000004Д0: 48 В7 В0 3В  00 00 00 48  31 ЕЕ 0Е 05               |H..<...H1...|
000004ДВ:

Вывод программы:

Следующий шаг: сложение, вычитание, больше, меньше.
25
число больше 0ш24
число равно 0ш26
23
число меньше 0ш24
равенство1 истинно
равенство2 ложно
Выход.

0

4

Как язык называется (будет называться)? Мне это нужно для того, чтобы создать раздел с таким названием.

А то если не вы, то придумаем мы, и получится что-то вроде
Иван + Си = Иваси => язык "Сардина".

Отредактировано Лис (2024-10-05 01:50:12)

0

5

Лис написал(а):

Как язык называется (будет называться)? Мне это нужно для того, чтобы создать раздел с таким названием.

Файл компилятор rcx, наверное можно и назвать RCX.
Но я пишу его для ассемблера в том виде в котором он сейчас есть. Дальше посмотрим что делать с ним.

0

6

ИванАс написал(а):

можно и назвать RCX

А по-русски как?

RCX в римской системе счисления равно 310.
"проект 310" =)

0

7

Лис написал(а):

RCX в римской системе счисления равно 310.
"проект 310" =)

Тоже вариант :)
У меня логика была такая R - русский, С - си, X - осталось от утилиты дампа REX
А еще RCX - регистр. Если на русском, то можно развать РЧ - рабочее название.

Еще вариант РоСомаХа

Отредактировано ИванАс (2024-10-05 02:28:34)

0

8

ИванАс написал(а):

Еще вариант

РЧ -> эРЧ (earth) -> РэЧъ -> Речь

Отредактировано Лис (2024-10-05 03:57:55)

0

9

input.rcx:

Код:
ФункцияДлиныСтроки {асм("
    ; [РФ + 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 - консоль
    ВызватьСистему

    Вытолкнуть РБ

    Вытолкнуть РА
    Вытолкнуть РБ
    Вытолкнуть РД
")}

Начало {
    ФункцияВывода("Следующий шаг: цикл")

    Целое число
    число = 0

    Целое предел
    предел = 5

    Пока число < предел {
        ФункцияВыводаЧисла(число)
        число = число + 1
    } 

    предел = 0

    Пока число > предел {
        ФункцияВыводаЧисла(число)
        число = число - 1
    } 

    ФункцияВывода("Выход.")
}

input.rax:

Код:
.Байт 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

ПерейтиВ Начало
С4: .Байт 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шГ1, 0ш86, 0шГ0, 0шБ8, 0шГ0, 0шБА, 0шГ0, 0шББ, 0ш0А, 0
С5: .Байт 0шГ0, 0ш92, 0шГ1, 0ш8Б, 0шГ1, 0ш85, 0шГ0, 0шБД, 0шГ0, 0шБ4, 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 - консоль
    ВызватьСистему

    Вытолкнуть РБ

    Вытолкнуть РА
    Вытолкнуть РБ
    Вытолкнуть РД

    ; эпилог
    Копировать РС, РФ
    Вытолкнуть РФ
    Назад

; -------------------------------------------------------------------------------------
        Начало:
; -------------------------------------------------------------------------------------
    ; пролог
    Втолкнуть РФ
    Копировать РФ, РС
    Уменьшить РС, 16

    Втолкнуть С4
    Вызвать ФункцияВывода
    Увеличить РС, 0ш8

    Копировать РА, 0
    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать [РБ], РА

    Копировать РА, 5
    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать [РБ], РА

М1:
    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать РА, [РБ]
    Вытолкнуть РБ
    Уменьшить РБ, РА
    ПерейтиЕслиБольшеИлиРавно М2

    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать РА, [РБ]
    Втолкнуть РА
    Вызвать ФункцияВыводаЧисла
    Увеличить РС, 0ш8

    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать РА, [РБ]
    Увеличить РА, 1
    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать [РБ], РА

    Перейти М1
М2:
    Копировать РА, 0
    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать [РБ], РА

М3:
    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать РА, [РБ]
    Вытолкнуть РБ
    Уменьшить РБ, РА
    ПерейтиЕслиМеньшеИлиРавно М4

    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать РА, [РБ]
    Втолкнуть РА
    Вызвать ФункцияВыводаЧисла
    Увеличить РС, 0ш8

    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать РА, [РБ]
    Уменьшить РА, 1
    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать [РБ], РА

    Перейти М3
М4:
    Втолкнуть С5
    Вызвать ФункцияВывода
    Увеличить РС, 0ш8


    ; эпилог
    Копировать РС, РФ
    Вытолкнуть РФ

    ; выход
    Копировать РА, 0ш3В           ;  системная команда - 'выход'
    БитИсключающееИли РН, РН    ;  результат программы
    ВызватьСистему

output.bin:

Код:
./rex ./output.bin
00000000: 7Е 45 4В 46  02 01 01 00  00 00 00 00  00 00 00 00  |.ELF............|
00000010: 02 00 3Д 00  01 00 00 00  78 00 01 00  00 00 00 00  |..>.....x.......|
00000020: 40 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  |@...............|
00000030: 00 00 00 00  40 00 38 00  01 00 00 00  00 00 00 00  |....@.8.........|
00000040: 01 00 00 00  05 00 00 00  78 00 00 00  00 00 00 00  |........x.......|
00000050: 78 00 01 00  00 00 00 00  78 00 01 00  00 00 00 00  |x.......x.......|
00000060: 38 00 00 00  00 00 00 00  38 00 00 00  00 00 00 00  |8.......8.......|
00000070: 10 00 00 00  00 00 00 00  Д9 Е1 00 00  00 Г0 А1 Г0  |................|
00000080: ББ Г0 Б5 Г0  Б4 Г1 83 Г1  8Д Г1 89 Г0  Б8 Г0 Б9 20  |............... |
00000090: Г1 88 Г0 Б0  Г0 Б3 3А 20  Г1 86 Г0 Б8  Г0 БА Г0 ББ  |......: ........|
000000А0: 0А 00 Г0 92  Г1 8Б Г1 85  Г0 БД Г0 Б4  2Д 0А 00 55  |...............U|
000000Б0: 48 89 Д5 48  В7 В1 00 00  00 00 48 8Б  75 10 48 ЕЕ  |H..H......H.u.H.|
000000В0: ВД 48 ЕЕ В9  48 ЕЕ В6 48  ЕЕ В1 48 8Б  06 48 81 Д0  |.H..H..H..H..H..|
000000Г0: ЕЕ 00 00 00  0Е 85 ДА ЕЕ  ЕЕ ЕЕ 48 89  В8 48 89 ДВ  |..........H..H..|
000000Д0: 5Г В3 55 48  89 Д5 ЕЕ 75  10 Д8 В1 ЕЕ  ЕЕ ЕЕ 48 81  |].UH...u......H.|
000000Е0: В4 08 00 00  00 48 89 В2  48 В7 В0 01  00 00 00 48  |.....H..H......H|
00000100: 89 В7 48 8Б  75 10 0Е 05  48 89 ДВ 5Г  В3 55 48 89  |..H.u...H..].UH.|
00000110: Д5 52 53 50  48 81 ДВ 40  00 00 00 48  8Б 55 10 48  |.RSPH..@...H.U.H|
00000120: В7 В1 01 00  00 00 48 В7  В3 0А 00 00  00 48 89 Г0  |......H......H..|
00000130: 48 81 Д0 0Е  00 00 00 48  81 В8 30 00  00 00 48 В1  |H......H..0...H.|
00000140: Д3 08 48 09  В3 48 ЕЕ В1  48 В1 ДА 04  0Е 85 ГБ ЕЕ  |..H..H..H.......|
00000150: ЕЕ ЕЕ 53 48  89 ВА 48 89  Д6 48 В7 В0  01 00 00 00  |..SH..H..H......|
00000160: 48 89 В7 0Е  05 5Б 58 5Б  5А 48 89 ДВ  5Г В3 55 48  |H....[X[ZH..].UH|
00000170: 89 Д5 48 81  ДВ 10 00 00  00 68 7Г 00  01 00 Д8 5Е  |..H......h}...._|
00000180: ЕЕ ЕЕ ЕЕ 48  81 В4 08 00  00 00 48 В7  В0 00 00 00  |...H......H.....|
00000190: 00 48 89 ДБ  48 81 ДБ 08  00 00 00 48  89 03 48 В7  |.H..H......H..H.|
000001А0: В0 05 00 00  00 48 89 ДБ  48 81 ДБ 10  00 00 00 48  |.....H..H......H|
000001Б0: 89 03 48 89  ДБ 48 81 ДБ  08 00 00 00  48 8Б 03 50  |..H..H......H..P|
000001В0: 48 89 ДБ 48  81 ДБ 10 00  00 00 48 8Б  03 5Б 48 29  |H..H......H..[H)|
000001Г0: В3 0Е 8Г 40  00 00 00 48  89 ДБ 48 81  ДБ 08 00 00  |...@...H..H.....|
000001Д0: 00 48 8Б 03  50 Д8 23 ЕЕ  ЕЕ ЕЕ 48 81  В4 08 00 00  |.H..P.#...H.....|
000001Е0: 00 48 89 ДБ  48 81 ДБ 08  00 00 00 48  8Б 03 48 81  |.H..H......H..H.|
00000200: В0 01 00 00  00 48 89 ДБ  48 81 ДБ 08  00 00 00 48  |.....H..H......H|
00000210: 89 03 Д9 9Б  ЕЕ ЕЕ ЕЕ 48  В7 В0 00 00  00 00 48 89  |.......H......H.|
00000220: ДБ 48 81 ДБ  10 00 00 00  48 89 03 48  89 ДБ 48 81  |.H......H..H..H.|
00000230: ДБ 08 00 00  00 48 8Б 03  50 48 89 ДБ  48 81 ДБ 10  |.....H..PH..H...|
00000240: 00 00 00 48  8Б 03 5Б 48  29 В3 0Е 8Д  40 00 00 00  |...H..[H)...@...|
00000250: 48 89 ДБ 48  81 ДБ 08 00  00 00 48 8Б  03 50 Д8 АА  |H..H......H..P..|
00000260: ЕД ЕЕ ЕЕ 48  81 В4 08 00  00 00 48 89  ДБ 48 81 ДБ  |...H......H..H..|
00000270: 08 00 00 00  48 8Б 03 48  81 Д8 01 00  00 00 48 89  |....H..H......H.|
00000280: ДБ 48 81 ДБ  08 00 00 00  48 89 03 Д9  9Б ЕЕ ЕЕ ЕЕ  |.H......H.......|
00000290: 68 А2 00 01  00 Д8 48 ЕД  ЕЕ ЕЕ 48 81  В4 08 00 00  |h.....H...H.....|
000002А0: 00 48 89 ДВ  5Г 48 В7 В0  3В 00 00 00  48 31 ЕЕ 0Е  |.H..]H..<...H1..|
000002Б0: 05                                                  |.|
000002Б1:

Вывод программы:

Следующий шаг: цикл
0
1
2
3
4
5
4
3
2
1
Выход.

Лис написал(а):

РЧ -> эРЧ (earth) -> РэЧъ -> Речь

РуЧей, аРЧи, РуЧка,
РЧ - Регистр сЧета, Четки, Счеты, раСЧеска

Отредактировано ИванАс (2024-10-05 04:41:46)

0

10

ИванАс написал(а):

РЧ -> РасЧёска

"Штирлиц знал, что запоминается последняя фраза"⁠⁠

приспособление ... для ... массажа головы

Отредактировано Лис (2024-10-05 05:02:52)

0

11

Лис написал(а):

РЧ -> РасЧёска

Проект 94
https://github.com/tigertv/mnemotechnic … bjects.csv

"Брадобрей" (Брадобрей побреет сам себя).

В общем любой вариант, это рабочее название и его можно переименовать в любой момент.

Отредактировано ИванАс (2024-10-05 11:32:21)

0

12

input.rcx:

Код:
ФункцияДлиныСтроки {асм("
    ; [РФ + 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ш8] - переменная

    Копировать РБ, [РФ + 0ш10]
    Копировать РЧ, 1
    Копировать РИ, 0ш0а ; код перехода на новую строку в конце строки

Цикл2:
    Копировать РА, 0 ; sum_quotient = 0

    Втолкнуть РБ         ; 
Цикл:
    Вытолкнуть РБ           ; восстанавливаем остаток
Цикл3:
    Копировать РД, РБ       ; 
    БитИ РБ, 7              ; остаток от деления на 8
    СдвинутьВправоАрифметический РД, 3    ; делим на 8 ; quotient

    Увеличить РА, РД       ; sum += quotient
    СдвинутьВлево РД, 1     ; quotient * 2
    Уменьшить РБ, РД
    ПерейтиЕслиМеньше Цикл3
    Втолкнуть РБ         ; сохраняем остаток
    Уменьшить РБ, 9
    ПерейтиЕслиБольше Цикл

    Копировать РБ, РА        ; целая часть в РБ
    Вытолкнуть РА           ; восстанавливаем остаток 

    ; РА - остаток, РБ - целое, РД - часть для деления(поправка)

    БитИли РА, 0ш30

    ; сохраняем остаток в байте

    БитИ РА, 0шЕ
    БитИли РА, 0ш30
    СдвинутьВлево РИ, 8
    БитИли РИ, РА
    Увеличить1 РЧ

    Копировать РА, 0
    БитИли РА, РД
    ПерейтиЕслиНе0В Цикл2

    ; проверяем на последний 0 
    Копировать РН, РИ
    Уменьшить РН, 0ш0А30
    ПерейтиЕсли0В Сюда2

    Копировать РН, РИ
    БитИ РН, 15
    ПерейтиЕслиНе0В Сюда2
    СдвинутьВправо РИ, 8
    Уменьшить1 РЧ

Сюда2:    
    ; новая строка

    Втолкнуть РИ

    Копировать РД, РЧ      ; длина строки
    Копировать РИ, РС      ; указатель на строку
    Копировать РА, 1       ; системная команда 'запись файла'
    Копировать РН, РА      ; 1 - консоль
    ВызватьСистему

    Вытолкнуть РИ

    Вытолкнуть РА
    Вытолкнуть РБ
    Вытолкнуть РД
")}

Начало {
    ФункцияВывода("Следующий шаг: цикл в цикле, ищем простые числа на + и -")

    Целое число
    число = 1 

    Целое последнее
    последнее = 150 

    Целое прибавка
    прибавка = 2

    Целое проверяемое
    проверяемое = 3

    Целое являетсяПростым

    Пока проверяемое < последнее {
        прибавка = 2
        являетсяПростым = 1

        Пока прибавка < проверяемое {
            число = 0

            Пока число < проверяемое {
                число = число + прибавка
            } 

            Если число = проверяемое {
                являетсяПростым = 0
            }

            прибавка = прибавка + 1
        } 

        Если являетсяПростым = 1 {
            ФункцияВыводаЧисла(проверяемое)
        }

        проверяемое = проверяемое + 1
    } 

    ФункцияВывода("Выход.")
}

input.rax:

Код:
.Байт 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

ПерейтиВ Начало
С4: .Байт 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шГ1, 0ш86, 0шГ0, 0шБ8, 0шГ0, 0шБА, 0шГ0, 0шББ, 0ш20, 0шГ0, 0шБ2, 0ш20, 0шГ1, 0ш86, 0шГ0, 0шБ8, 0шГ0, 0шБА, 0шГ0, 0шББ, 0шГ0, 0шБ5, 0ш2В, 0ш20, 0шГ0, 0шБ8, 0шГ1, 0ш89, 0шГ0, 0шБ5, 0шГ0, 0шБВ, 0ш20, 0шГ0, 0шБЕ, 0шГ1, 0ш80, 0шГ0, 0шБД, 0шГ1, 0ш81, 0шГ1, 0ш82, 0шГ1, 0ш8Б, 0шГ0, 0шБ5, 0ш20, 0шГ1, 0ш87, 0шГ0, 0шБ8, 0шГ1, 0ш81, 0шГ0, 0шББ, 0шГ0, 0шБ0, 0ш20, 0шГ0, 0шБГ, 0шГ0, 0шБ0, 0ш20, 0ш2Б, 0ш20, 0шГ0, 0шБ8, 0ш20, 0ш2Г, 0ш0А, 0
С5: .Байт 0шГ0, 0ш92, 0шГ1, 0ш8Б, 0шГ1, 0ш85, 0шГ0, 0шБД, 0шГ0, 0шБ4, 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ш8] - переменная

    Копировать РБ, [РФ + 0ш10]
    Копировать РЧ, 1
    Копировать РИ, 0ш0а ; код перехода на новую строку в конце строки

Цикл2:
    Копировать РА, 0 ; sum_quotient = 0

    Втолкнуть РБ         ; 
Цикл:
    Вытолкнуть РБ           ; восстанавливаем остаток
Цикл3:
    Копировать РД, РБ       ; 
    БитИ РБ, 7              ; остаток от деления на 8
    СдвинутьВправоАрифметический РД, 3    ; делим на 8 ; quotient

    Увеличить РА, РД       ; sum += quotient
    СдвинутьВлево РД, 1     ; quotient * 2
    Уменьшить РБ, РД
    ПерейтиЕслиМеньше Цикл3
    Втолкнуть РБ         ; сохраняем остаток
    Уменьшить РБ, 9
    ПерейтиЕслиБольше Цикл

    Копировать РБ, РА        ; целая часть в РБ
    Вытолкнуть РА           ; восстанавливаем остаток 

    ; РА - остаток, РБ - целое, РД - часть для деления(поправка)

    БитИли РА, 0ш30

    ; сохраняем остаток в байте

    БитИ РА, 0шЕ
    БитИли РА, 0ш30
    СдвинутьВлево РИ, 8
    БитИли РИ, РА
    Увеличить1 РЧ

    Копировать РА, 0
    БитИли РА, РД
    ПерейтиЕслиНе0В Цикл2

    ; проверяем на последний 0 
    Копировать РН, РИ
    Уменьшить РН, 0ш0А30
    ПерейтиЕсли0В Сюда2

    Копировать РН, РИ
    БитИ РН, 15
    ПерейтиЕслиНе0В Сюда2
    СдвинутьВправо РИ, 8
    Уменьшить1 РЧ

Сюда2:    
    ; новая строка

    Втолкнуть РИ

    Копировать РД, РЧ      ; длина строки
    Копировать РИ, РС      ; указатель на строку
    Копировать РА, 1       ; системная команда 'запись файла'
    Копировать РН, РА      ; 1 - консоль
    ВызватьСистему

    Вытолкнуть РИ

    Вытолкнуть РА
    Вытолкнуть РБ
    Вытолкнуть РД

    ; эпилог
    Копировать РС, РФ
    Вытолкнуть РФ
    Назад

; -------------------------------------------------------------------------------------
        Начало:
; -------------------------------------------------------------------------------------
    ; пролог
    Втолкнуть РФ
    Копировать РФ, РС
    Уменьшить РС, 40

    Втолкнуть С4
    Вызвать ФункцияВывода
    Увеличить РС, 0ш8

    Копировать РА, 1
    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать [РБ], РА

    Копировать РА, 150
    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать [РБ], РА

    Копировать РА, 2
    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать [РБ], РА

    Копировать РА, 3
    Копировать РБ, РФ
    Уменьшить РБ, 32
    Копировать [РБ], РА

М1:
    Копировать РБ, РФ
    Уменьшить РБ, 32
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать РА, [РБ]
    Вытолкнуть РБ
    Уменьшить РБ, РА
    ПерейтиЕслиБольшеИлиРавно М2

    Копировать РА, 2
    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать [РБ], РА

    Копировать РА, 1
    Копировать РБ, РФ
    Уменьшить РБ, 40
    Копировать [РБ], РА

М3:
    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РБ, РФ
    Уменьшить РБ, 32
    Копировать РА, [РБ]
    Вытолкнуть РБ
    Уменьшить РБ, РА
    ПерейтиЕслиБольшеИлиРавно М4

    Копировать РА, 0
    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать [РБ], РА

М5:
    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РБ, РФ
    Уменьшить РБ, 32
    Копировать РА, [РБ]
    Вытолкнуть РБ
    Уменьшить РБ, РА
    ПерейтиЕслиБольшеИлиРавно М6

    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать РА, [РБ]
    Вытолкнуть РБ
    Увеличить РА, РБ
    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать [РБ], РА

    Перейти М5
М6:
    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РБ, РФ
    Уменьшить РБ, 32
    Копировать РА, [РБ]
    Вытолкнуть РБ
    Уменьшить РБ, РА
    ПерейтиЕслиНе0 М7

    Копировать РА, 0
    Копировать РБ, РФ
    Уменьшить РБ, 40
    Копировать [РБ], РА

М7:
    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РА, 1
    Вытолкнуть РБ
    Увеличить РА, РБ
    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать [РБ], РА

    Перейти М3
М4:
    Копировать РБ, РФ
    Уменьшить РБ, 40
    Копировать РА, [РБ]
    Втолкнуть РА
    Вытолкнуть РБ
    Уменьшить РБ, 1

    ПерейтиЕслиНе0 М9

    Копировать РБ, РФ
    Уменьшить РБ, 32
    Копировать РА, [РБ]
    Втолкнуть РА
    Вызвать ФункцияВыводаЧисла
    Увеличить РС, 0ш8

М9:
    Копировать РБ, РФ
    Уменьшить РБ, 32
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РА, 1
    Вытолкнуть РБ
    Увеличить РА, РБ
    Копировать РБ, РФ
    Уменьшить РБ, 32
    Копировать [РБ], РА

    Перейти М1
М2:
    Втолкнуть С5
    Вызвать ФункцияВывода
    Увеличить РС, 0ш8


    ; эпилог
    Копировать РС, РФ
    Вытолкнуть РФ

    ; выход
    Копировать РА, 0ш3В           ;  системная команда - 'выход'
    БитИсключающееИли РН, РН    ;  результат программы
    ВызватьСистему

rex:

Код:
./rex ./output.bin
00000000: 7Е 45 4В 46  02 01 01 00  00 00 00 00  00 00 00 00  |.ELF............|
00000010: 02 00 3Д 00  01 00 00 00  78 00 01 00  00 00 00 00  |..>.....x.......|
00000020: 40 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  |@...............|
00000030: 00 00 00 00  40 00 38 00  01 00 00 00  00 00 00 00  |....@.8.........|
00000040: 01 00 00 00  05 00 00 00  78 00 00 00  00 00 00 00  |........x.......|
00000050: 78 00 01 00  00 00 00 00  78 00 01 00  00 00 00 00  |x.......x.......|
00000060: 38 00 00 00  00 00 00 00  38 00 00 00  00 00 00 00  |8.......8.......|
00000070: 10 00 00 00  00 00 00 00  Д9 99 01 00  00 Г0 А1 Г0  |................|
00000080: ББ Г0 Б5 Г0  Б4 Г1 83 Г1  8Д Г1 89 Г0  Б8 Г0 Б9 20  |............... |
00000090: Г1 88 Г0 Б0  Г0 Б3 3А 20  Г1 86 Г0 Б8  Г0 БА Г0 ББ  |......: ........|
000000А0: 20 Г0 Б2 20  Г1 86 Г0 Б8  Г0 БА Г0 ББ  Г0 Б5 2В 20  | .. .........., |
000000Б0: Г0 Б8 Г1 89  Г0 Б5 Г0 БВ  20 Г0 БЕ Г1  80 Г0 БД Г1  |........ .......|
000000В0: 81 Г1 82 Г1  8Б Г0 Б5 20  Г1 87 Г0 Б8  Г1 81 Г0 ББ  |....... ........|
000000Г0: Г0 Б0 20 Г0  БГ Г0 Б0 20  2Б 20 Г0 Б8  20 2Г 0А 00  |.. .... + .. -..|
000000Д0: Г0 92 Г1 8Б  Г1 85 Г0 БД  Г0 Б4 2Д 0А  00 55 48 89  |.............UH.|
000000Е0: Д5 48 В7 В1  00 00 00 00  48 8Б 75 10  48 ЕЕ ВД 48  |.H......H.u.H..H|
00000100: ЕЕ В9 48 ЕЕ  В6 48 ЕЕ В1  48 8Б 06 48  81 Д0 ЕЕ 00  |..H..H..H..H....|
00000110: 00 00 0Е 85  ДА ЕЕ ЕЕ ЕЕ  48 89 В8 48  89 ДВ 5Г В3  |........H..H..].|
00000120: 55 48 89 Д5  ЕЕ 75 10 Д8  В1 ЕЕ ЕЕ ЕЕ  48 81 В4 08  |UH...u......H...|
00000130: 00 00 00 48  89 В2 48 В7  В0 01 00 00  00 48 89 В7  |...H..H......H..|
00000140: 48 8Б 75 10  0Е 05 48 89  ДВ 5Г В3 55  48 89 Д5 52  |H.u...H..].UH..R|
00000150: 53 50 48 81  ДВ 40 00 00  00 48 8Б 5Г  10 48 В7 В1  |SPH..@...H.].H..|
00000160: 01 00 00 00  48 В7 В6 0А  00 00 00 48  В7 В0 00 00  |....H......H....|
00000170: 00 00 53 5Б  48 89 ГА 48  81 Д3 07 00  00 00 48 В1  |..S[H..H......H.|
00000180: ЕА 03 48 01  Г0 48 В1 Д2  01 48 29 Г3  0Е 8В Д2 ЕЕ  |..H..H...H).....|
00000190: ЕЕ ЕЕ 53 48  81 ДБ 09 00  00 00 0Е 8Е  Г3 ЕЕ ЕЕ ЕЕ  |..SH............|
000001А0: 48 89 В3 58  48 81 В8 30  00 00 00 48  81 Д0 0Е 00  |H..XH..0...H....|
000001Б0: 00 00 48 81  В8 30 00 00  00 48 В1 Д6  08 48 09 В6  |..H..0...H...H..|
000001В0: 48 ЕЕ В1 48  В7 В0 00 00  00 00 48 09  Г0 0Е 85 98  |H..H......H.....|
000001Г0: ЕЕ ЕЕ ЕЕ 48  89 Е7 48 81  ДЕ 30 0А 00  00 0Е 84 17  |...H..H..0......|
000001Д0: 00 00 00 48  89 Е7 48 81  Д7 0Е 00 00  00 0Е 85 07  |...H..H.........|
000001Е0: 00 00 00 48  В1 ДД 08 48  ЕЕ В9 56 48  89 ВА 48 89  |...H...H..VH..H.|
00000200: Д6 48 В7 В0  01 00 00 00  48 89 В7 0Е  05 5Д 58 5Б  |.H......H....^X[|
00000210: 5А 48 89 ДВ  5Г В3 55 48  89 Д5 48 81  ДВ 28 00 00  |ZH..].UH..H..(..|
00000220: 00 68 7Г 00  01 00 Д8 Е5  ЕД ЕЕ ЕЕ 48  81 В4 08 00  |.h}........H....|
00000230: 00 00 48 В7  В0 01 00 00  00 48 89 ДБ  48 81 ДБ 08  |..H......H..H...|
00000240: 00 00 00 48  89 03 48 В7  В0 96 00 00  00 48 89 ДБ  |...H..H......H..|
00000250: 48 81 ДБ 10  00 00 00 48  89 03 48 В7  В0 02 00 00  |H......H..H.....|
00000260: 00 48 89 ДБ  48 81 ДБ 18  00 00 00 48  89 03 48 В7  |.H..H......H..H.|
00000270: В0 03 00 00  00 48 89 ДБ  48 81 ДБ 20  00 00 00 48  |.....H..H.. ...H|
00000280: 89 03 48 89  ДБ 48 81 ДБ  20 00 00 00  48 8Б 03 50  |..H..H.. ...H..P|
00000290: 48 89 ДБ 48  81 ДБ 10 00  00 00 48 8Б  03 5Б 48 29  |H..H......H..[H)|
000002А0: В3 0Е 8Г 7В  01 00 00 48  В7 В0 02 00  00 00 48 89  |...|...H......H.|
000002Б0: ДБ 48 81 ДБ  18 00 00 00  48 89 03 48  В7 В0 01 00  |.H......H..H....|
000002В0: 00 00 48 89  ДБ 48 81 ДБ  28 00 00 00  48 89 03 48  |..H..H..(...H..H|
000002Г0: 89 ДБ 48 81  ДБ 18 00 00  00 48 8Б 03  50 48 89 ДБ  |..H......H..PH..|
000002Д0: 48 81 ДБ 20  00 00 00 48  8Б 03 5Б 48  29 В3 0Е 8Г  |H.. ...H..[H)...|
000002Е0: ВД 00 00 00  48 В7 В0 00  00 00 00 48  89 ДБ 48 81  |....H......H..H.|
00000300: ДБ 08 00 00  00 48 89 03  48 89 ДБ 48  81 ДБ 08 00  |.....H..H..H....|
00000310: 00 00 48 8Б  03 50 48 89  ДБ 48 81 ДБ  20 00 00 00  |..H..PH..H.. ...|
00000320: 48 8Б 03 5Б  48 29 В3 0Е  8Г 31 00 00  00 48 89 ДБ  |H..[H)...1...H..|
00000330: 48 81 ДБ 08  00 00 00 48  8Б 03 50 48  89 ДБ 48 81  |H......H..PH..H.|
00000340: ДБ 18 00 00  00 48 8Б 03  5Б 48 01 Г8  48 89 ДБ 48  |.....H..[H..H..H|
00000350: 81 ДБ 08 00  00 00 48 89  03 Д9 АА ЕЕ  ЕЕ ЕЕ 48 89  |......H.......H.|
00000360: ДБ 48 81 ДБ  08 00 00 00  48 8Б 03 50  48 89 ДБ 48  |.H......H..PH..H|
00000370: 81 ДБ 20 00  00 00 48 8Б  03 5Б 48 29  В3 0Е 85 14  |.. ...H..[H)....|
00000380: 00 00 00 48  В7 В0 00 00  00 00 48 89  ДБ 48 81 ДБ  |...H......H..H..|
00000390: 28 00 00 00  48 89 03 48  89 ДБ 48 81  ДБ 18 00 00  |(...H..H..H.....|
000003А0: 00 48 8Б 03  50 48 В7 В0  01 00 00 00  5Б 48 01 Г8  |.H..PH......[H..|
000003Б0: 48 89 ДБ 48  81 ДБ 18 00  00 00 48 89  03 Д9 0Г ЕЕ  |H..H......H.....|
000003В0: ЕЕ ЕЕ 48 89  ДБ 48 81 ДБ  28 00 00 00  48 8Б 03 50  |..H..H..(...H..P|
000003Г0: 5Б 48 81 ДБ  01 00 00 00  0Е 85 1А 00  00 00 48 89  |[H............H.|
000003Д0: ДБ 48 81 ДБ  20 00 00 00  48 8Б 03 50  Д8 5А ЕГ ЕЕ  |.H.. ...H..P.Z..|
000003Е0: ЕЕ 48 81 В4  08 00 00 00  48 89 ДБ 48  81 ДБ 20 00  |.H......H..H.. .|
00000400: 00 00 48 8Б  03 50 48 В7  В0 01 00 00  00 5Б 48 01  |..H..PH......[H.|
00000410: Г8 48 89 ДБ  48 81 ДБ 20  00 00 00 48  89 03 Д9 5Е  |.H..H.. ...H..._|
00000420: ЕД ЕЕ ЕЕ 68  Д0 00 01 00  Д8 Е3 ЕВ ЕЕ  ЕЕ 48 81 В4  |...h.........H..|
00000430: 08 00 00 00  48 89 ДВ 5Г  48 В7 В0 3В  00 00 00 48  |....H..]H..<...H|
00000440: 31 ЕЕ 0Е 05                                         |1...|
00000444:

Вывод программы:

Код:
Следующий шаг: цикл в цикле, ищем простые числа на + и -
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
101
103
107
109
113
127
131
137
139
149
Выход.

Отредактировано ИванАс (2024-10-06 13:08:08)

0

13

С простыми числами - отличный (для целей пиара) демонстрационный пример.
Если бы была жива "сказочная колесница", можно было бы реализовать нужные команды и выкатывать очередной релиз.

Отредактировано Лис (2024-10-06 13:31:44)

0

14

Лис написал(а):

С простыми числами - отличный (для целей пиара) демонстрационный пример.

Увидел у шамана вроде было, вот попробывал  реализовать без операций деления. Также на ассемблере, для вывода чисел в десятяричной системе я использовал сдвиги для деления на 10.

Лис написал(а):

Если бы была жива "сказочная колесница", можно было бы реализовать нужные команды и выкатывать очередной релиз.

Ассемблер может перетечь и в виртуальную машину, но пока не будем бежать впереди лошади.

0

15

ИванАс написал(а):

использовал сдвиги для деления на 10

Я не понял, как это работает.

Прочитал
https://stackoverflow.com/questions/555 … bit-shifts

function bitwiseDivApprox(dividend) {
    var divisor = 26; // Math.ceil((1/10) * Math.pow(2, 8))
    return (divisor * dividend) >> 8;
}

и всё равно не понял.

Отредактировано Лис (2024-10-06 21:30:53)

0

16

Лис написал(а):

function bitwiseDivApprox(dividend) {
    var divisor = 26; // Math.ceil((1/10) * Math.pow(2, 8))
    return (divisor * dividend) >> 8;
}

Это пока я тоже не понял как работает :) А ссылка на этот пример есть? Умножение используется. Приближение. Если на входе 356, то на выходе 36. Остатка нет.

Лис написал(а):

Прочитал
https://stackoverflow.com/questions/555 … bit-shifts

Я не подглядывал, сам написал. Для лабы кому-то, прога на микроконтроллере, там умножение-деление отсутствовало. Может где-то есть аналогичное решение, может даже проще.

Лис написал(а):

Я не понял, как это работает.

Делишь на 8, получаешь целое, для того чтобы получить деление на десять, на каждое такое целое нужно ввести поправку на 2, так как 8+2=10. Причем и то и другое степень двойки.

0

17

ИванАс написал(а):

Умножение используется. Приближение.

"Если нужно забить гвоздь, надо взять молоток и забить гвоздь."
(q) 1998, фильм Солдат
В нашем-то процессоре деление есть.

Clang, on the other hand, and MSVC, will emit a div instruction at -O0.

GCC is, in fact, rather unusual in that it doesn't have a true "no optimizations" mode, because many of its optimizations are constitutively turned on.
gcc -O0 still transforms code through internal representations as part of turning C into machine code.

ИванАс написал(а):

на микроконтроллере, там умножение-деление отсутствовало

«we have to be careful that the error in our reciprocal does not cause errors in our final result.»
Ага, а потом объясняй, при чём тут GCC и как посчитать пределы применимости...

«If you know the divisor ahead of time, you can avoid the division by replacing it with a set of other operations (multiplications, additions, and shifts) which have the equivalent effect. Even if several operations are needed, it's often still a heck of a lot faster than the integer division itself.»

А потом ещё тестируй на процессоре - быстрее ли на самом деле или нет.

ИванАс написал(а):

Причем и то и другое степень двойки.

Если надо было бы умножить на 10, это бы помогло.

(X<<3) + (X<<1) = X * 8 + X * 2 = X * (8 + 2) = X * 10

https://ru.stackoverflow.com/questions/788543/Как-поделить-двоичное-натуральное-на-10-фиксированным-количеством-сдвигов-сложе
«можно взять книгу Уоррена "Алгоритмыческие трюки для программистов" и найти там соответствующие методы»

https://stackoverflow.com/questions/162 … 3#16218823

https://stackoverflow.com/questions/411 … teger-divi

https://ridiculousfish.com/blog/posts/l … ode-i.html
«Henry Warren (must have been a while) and his book Hacker's Delight,»
2002, https://en.wikipedia.org/wiki/Hacker's_Delight

https://homepage.divms.uiowa.edu/~jones/bcd/divide.html

That paper dated 1994 describes implementing it in gcc:
http://gmplib.org/%7Etege/divcnst-pldi94.pdf
«scheduled for inclusion in GCC 2.6»

Вообще говоря, 10 это очень важная константа, они даже инструкции раньше делали для BCD-чисел.
Так вот деление на 10 можно было бы ускорить аппаратно, не перегрелись бы.
И рано или поздно кто-то это сделает. Потому что смогут (даже не делая отдельную инструкцию-опкод).

Поэтому на мой взгляд нет смысла делать программно эти предварительные оптимизации (тащить подходы 30-ти летней (2024-1994) давности).
В крайнем случае, место размещения таких приёмов в оптимизаторе (аналоге llvm), а не в ассемблере.
Потому что "нужно спрямлять кривую изучения", потому что чем выше в компиляторе, тем больше информации о возможных диапазонах и т.п.

Отредактировано Лис (2024-10-07 02:53:03)

0

18

Лис написал(а):

"Если нужно забить гвоздь, надо взять молоток и забить гвоздь."
(q) 1998, фильм Солдат

Смотрю только советские и российские фильмы :)

Лис написал(а):

В нашем-то процессоре деление есть.

В ассемблере пока не реализовано. Задача же минимизировать набор инструкций. "Копировать" наверное тоже можно выкинуть (временно).

Лис написал(а):

А потом ещё тестируй на процессоре - быстрее ли на самом деле или нет.

Цель другая.

Лис написал(а):

Если надо было бы умножить на 10, это бы помогло.
(X<<3) + (X<<1) = X * 8 + X * 2 = X * (8 + 2) = X * 10

Ну это я знаю :) с дробью разобрался.

Лис написал(а):

https://ru.stackoverflow.com/questions/788543/Как-поделить-двоичное-натуральное-на-10-фиксированным-количеством-сдвигов-сложе
«можно взять книгу Уоррена "Алгоритмыческие трюки для программистов" и найти там соответствующие методы»

Книжку знаю.

Лис написал(а):

BCD-чисел.

И про это я знаю.

Лис написал(а):

Поэтому на мой взгляд нет смысла делать программно эти предварительные оптимизации (тащить подходы 30-ти летней (2024-1994) давности).

Взял молоток, забил гвоздь. Фильм Солдат. 1998 США

Отредактировано ИванАс (2024-10-07 05:16:34)

0

19

ИванАс написал(а):

Задача же минимизировать набор инструкций.

Не до такой же степени. Тогда лучше сдвиги выкинуть, а школьные операции оставить. И вместо сдвигов - делить и умножать на степени двойки.
У школьных операций лучше объясняемость.

0

20

input.rcx:

Код:
ФункцияДлиныСтроки {асм("
    ; [РФ + 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ш8] - переменная

    Копировать РБ, [РФ + 0ш10]
    Копировать РЧ, 1
    Копировать РИ, 0ш0а ; код перехода на новую строку в конце строки

Цикл2:
    Копировать РА, 0 ; sum_quotient = 0

    Втолкнуть РБ         ; 
Цикл:
    Вытолкнуть РБ           ; восстанавливаем остаток
Цикл3:
    Копировать РД, РБ       ; 
    БитИ РБ, 7              ; остаток от деления на 8
    СдвинутьВправоАрифметический РД, 3    ; делим на 8 ; quotient

    Увеличить РА, РД       ; sum += quotient
    СдвинутьВлево РД, 1     ; quotient * 2
    Уменьшить РБ, РД
    ПерейтиЕслиМеньше Цикл3
    Втолкнуть РБ         ; сохраняем остаток
    Уменьшить РБ, 9
    ПерейтиЕслиБольше Цикл

    Копировать РБ, РА        ; целая часть в РБ
    Вытолкнуть РА           ; восстанавливаем остаток 

    ; РА - остаток, РБ - целое, РД - часть для деления(поправка)

    БитИли РА, 0ш30

    ; сохраняем остаток в байте

    БитИ РА, 0шЕ
    БитИли РА, 0ш30
    СдвинутьВлево РИ, 8
    БитИли РИ, РА
    Увеличить1 РЧ

    Копировать РА, 0
    БитИли РА, РД
    ПерейтиЕслиНе0В Цикл2

    ; проверяем на последний 0 
    Копировать РН, РИ
    Уменьшить РН, 0ш0А30
    ПерейтиЕсли0В Сюда2

    Копировать РН, РИ
    БитИ РН, 15
    ПерейтиЕслиНе0В Сюда2
    СдвинутьВправо РИ, 8
    Уменьшить1 РЧ

Сюда2:    
    ; новая строка

    Втолкнуть РИ

    Копировать РД, РЧ      ; длина строки
    Копировать РИ, РС      ; указатель на строку
    Копировать РА, 1       ; системная команда 'запись файла'
    Копировать РН, РА      ; 1 - консоль
    ВызватьСистему

    Вытолкнуть РИ

    Вытолкнуть РА
    Вытолкнуть РБ
    Вытолкнуть РД
")}

ПроверкаПростоты(Целое проверяемое) {
    Целое прибавка = 2
    Целое являетсяПростым = 1
    Целое число

    Пока прибавка < проверяемое {
        число = 0

        Пока число < проверяемое {
            число = число + прибавка
        } 

        Если число = проверяемое {
            являетсяПростым = 0
            число = проверяемое   ; ТУ СДЕЛАТЬ :) тут должен быть выход из цикла
        }

        прибавка = прибавка + 1
    } 

    Вернуть являетсяПростым
}

;* -------------------------------------------
    Начало - точка входа программы
    Многострочный комментарий
    Многострочный комментарий
---------------------------------------------*;
Начало {
    ФункцияВывода("Следующий шаг: получение результата вызова функции, аргументы функции")

    Целое прибавка
    Целое являетсяПростым

    Целое последнее = 150 
    Целое число = 2
    Пока число < последнее {
        являетсяПростым = ПроверкаПростоты(число)

        Если являетсяПростым = 1 {
            ФункцияВыводаЧисла(число)
        }

        число = число + 1
    } 

    ФункцияВывода("Выход.")
}

input.rax:

Код:
.Байт 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

ПерейтиВ Начало
С4: .Байт 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шБЕ, 0шГ0, 0шБД, 0шГ0, 0шББ, 0шГ1, 0ш83, 0шГ1, 0ш87, 0шГ0, 0шБ5, 0шГ0, 0шБГ, 0шГ0, 0шБ8, 0шГ0, 0шБ5, 0ш20, 0шГ1, 0ш80, 0шГ0, 0шБ5, 0шГ0, 0шБ7, 0шГ1, 0ш83, 0шГ0, 0шББ, 0шГ1, 0ш8В, 0шГ1, 0ш82, 0шГ0, 0шБ0, 0шГ1, 0ш82, 0шГ0, 0шБ0, 0ш20, 0шГ0, 0шБ2, 0шГ1, 0ш8Б, 0шГ0, 0шБ7, 0шГ0, 0шБД, 0шГ0, 0шБ2, 0шГ0, 0шБ0, 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ш20, 0шГ0, 0шБ0, 0шГ1, 0ш80, 0шГ0, 0шБ3, 0шГ1, 0ш83, 0шГ0, 0шБВ, 0шГ0, 0шБ5, 0шГ0, 0шБГ, 0шГ1, 0ш82, 0шГ1, 0ш8Б, 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ш0А, 0
С5: .Байт 0шГ0, 0ш92, 0шГ1, 0ш8Б, 0шГ1, 0ш85, 0шГ0, 0шБД, 0шГ0, 0шБ4, 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ш8] - переменная

    Копировать РБ, [РФ + 0ш10]
    Копировать РЧ, 1
    Копировать РИ, 0ш0а ; код перехода на новую строку в конце строки

Цикл2:
    Копировать РА, 0 ; sum_quotient = 0

    Втолкнуть РБ         ; 
Цикл:
    Вытолкнуть РБ           ; восстанавливаем остаток
Цикл3:
    Копировать РД, РБ       ; 
    БитИ РБ, 7              ; остаток от деления на 8
    СдвинутьВправоАрифметический РД, 3    ; делим на 8 ; quotient

    Увеличить РА, РД       ; sum += quotient
    СдвинутьВлево РД, 1     ; quotient * 2
    Уменьшить РБ, РД
    ПерейтиЕслиМеньше Цикл3
    Втолкнуть РБ         ; сохраняем остаток
    Уменьшить РБ, 9
    ПерейтиЕслиБольше Цикл

    Копировать РБ, РА        ; целая часть в РБ
    Вытолкнуть РА           ; восстанавливаем остаток 

    ; РА - остаток, РБ - целое, РД - часть для деления(поправка)

    БитИли РА, 0ш30

    ; сохраняем остаток в байте

    БитИ РА, 0шЕ
    БитИли РА, 0ш30
    СдвинутьВлево РИ, 8
    БитИли РИ, РА
    Увеличить1 РЧ

    Копировать РА, 0
    БитИли РА, РД
    ПерейтиЕслиНе0В Цикл2

    ; проверяем на последний 0 
    Копировать РН, РИ
    Уменьшить РН, 0ш0А30
    ПерейтиЕсли0В Сюда2

    Копировать РН, РИ
    БитИ РН, 15
    ПерейтиЕслиНе0В Сюда2
    СдвинутьВправо РИ, 8
    Уменьшить1 РЧ

Сюда2:    
    ; новая строка

    Втолкнуть РИ

    Копировать РД, РЧ      ; длина строки
    Копировать РИ, РС      ; указатель на строку
    Копировать РА, 1       ; системная команда 'запись файла'
    Копировать РН, РА      ; 1 - консоль
    ВызватьСистему

    Вытолкнуть РИ

    Вытолкнуть РА
    Вытолкнуть РБ
    Вытолкнуть РД

    ; эпилог
    Копировать РС, РФ
    Вытолкнуть РФ
    Назад

; -------------------------------------------------------------------------------------
        ПроверкаПростоты:
; -------------------------------------------------------------------------------------
    ; пролог
    Втолкнуть РФ
    Копировать РФ, РС
    Уменьшить РС, 32

    Копировать РБ, РФ
    Увеличить РБ, 24
    Копировать РА, [РБ]

    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать [РБ], РА

    Копировать РА, 2
    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать [РБ], РА

    Копировать РА, 1
    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать [РБ], РА

М1:
    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать РА, [РБ]
    Вытолкнуть РБ
    Уменьшить РБ, РА
    ПерейтиЕслиБольшеИлиРавно М2

    Копировать РА, 0
    Копировать РБ, РФ
    Уменьшить РБ, 32
    Копировать [РБ], РА

М3:
    Копировать РБ, РФ
    Уменьшить РБ, 32
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать РА, [РБ]
    Вытолкнуть РБ
    Уменьшить РБ, РА
    ПерейтиЕслиБольшеИлиРавно М4

    Копировать РБ, РФ
    Уменьшить РБ, 32
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать РА, [РБ]
    Вытолкнуть РБ
    Увеличить РА, РБ
    Копировать РБ, РФ
    Уменьшить РБ, 32
    Копировать [РБ], РА

    Перейти М3
М4:
    Копировать РБ, РФ
    Уменьшить РБ, 32
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать РА, [РБ]
    Вытолкнуть РБ
    Уменьшить РБ, РА
    ПерейтиЕслиНе0 М5

    Копировать РА, 0
    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать [РБ], РА

    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать РА, [РБ]
    Копировать РБ, РФ
    Уменьшить РБ, 32
    Копировать [РБ], РА

М5:
    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РА, 1
    Вытолкнуть РБ
    Увеличить РА, РБ
    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать [РБ], РА

    Перейти М1
М2:
    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать РА, [РБ]
    ; эпилог
    Копировать РС, РФ
    Вытолкнуть РФ
    Назад

; -------------------------------------------------------------------------------------
        Начало:
; -------------------------------------------------------------------------------------
    ; пролог
    Втолкнуть РФ
    Копировать РФ, РС
    Уменьшить РС, 32

    Втолкнуть С4
    Вызвать ФункцияВывода
    Увеличить РС, 0ш8

    Копировать РА, 150
    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать [РБ], РА

    Копировать РА, 2
    Копировать РБ, РФ
    Уменьшить РБ, 32
    Копировать [РБ], РА

М7:
    Копировать РБ, РФ
    Уменьшить РБ, 32
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать РА, [РБ]
    Вытолкнуть РБ
    Уменьшить РБ, РА
    ПерейтиЕслиБольшеИлиРавно М8

    Копировать РБ, РФ
    Уменьшить РБ, 32
    Копировать РА, [РБ]
    Втолкнуть РА
    Вызвать ПроверкаПростоты
    Увеличить РС, 0ш8

    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать [РБ], РА

    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать РА, [РБ]
    Втолкнуть РА
    Вытолкнуть РБ
    Уменьшить РБ, 1

    ПерейтиЕслиНе0 М9

    Копировать РБ, РФ
    Уменьшить РБ, 32
    Копировать РА, [РБ]
    Втолкнуть РА
    Вызвать ФункцияВыводаЧисла
    Увеличить РС, 0ш8

М9:
    Копировать РБ, РФ
    Уменьшить РБ, 32
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РА, 1
    Вытолкнуть РБ
    Увеличить РА, РБ
    Копировать РБ, РФ
    Уменьшить РБ, 32
    Копировать [РБ], РА

    Перейти М7
М8:
    Втолкнуть С5
    Вызвать ФункцияВывода
    Увеличить РС, 0ш8


    ; эпилог
    Копировать РС, РФ
    Вытолкнуть РФ

    ; выход
    Копировать РА, 0ш3В           ;  системная команда - 'выход'
    БитИсключающееИли РН, РН    ;  результат программы
    ВызватьСистему

rex:

Код:
./rex ./output.bin
00000000: 7Е 45 4В 46  02 01 01 00  00 00 00 00  00 00 00 00  |.ELF............|
00000010: 02 00 3Д 00  01 00 00 00  78 00 01 00  00 00 00 00  |..>.....x.......|
00000020: 40 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  |@...............|
00000030: 00 00 00 00  40 00 38 00  01 00 00 00  00 00 00 00  |....@.8.........|
00000040: 01 00 00 00  05 00 00 00  78 00 00 00  00 00 00 00  |........x.......|
00000050: 78 00 01 00  00 00 00 00  78 00 01 00  00 00 00 00  |x.......x.......|
00000060: 38 00 00 00  00 00 00 00  38 00 00 00  00 00 00 00  |8.......8.......|
00000070: 10 00 00 00  00 00 00 00  Д9 25 03 00  00 Г0 А1 Г0  |.........%......|
00000080: ББ Г0 Б5 Г0  Б4 Г1 83 Г1  8Д Г1 89 Г0  Б8 Г0 Б9 20  |............... |
00000090: Г1 88 Г0 Б0  Г0 Б3 3А 20  Г0 БЕ Г0 БД  Г0 ББ Г1 83  |......: ........|
000000А0: Г1 87 Г0 Б5  Г0 БГ Г0 Б8  Г0 Б5 20 Г1  80 Г0 Б5 Г0  |.......... .....|
000000Б0: Б7 Г1 83 Г0  ББ Г1 8В Г1  82 Г0 Б0 Г1  82 Г0 Б0 20  |............... |
000000В0: Г0 Б2 Г1 8Б  Г0 Б7 Г0 БД  Г0 Б2 Г0 Б0  20 Г1 84 Г1  |............ ...|
000000Г0: 83 Г0 БГ Г0  БА Г1 86 Г0  Б8 Г0 Б8 2В  20 Г0 Б0 Г1  |..........., ...|
000000Д0: 80 Г0 Б3 Г1  83 Г0 БВ Г0  Б5 Г0 БГ Г1  82 Г1 8Б 20  |............... |
000000Е0: Г1 84 Г1 83  Г0 БГ Г0 БА  Г1 86 Г0 Б8  Г0 Б8 0А 00  |................|
00000100: Г0 92 Г1 8Б  Г1 85 Г0 БД  Г0 Б4 2Д 0А  00 55 48 89  |.............UH.|
00000110: Д5 48 В7 В1  00 00 00 00  48 8Б 75 10  48 ЕЕ ВД 48  |.H......H.u.H..H|
00000120: ЕЕ В9 48 ЕЕ  В6 48 ЕЕ В1  48 8Б 06 48  81 Д0 ЕЕ 00  |..H..H..H..H....|
00000130: 00 00 0Е 85  ДА ЕЕ ЕЕ ЕЕ  48 89 В8 48  89 ДВ 5Г В3  |........H..H..].|
00000140: 55 48 89 Д5  ЕЕ 75 10 Д8  В1 ЕЕ ЕЕ ЕЕ  48 81 В4 08  |UH...u......H...|
00000150: 00 00 00 48  89 В2 48 В7  В0 01 00 00  00 48 89 В7  |...H..H......H..|
00000160: 48 8Б 75 10  0Е 05 48 89  ДВ 5Г В3 55  48 89 Д5 52  |H.u...H..].UH..R|
00000170: 53 50 48 81  ДВ 40 00 00  00 48 8Б 5Г  10 48 В7 В1  |SPH..@...H.].H..|
00000180: 01 00 00 00  48 В7 В6 0А  00 00 00 48  В7 В0 00 00  |....H......H....|
00000190: 00 00 53 5Б  48 89 ГА 48  81 Д3 07 00  00 00 48 В1  |..S[H..H......H.|
000001А0: ЕА 03 48 01  Г0 48 В1 Д2  01 48 29 Г3  0Е 8В Д2 ЕЕ  |..H..H...H).....|
000001Б0: ЕЕ ЕЕ 53 48  81 ДБ 09 00  00 00 0Е 8Е  Г3 ЕЕ ЕЕ ЕЕ  |..SH............|
000001В0: 48 89 В3 58  48 81 В8 30  00 00 00 48  81 Д0 0Е 00  |H..XH..0...H....|
000001Г0: 00 00 48 81  В8 30 00 00  00 48 В1 Д6  08 48 09 В6  |..H..0...H...H..|
000001Д0: 48 ЕЕ В1 48  В7 В0 00 00  00 00 48 09  Г0 0Е 85 98  |H..H......H.....|
000001Е0: ЕЕ ЕЕ ЕЕ 48  89 Е7 48 81  ДЕ 30 0А 00  00 0Е 84 17  |...H..H..0......|
00000200: 00 00 00 48  89 Е7 48 81  Д7 0Е 00 00  00 0Е 85 07  |...H..H.........|
00000210: 00 00 00 48  В1 ДД 08 48  ЕЕ В9 56 48  89 ВА 48 89  |...H...H..VH..H.|
00000220: Д6 48 В7 В0  01 00 00 00  48 89 В7 0Е  05 5Д 58 5Б  |.H......H....^X[|
00000230: 5А 48 89 ДВ  5Г В3 55 48  89 Д5 48 81  ДВ 20 00 00  |ZH..].UH..H.. ..|
00000240: 00 48 89 ДБ  48 81 В3 18  00 00 00 48  8Б 03 48 89  |.H..H......H..H.|
00000250: ДБ 48 81 ДБ  08 00 00 00  48 89 03 48  В7 В0 02 00  |.H......H..H....|
00000260: 00 00 48 89  ДБ 48 81 ДБ  10 00 00 00  48 89 03 48  |..H..H......H..H|
00000270: В7 В0 01 00  00 00 48 89  ДБ 48 81 ДБ  18 00 00 00  |......H..H......|
00000280: 48 89 03 48  89 ДБ 48 81  ДБ 10 00 00  00 48 8Б 03  |H..H..H......H..|
00000290: 50 48 89 ДБ  48 81 ДБ 08  00 00 00 48  8Б 03 5Б 48  |PH..H......H..[H|
000002А0: 29 В3 0Е 8Г  Д8 00 00 00  48 В7 В0 00  00 00 00 48  |).......H......H|
000002Б0: 89 ДБ 48 81  ДБ 20 00 00  00 48 89 03  48 89 ДБ 48  |..H.. ...H..H..H|
000002В0: 81 ДБ 20 00  00 00 48 8Б  03 50 48 89  ДБ 48 81 ДБ  |.. ...H..PH..H..|
000002Г0: 08 00 00 00  48 8Б 03 5Б  48 29 В3 0Е  8Г 31 00 00  |....H..[H)...1..|
000002Д0: 00 48 89 ДБ  48 81 ДБ 20  00 00 00 48  8Б 03 50 48  |.H..H.. ...H..PH|
000002Е0: 89 ДБ 48 81  ДБ 10 00 00  00 48 8Б 03  5Б 48 01 Г8  |..H......H..[H..|
00000300: 48 89 ДБ 48  81 ДБ 20 00  00 00 48 89  03 Д9 АА ЕЕ  |H..H.. ...H.....|
00000310: ЕЕ ЕЕ 48 89  ДБ 48 81 ДБ  20 00 00 00  48 8Б 03 50  |..H..H.. ...H..P|
00000320: 48 89 ДБ 48  81 ДБ 08 00  00 00 48 8Б  03 5Б 48 29  |H..H......H..[H)|
00000330: В3 0Е 85 2Д  00 00 00 48  В7 В0 00 00  00 00 48 89  |.......H......H.|
00000340: ДБ 48 81 ДБ  18 00 00 00  48 89 03 48  89 ДБ 48 81  |.H......H..H..H.|
00000350: ДБ 08 00 00  00 48 8Б 03  48 89 ДБ 48  81 ДБ 20 00  |.....H..H..H.. .|
00000360: 00 00 48 89  03 48 89 ДБ  48 81 ДБ 10  00 00 00 48  |..H..H..H......H|
00000370: 8Б 03 50 48  В7 В0 01 00  00 00 5Б 48  01 Г8 48 89  |..PH......[H..H.|
00000380: ДБ 48 81 ДБ  10 00 00 00  48 89 03 Д9  Е3 ЕД ЕЕ ЕЕ  |.H......H.......|
00000390: 48 89 ДБ 48  81 ДБ 18 00  00 00 48 8Б  03 48 89 ДВ  |H..H......H..H..|
000003А0: 5Г В3 55 48  89 Д5 48 81  ДВ 20 00 00  00 68 7Г 00  |].UH..H.. ...h}.|
000003Б0: 01 00 Д8 89  ЕГ ЕЕ ЕЕ 48  81 В4 08 00  00 00 48 В7  |.......H......H.|
000003В0: В0 96 00 00  00 48 89 ДБ  48 81 ДБ 18  00 00 00 48  |.....H..H......H|
000003Г0: 89 03 48 В7  В0 02 00 00  00 48 89 ДБ  48 81 ДБ 20  |..H......H..H.. |
000003Д0: 00 00 00 48  89 03 48 89  ДБ 48 81 ДБ  20 00 00 00  |...H..H..H.. ...|
000003Е0: 48 8Б 03 50  48 89 ДБ 48  81 ДБ 18 00  00 00 48 8Б  |H..PH..H......H.|
00000400: 03 5Б 48 29  В3 0Е 8Г 88  00 00 00 48  89 ДБ 48 81  |.[H).......H..H.|
00000410: ДБ 20 00 00  00 48 8Б 03  50 Д8 18 ЕД  ЕЕ ЕЕ 48 81  |. ...H..P.....H.|
00000420: В4 08 00 00  00 48 89 ДБ  48 81 ДБ 10  00 00 00 48  |.....H..H......H|
00000430: 89 03 48 89  ДБ 48 81 ДБ  10 00 00 00  48 8Б 03 50  |..H..H......H..P|
00000440: 5Б 48 81 ДБ  01 00 00 00  0Е 85 1А 00  00 00 48 89  |[H............H.|
00000450: ДБ 48 81 ДБ  20 00 00 00  48 8Б 03 50  Д8 0А ЕГ ЕЕ  |.H.. ...H..P....|
00000460: ЕЕ 48 81 В4  08 00 00 00  48 89 ДБ 48  81 ДБ 20 00  |.H......H..H.. .|
00000470: 00 00 48 8Б  03 50 48 В7  В0 01 00 00  00 5Б 48 01  |..H..PH......[H.|
00000480: Г8 48 89 ДБ  48 81 ДБ 20  00 00 00 48  89 03 Д9 53  |.H..H.. ...H...S|
00000490: ЕЕ ЕЕ ЕЕ 68  00 01 01 00  Д8 А3 ЕВ ЕЕ  ЕЕ 48 81 В4  |...h.........H..|
000004А0: 08 00 00 00  48 89 ДВ 5Г  48 В7 В0 3В  00 00 00 48  |....H..]H..<...H|
000004Б0: 31 ЕЕ 0Е 05                                         |1...|
000004Б4:

Вывод программы:

Код:
Следующий шаг: получение результата вызова функции, аргументы функции
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
101
103
107
109
113
127
131
137
139
149
Выход.

0

21

Читаем данные из файла

input.rcx:

Код:
ФункцияДлиныСтроки {асм("
    ; [РФ + 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ш8] - переменная

    Копировать РБ, [РФ + 0ш10]
    Копировать РЧ, 1
    Копировать РИ, 0ш0а ; код перехода на новую строку в конце строки

Цикл2:
    Копировать РА, 0 ; sum_quotient = 0

    Втолкнуть РБ         ; 
Цикл:
    Вытолкнуть РБ           ; восстанавливаем остаток
Цикл3:
    Копировать РД, РБ       ; 
    БитИ РБ, 7              ; остаток от деления на 8
    СдвинутьВправоАрифметический РД, 3    ; делим на 8 ; quotient

    Увеличить РА, РД       ; sum += quotient
    СдвинутьВлево РД, 1     ; quotient * 2
    Уменьшить РБ, РД
    ПерейтиЕслиМеньше Цикл3
    Втолкнуть РБ         ; сохраняем остаток
    Уменьшить РБ, 9
    ПерейтиЕслиБольше Цикл

    Копировать РБ, РА        ; целая часть в РБ
    Вытолкнуть РА           ; восстанавливаем остаток 

    ; РА - остаток, РБ - целое, РД - часть для деления(поправка)

    БитИли РА, 0ш30

    ; сохраняем остаток в байте

    БитИ РА, 0шЕ
    БитИли РА, 0ш30
    СдвинутьВлево РИ, 8
    БитИли РИ, РА
    Увеличить1 РЧ

    Копировать РА, 0
    БитИли РА, РД
    ПерейтиЕслиНе0В Цикл2

    ; проверяем на последний 0 
    Копировать РН, РИ
    Уменьшить РН, 0ш0А30
    ПерейтиЕсли0В Сюда2

    Копировать РН, РИ
    БитИ РН, 15
    ПерейтиЕслиНе0В Сюда2
    СдвинутьВправо РИ, 8
    Уменьшить1 РЧ

Сюда2:    
    ; новая строка

    Втолкнуть РИ

    Копировать РД, РЧ      ; длина строки
    Копировать РИ, РС      ; указатель на строку
    Копировать РА, 1       ; системная команда 'запись файла'
    Копировать РН, РА      ; 1 - консоль
    ВызватьСистему

    Вытолкнуть РИ

    Вытолкнуть РА
    Вытолкнуть РБ
    Вытолкнуть РД
")}

;* -------------------------------------------
    Возвращает:
        1 - если проверяемое число - простое
        0 - составное число
-------------------------------------------- *;
ПроверкаПростоты(Целое проверяемое) {
    Целое прибавка = 2
    Целое число

    Пока прибавка < проверяемое {
        число = 0

        Пока число < проверяемое {
            число = число + прибавка
        } 

        Если число = проверяемое {
            Вернуть 0
        }

        прибавка = прибавка + 1
    } 

    Вернуть 1
}

ФайлЧитать() {
    Целое буфер
асм("
    ; [РФ + 0ш10] - описатель файла
    ; --------------------------------
    ; [РФ - 0ш8] - буфер
    ; --------------------------------

    ; -------------------------------
    Копировать РА, 0              ; системная команда 'чтение из файла'
    Копировать РН, [РФ + 0ш10]    ; описатель файла

    Копировать РБ, РФ             ; формируем указатель буфера
    Уменьшить РБ, 8 
    Копировать РИ, РБ             ; указатель на буфер

    Копировать РД, 2              ; размер буфера в байтах
    ВызватьСистему
    ; -------------------------------
")
    Вернуть буфер
}


ФайлОткрыть {асм("
    ; [РФ + 0ш10] - указатель на строку
    ; --------------------------------
    Копировать РА, 0ш747874 ; 0ш74, 0ш78, 0ш74, 0 : file txt, пока жестко задается
    Втолкнуть РА

    Копировать РА, 2              ; системная команда 'открыть файл'
    Копировать РН, РС ;[РФ + 0ш10]    ; путь к файлу(указатель на строку)
    Копировать РИ, 0              ; опции : ТОЛЬКО_ЧТЕНИЕ
    Копировать РД, 0ш1ЕВ          ; режим : 0774
    ВызватьСистему

    Вытолкнуть РБ
")}

ФайлЗакрыть(Целое ОписательФайла) {асм("
    ; [РФ + 0ш10] - описатель файла
    ; --------------------------------

    Копировать РА, 3              ; системная команда 'закрыть файл'
    Копировать РН, [РФ + 0ш10]    ; описатель файла (ИД)
    ВызватьСистему
")}

;* -------------------------------------------
    Начало - точка входа программы
-------------------------------------------- *;
Начало {
    ФункцияВывода("Следующий шаг: открытие, чтение, закрытие файла")

    Целое ИДфайла = ФайлОткрыть() ; "txt")

    Целое число = 2                    ; первое число с которого ведется поиск
    Целое последнее = 100 + число      ; верхний предел поиска

    Если ИДфайла > 0 {
        ФункцияВывода("Описатель файла:")
        ВыводЧисла(ИДфайла)

        число = ФайлЧитать(ИДфайла)
        последнее = 200 + число     ; верхний предел поиска

        ФункцияВывода("----------------------------------------")
        ФункцияВывода("Начинаем поиск простых чисел с числа:")
        ВыводЧисла(число)
        ФункцияВывода("до")
        ВыводЧисла(последнее)
        ФункцияВывода("----------------------------------------")

        Пока число < последнее {
            Если ПроверкаПростоты(число) = 1 {
                ВыводЧисла(число)
            }
            число = число + 1
        } 

        ФайлЗакрыть(ИДфайла)
    }

    ФункцияВывода("Выход.")
}

input.rax:

Код:
.Байт 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шБД, 0шГ1, 0ш82, 0шГ0, 0шБА, 0шГ1, 0ш80, 0шГ1, 0ш8Б, 0шГ1, 0ш82, 0шГ0, 0шБ8, 0шГ0, 0шБ5, 0ш2В, 0ш20, 0шГ1, 0ш87, 0шГ1, 0ш82, 0шГ0, 0шБ5, 0шГ0, 0шБГ, 0шГ0, 0шБ8, 0шГ0, 0шБ5, 0ш2В, 0ш20, 0шГ0, 0шБ7, 0шГ0, 0шБ0, 0шГ0, 0шБА, 0шГ1, 0ш80, 0шГ1, 0ш8Б, 0шГ1, 0ш82, 0шГ0, 0шБ8, 0шГ0, 0шБ5, 0ш20, 0шГ1, 0ш84, 0шГ0, 0шБ0, 0шГ0, 0шБ9, 0шГ0, 0шББ, 0шГ0, 0шБ0, 0ш0А, 0
С8: .Байт 0шГ0, 0ш9Д, 0шГ0, 0шБЕ, 0шГ0, 0шБ8, 0шГ1, 0ш81, 0шГ0, 0шБ0, 0шГ1, 0ш82, 0шГ0, 0шБ5, 0шГ0, 0шББ, 0шГ1, 0ш8В, 0ш20, 0шГ1, 0ш84, 0шГ0, 0шБ0, 0шГ0, 0шБ9, 0шГ0, 0шББ, 0шГ0, 0шБ0, 0ш3А, 0ш0А, 0
С9: .Байт 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш0А, 0
С10: .Байт 0шГ0, 0ш9Г, 0шГ0, 0шБ0, 0шГ1, 0ш87, 0шГ0, 0шБ8, 0шГ0, 0шБГ, 0шГ0, 0шБ0, 0шГ0, 0шБ5, 0шГ0, 0шБВ, 0ш20, 0шГ0, 0шБЕ, 0шГ0, 0шБД, 0шГ0, 0шБ8, 0шГ1, 0ш81, 0шГ0, 0шБА, 0ш20, 0шГ0, 0шБЕ, 0шГ1, 0ш80, 0шГ0, 0шБД, 0шГ1, 0ш81, 0шГ1, 0ш82, 0шГ1, 0ш8Б, 0шГ1, 0ш85, 0ш20, 0шГ1, 0ш87, 0шГ0, 0шБ8, 0шГ1, 0ш81, 0шГ0, 0шБ5, 0шГ0, 0шББ, 0ш20, 0шГ1, 0ш81, 0ш20, 0шГ1, 0ш87, 0шГ0, 0шБ8, 0шГ1, 0ш81, 0шГ0, 0шББ, 0шГ0, 0шБ0, 0ш3А, 0ш0А, 0
С11: .Байт 0шГ0, 0шБ4, 0шГ0, 0шБД, 0ш0А, 0
С12: .Байт 0шГ0, 0ш92, 0шГ1, 0ш8Б, 0шГ1, 0ш85, 0шГ0, 0шБД, 0шГ0, 0шБ4, 0ш2Д, 0ш0А, 0
; -------------------------------------------------------------------------------------
        ФункцияДлиныСтроки:
; -------------------------------------------------------------------------------------
    ; пролог
    Втолкнуть РФ
    Копировать РФ, РС


    ; [РФ + 0ш10] - указатель на строку
    ; --------------------------------

    Копировать РЧ, 0
    Копировать РИ, [РФ + 0ш10]
    Уменьшить1 РИ
    Уменьшить1 РЧ
ЦИКЛ2:
    Увеличить1 РИ
    Увеличить1 РЧ
    Копировать РА, [РИ]
    БитИ РА, 0шЕЕ
    ПерейтиЕслиНе0В ЦИКЛ2
    Копировать РА, РЧ

М1:
    ; эпилог
    Копировать РС, РФ
    Вытолкнуть РФ
    Назад

; -------------------------------------------------------------------------------------
        ФункцияВывода:
; -------------------------------------------------------------------------------------
    ; пролог
    Втолкнуть РФ
    Копировать РФ, РС


    ; [РФ + 0ш10] - указатель на строку
    ; --------------------------------

    ; считаем длину строки
    Втолкнуть [РФ + 0ш10]                 
    Вызвать ФункцияДлиныСтроки
    Увеличить РС, 0ш08
    Копировать РД, РА  ; длина строки

    Копировать РА, 1              ; системная команда 'запись файла'
    Копировать РН, РА             ; 1 - консоль
    Копировать РИ, [РФ + 0ш10]    ; указатель на строку
    ВызватьСистему

М2:
    ; эпилог
    Копировать РС, РФ
    Вытолкнуть РФ
    Назад

; -------------------------------------------------------------------------------------
        ВыводЧисла:
; -------------------------------------------------------------------------------------
    ; пролог
    Втолкнуть РФ
    Копировать РФ, РС


    ; [РФ + 0ш10] - число
    ; --------------------------------
    Втолкнуть РД
    Втолкнуть РБ
    Втолкнуть РА

    Уменьшить РС, 0ш40
    ; [РФ - 0ш8] - переменная

    Копировать РБ, [РФ + 0ш10]
    Копировать РЧ, 1
    Копировать РИ, 0ш0а ; код перехода на новую строку в конце строки

Цикл2:
    Копировать РА, 0 ; sum_quotient = 0

    Втолкнуть РБ         ; 
Цикл:
    Вытолкнуть РБ           ; восстанавливаем остаток
Цикл3:
    Копировать РД, РБ       ; 
    БитИ РБ, 7              ; остаток от деления на 8
    СдвинутьВправоАрифметический РД, 3    ; делим на 8 ; quotient

    Увеличить РА, РД       ; sum += quotient
    СдвинутьВлево РД, 1     ; quotient * 2
    Уменьшить РБ, РД
    ПерейтиЕслиМеньше Цикл3
    Втолкнуть РБ         ; сохраняем остаток
    Уменьшить РБ, 9
    ПерейтиЕслиБольше Цикл

    Копировать РБ, РА        ; целая часть в РБ
    Вытолкнуть РА           ; восстанавливаем остаток 

    ; РА - остаток, РБ - целое, РД - часть для деления(поправка)

    БитИли РА, 0ш30

    ; сохраняем остаток в байте

    БитИ РА, 0шЕ
    БитИли РА, 0ш30
    СдвинутьВлево РИ, 8
    БитИли РИ, РА
    Увеличить1 РЧ

    Копировать РА, 0
    БитИли РА, РД
    ПерейтиЕслиНе0В Цикл2

    ; проверяем на последний 0 
    Копировать РН, РИ
    Уменьшить РН, 0ш0А30
    ПерейтиЕсли0В Сюда2

    Копировать РН, РИ
    БитИ РН, 15
    ПерейтиЕслиНе0В Сюда2
    СдвинутьВправо РИ, 8
    Уменьшить1 РЧ

Сюда2:    
    ; новая строка

    Втолкнуть РИ

    Копировать РД, РЧ      ; длина строки
    Копировать РИ, РС      ; указатель на строку
    Копировать РА, 1       ; системная команда 'запись файла'
    Копировать РН, РА      ; 1 - консоль
    ВызватьСистему

    Вытолкнуть РИ

    Вытолкнуть РА
    Вытолкнуть РБ
    Вытолкнуть РД

М3:
    ; эпилог
    Копировать РС, РФ
    Вытолкнуть РФ
    Назад

; -------------------------------------------------------------------------------------
        ПроверкаПростоты:
; -------------------------------------------------------------------------------------
    ; пролог
    Втолкнуть РФ
    Копировать РФ, РС
    Уменьшить РС, 24

    Копировать РБ, РФ
    Увеличить РБ, 16
    Копировать РА, [РБ]

    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать [РБ], РА

    Копировать РА, 2
    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать [РБ], РА

М5:
    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать РА, [РБ]
    Вытолкнуть РБ
    Уменьшить РБ, РА
    ПерейтиЕслиБольшеИлиРавно М6

    Копировать РА, 0
    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать [РБ], РА

М7:
    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать РА, [РБ]
    Вытолкнуть РБ
    Уменьшить РБ, РА
    ПерейтиЕслиБольшеИлиРавно М8

    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать РА, [РБ]
    Вытолкнуть РБ
    Увеличить РА, РБ
    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать [РБ], РА

    Перейти М7
М8:
    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать РА, [РБ]
    Вытолкнуть РБ
    Уменьшить РБ, РА
    ПерейтиЕслиНе0 М9

    Копировать РА, 0
    ПерейтиВ М4

М9:
    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РА, 1
    Вытолкнуть РБ
    Увеличить РА, РБ
    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать [РБ], РА

    Перейти М5
М6:
    Копировать РА, 1
    ПерейтиВ М4

М4:
    ; эпилог
    Копировать РС, РФ
    Вытолкнуть РФ
    Назад

; -------------------------------------------------------------------------------------
        ФайлЧитать:
; -------------------------------------------------------------------------------------
    ; пролог
    Втолкнуть РФ
    Копировать РФ, РС
    Уменьшить РС, 8


    ; [РФ + 0ш10] - описатель файла
    ; --------------------------------
    ; [РФ - 0ш8] - буфер
    ; --------------------------------

    ; -------------------------------
    Копировать РА, 0              ; системная команда 'чтение из файла'
    Копировать РН, [РФ + 0ш10]    ; описатель файла

    Копировать РБ, РФ             ; формируем указатель буфера
    Уменьшить РБ, 8 
    Копировать РИ, РБ             ; указатель на буфер

    Копировать РД, 2              ; размер буфера в байтах
    ВызватьСистему
    ; -------------------------------

    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать РА, [РБ]
    ПерейтиВ М11

М11:
    ; эпилог
    Копировать РС, РФ
    Вытолкнуть РФ
    Назад

; -------------------------------------------------------------------------------------
        ФайлОткрыть:
; -------------------------------------------------------------------------------------
    ; пролог
    Втолкнуть РФ
    Копировать РФ, РС


    ; [РФ + 0ш10] - указатель на строку
    ; --------------------------------
    Копировать РА, 0ш747874 ; 0ш74, 0ш78, 0ш74, 0 : file txt, пока жестко задается
    Втолкнуть РА

    Копировать РА, 2              ; системная команда 'открыть файл'
    Копировать РН, РС ;[РФ + 0ш10]    ; путь к файлу(указатель на строку)
    Копировать РИ, 0              ; опции : ТОЛЬКО_ЧТЕНИЕ
    Копировать РД, 0ш1ЕВ          ; режим : 0774
    ВызватьСистему

    Вытолкнуть РБ

М12:
    ; эпилог
    Копировать РС, РФ
    Вытолкнуть РФ
    Назад

; -------------------------------------------------------------------------------------
        ФайлЗакрыть:
; -------------------------------------------------------------------------------------
    ; пролог
    Втолкнуть РФ
    Копировать РФ, РС
    Уменьшить РС, 8

    Копировать РБ, РФ
    Увеличить РБ, 16
    Копировать РА, [РБ]

    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать [РБ], РА


    ; [РФ + 0ш10] - описатель файла
    ; --------------------------------

    Копировать РА, 3              ; системная команда 'закрыть файл'
    Копировать РН, [РФ + 0ш10]    ; описатель файла (ИД)
    ВызватьСистему

М13:
    ; эпилог
    Копировать РС, РФ
    Вытолкнуть РФ
    Назад

; -------------------------------------------------------------------------------------
        Начало:
; -------------------------------------------------------------------------------------
    ; пролог
    Втолкнуть РФ
    Копировать РФ, РС
    Уменьшить РС, 24

    Втолкнуть С7
    Вызвать ФункцияВывода
    Увеличить РС, 0ш8

    Вызвать ФайлОткрыть

    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать [РБ], РА

    Копировать РА, 2
    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать [РБ], РА

    Копировать РА, 100
    Втолкнуть РА
    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать РА, [РБ]
    Вытолкнуть РБ
    Увеличить РА, РБ
    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать [РБ], РА

    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать РА, [РБ]
    Втолкнуть РА
    Вытолкнуть РБ
    Уменьшить РБ, 0

    ПерейтиЕслиМеньшеИлиРавно М14

    Втолкнуть С8
    Вызвать ФункцияВывода
    Увеличить РС, 0ш8

    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать РА, [РБ]
    Втолкнуть РА
    Вызвать ВыводЧисла
    Увеличить РС, 0ш8

    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать РА, [РБ]
    Втолкнуть РА
    Вызвать ФайлЧитать
    Увеличить РС, 0ш8

    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать [РБ], РА

    Копировать РА, 200
    Втолкнуть РА
    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать РА, [РБ]
    Вытолкнуть РБ
    Увеличить РА, РБ
    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать [РБ], РА

    Втолкнуть С9
    Вызвать ФункцияВывода
    Увеличить РС, 0ш8

    Втолкнуть С10
    Вызвать ФункцияВывода
    Увеличить РС, 0ш8

    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать РА, [РБ]
    Втолкнуть РА
    Вызвать ВыводЧисла
    Увеличить РС, 0ш8

    Втолкнуть С11
    Вызвать ФункцияВывода
    Увеличить РС, 0ш8

    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать РА, [РБ]
    Втолкнуть РА
    Вызвать ВыводЧисла
    Увеличить РС, 0ш8

    Втолкнуть С9
    Вызвать ФункцияВывода
    Увеличить РС, 0ш8

М16:
    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать РА, [РБ]
    Вытолкнуть РБ
    Уменьшить РБ, РА
    ПерейтиЕслиБольшеИлиРавно М17

    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать РА, [РБ]
    Втолкнуть РА
    Вызвать ПроверкаПростоты
    Увеличить РС, 0ш8

    Втолкнуть РА
    Вытолкнуть РБ
    Уменьшить РБ, 1

    ПерейтиЕслиНе0 М18

    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать РА, [РБ]
    Втолкнуть РА
    Вызвать ВыводЧисла
    Увеличить РС, 0ш8

М18:
    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РА, 1
    Вытолкнуть РБ
    Увеличить РА, РБ
    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать [РБ], РА

    Перейти М16
М17:
    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать РА, [РБ]
    Втолкнуть РА
    Вызвать ФайлЗакрыть
    Увеличить РС, 0ш8

М14:
    Втолкнуть С12
    Вызвать ФункцияВывода
    Увеличить РС, 0ш8


    ; эпилог
    Копировать РС, РФ
    Вытолкнуть РФ

    ; выход
    Копировать РА, 0ш3В           ;  системная команда - 'выход'
    БитИсключающееИли РН, РН    ;  результат программы
    ВызватьСистему

rex:

Код:
./rex ./output.bin
00000000: 7Е 45 4В 46  02 01 01 00  00 00 00 00  00 00 00 00  |.ELF............|
00000010: 02 00 3Д 00  01 00 00 00  78 00 01 00  00 00 00 00  |..>.....x.......|
00000020: 40 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  |@...............|
00000030: 00 00 00 00  40 00 38 00  01 00 00 00  00 00 00 00  |....@.8.........|
00000040: 01 00 00 00  05 00 00 00  78 00 00 00  00 00 00 00  |........x.......|
00000050: 78 00 01 00  00 00 00 00  78 00 01 00  00 00 00 00  |x.......x.......|
00000060: 38 00 00 00  00 00 00 00  38 00 00 00  00 00 00 00  |8.......8.......|
00000070: 10 00 00 00  00 00 00 00  Д9 ЕЕ 03 00  00 Г0 А1 Г0  |................|
00000080: ББ Г0 Б5 Г0  Б4 Г1 83 Г1  8Д Г1 89 Г0  Б8 Г0 Б9 20  |............... |
00000090: Г1 88 Г0 Б0  Г0 Б3 3А 20  Г0 БД Г1 82  Г0 БА Г1 80  |......: ........|
000000А0: Г1 8Б Г1 82  Г0 Б8 Г0 Б5  2В 20 Г1 87  Г1 82 Г0 Б5  |........, ......|
000000Б0: Г0 БГ Г0 Б8  Г0 Б5 2В 20  Г0 Б7 Г0 Б0  Г0 БА Г1 80  |......, ........|
000000В0: Г1 8Б Г1 82  Г0 Б8 Г0 Б5  20 Г1 84 Г0  Б0 Г0 Б9 Г0  |........ .......|
000000Г0: ББ Г0 Б0 0А  00 Г0 9Д Г0  БЕ Г0 Б8 Г1  81 Г0 Б0 Г1  |................|
000000Д0: 82 Г0 Б5 Г0  ББ Г1 8В 20  Г1 84 Г0 Б0  Г0 Б9 Г0 ББ  |....... ........|
000000Е0: Г0 Б0 3А 0А  00 2Г 2Г 2Г  2Г 2Г 2Г 2Г  2Г 2Г 2Г 2Г  |..:..-----------|
00000100: 2Г 2Г 2Г 2Г  2Г 2Г 2Г 2Г  2Г 2Г 2Г 2Г  2Г 2Г 2Г 2Г  |----------------|
00000110: 2Г 2Г 2Г 2Г  2Г 2Г 2Г 2Г  2Г 2Г 2Г 2Г  2Г 0А 00 Г0  |-------------...|
00000120: 9Г Г0 Б0 Г1  87 Г0 Б8 Г0  БГ Г0 Б0 Г0  Б5 Г0 БВ 20  |............... |
00000130: Г0 БЕ Г0 БД  Г0 Б8 Г1 81  Г0 БА 20 Г0  БЕ Г1 80 Г0  |.......... .....|
00000140: БД Г1 81 Г1  82 Г1 8Б Г1  85 20 Г1 87  Г0 Б8 Г1 81  |......... ......|
00000150: Г0 Б5 Г0 ББ  20 Г1 81 20  Г1 87 Г0 Б8  Г1 81 Г0 ББ  |.... .. ........|
00000160: Г0 Б0 3А 0А  00 Г0 Б4 Г0  БД 0А 00 Г0  92 Г1 8Б Г1  |..:.............|
00000170: 85 Г0 БД Г0  Б4 2Д 0А 00  55 48 89 Д5  48 В7 В1 00  |........UH..H...|
00000180: 00 00 00 48  8Б 75 10 48  ЕЕ ВД 48 ЕЕ  В9 48 ЕЕ В6  |...H.u.H..H..H..|
00000190: 48 ЕЕ В1 48  8Б 06 48 81  Д0 ЕЕ 00 00  00 0Е 85 ДА  |H..H..H.........|
000001А0: ЕЕ ЕЕ ЕЕ 48  89 В8 48 89  ДВ 5Г В3 55  48 89 Д5 ЕЕ  |...H..H..].UH...|
000001Б0: 75 10 Д8 В1  ЕЕ ЕЕ ЕЕ 48  81 В4 08 00  00 00 48 89  |u......H......H.|
000001В0: В2 48 В7 В0  01 00 00 00  48 89 В7 48  8Б 75 10 0Е  |.H......H..H.u..|
000001Г0: 05 48 89 ДВ  5Г В3 55 48  89 Д5 52 53  50 48 81 ДВ  |.H..].UH..RSPH..|
000001Д0: 40 00 00 00  48 8Б 5Г 10  48 В7 В1 01  00 00 00 48  |@...H.].H......H|
000001Е0: В7 В6 0А 00  00 00 48 В7  В0 00 00 00  00 53 5Б 48  |......H......S[H|
00000200: 89 ГА 48 81  Д3 07 00 00  00 48 В1 ЕА  03 48 01 Г0  |..H......H...H..|
00000210: 48 В1 Д2 01  48 29 Г3 0Е  8В Д2 ЕЕ ЕЕ  ЕЕ 53 48 81  |H...H).......SH.|
00000220: ДБ 09 00 00  00 0Е 8Е Г3  ЕЕ ЕЕ ЕЕ 48  89 В3 58 48  |...........H..XH|
00000230: 81 В8 30 00  00 00 48 81  Д0 0Е 00 00  00 48 81 В8  |..0...H......H..|
00000240: 30 00 00 00  48 В1 Д6 08  48 09 В6 48  ЕЕ В1 48 В7  |0...H...H..H..H.|
00000250: В0 00 00 00  00 48 09 Г0  0Е 85 98 ЕЕ  ЕЕ ЕЕ 48 89  |.....H........H.|
00000260: Е7 48 81 ДЕ  30 0А 00 00  0Е 84 17 00  00 00 48 89  |.H..0.........H.|
00000270: Е7 48 81 Д7  0Е 00 00 00  0Е 85 07 00  00 00 48 В1  |.H............H.|
00000280: ДД 08 48 ЕЕ  В9 56 48 89  ВА 48 89 Д6  48 В7 В0 01  |..H..VH..H..H...|
00000290: 00 00 00 48  89 В7 0Е 05  5Д 58 5Б 5А  48 89 ДВ 5Г  |...H....^X[ZH..]|
000002А0: В3 55 48 89  Д5 48 81 ДВ  18 00 00 00  48 89 ДБ 48  |.UH..H......H..H|
000002Б0: 81 В3 10 00  00 00 48 8Б  03 48 89 ДБ  48 81 ДБ 08  |......H..H..H...|
000002В0: 00 00 00 48  89 03 48 В7  В0 02 00 00  00 48 89 ДБ  |...H..H......H..|
000002Г0: 48 81 ДБ 10  00 00 00 48  89 03 48 89  ДБ 48 81 ДБ  |H......H..H..H..|
000002Д0: 10 00 00 00  48 8Б 03 50  48 89 ДБ 48  81 ДБ 08 00  |....H..PH..H....|
000002Е0: 00 00 48 8Б  03 5Б 48 29  В3 0Е 8Г В6  00 00 00 48  |..H..[H).......H|
00000300: В7 В0 00 00  00 00 48 89  ДБ 48 81 ДБ  18 00 00 00  |......H..H......|
00000310: 48 89 03 48  89 ДБ 48 81  ДБ 18 00 00  00 48 8Б 03  |H..H..H......H..|
00000320: 50 48 89 ДБ  48 81 ДБ 08  00 00 00 48  8Б 03 5Б 48  |PH..H......H..[H|
00000330: 29 В3 0Е 8Г  31 00 00 00  48 89 ДБ 48  81 ДБ 18 00  |)...1...H..H....|
00000340: 00 00 48 8Б  03 50 48 89  ДБ 48 81 ДБ  10 00 00 00  |..H..PH..H......|
00000350: 48 8Б 03 5Б  48 01 Г8 48  89 ДБ 48 81  ДБ 18 00 00  |H..[H..H..H.....|
00000360: 00 48 89 03  Д9 АА ЕЕ ЕЕ  ЕЕ 48 89 ДБ  48 81 ДБ 18  |.H.......H..H...|
00000370: 00 00 00 48  8Б 03 50 48  89 ДБ 48 81  ДБ 08 00 00  |...H..PH..H.....|
00000380: 00 48 8Б 03  5Б 48 29 В3  0Е 85 0В 00  00 00 48 В7  |.H..[H).......H.|
00000390: В0 00 00 00  00 Д9 37 00  00 00 48 89  ДБ 48 81 ДБ  |......7...H..H..|
000003А0: 10 00 00 00  48 8Б 03 50  48 В7 В0 01  00 00 00 5Б  |....H..PH......[|
000003Б0: 48 01 Г8 48  89 ДБ 48 81  ДБ 10 00 00  00 48 89 03  |H..H..H......H..|
000003В0: Д9 15 ЕЕ ЕЕ  ЕЕ 48 В7 В0  01 00 00 00  Д9 00 00 00  |.....H..........|
000003Г0: 00 48 89 ДВ  5Г В3 55 48  89 Д5 48 81  ДВ 08 00 00  |.H..].UH..H.....|
000003Д0: 00 48 В7 В0  00 00 00 00  48 8Б 7Г 10  48 89 ДБ 48  |.H......H.}.H..H|
000003Е0: 81 ДБ 08 00  00 00 48 89  ГД 48 В7 В2  02 00 00 00  |......H..H......|
00000400: 0Е 05 48 89  ДБ 48 81 ДБ  08 00 00 00  48 8Б 03 Д9  |..H..H......H...|
00000410: 00 00 00 00  48 89 ДВ 5Г  В3 55 48 89  Д5 48 В7 В0  |....H..].UH..H..|
00000420: 74 78 74 00  50 48 В7 В0  02 00 00 00  48 89 Д7 48  |txt.PH......H..H|
00000430: В7 В6 00 00  00 00 48 В7  В2 ЕВ 01 00  00 0Е 05 5Б  |......H........[|
00000440: 48 89 ДВ 5Г  В3 55 48 89  Д5 48 81 ДВ  08 00 00 00  |H..].UH..H......|
00000450: 48 89 ДБ 48  81 В3 10 00  00 00 48 8Б  03 48 89 ДБ  |H..H......H..H..|
00000460: 48 81 ДБ 08  00 00 00 48  89 03 48 В7  В0 03 00 00  |H......H..H.....|
00000470: 00 48 8Б 7Г  10 0Е 05 48  89 ДВ 5Г В3  55 48 89 Д5  |.H.}...H..].UH..|
00000480: 48 81 ДВ 18  00 00 00 68  7Г 00 01 00  Д8 1А ЕГ ЕЕ  |H......h}.......|
00000490: ЕЕ 48 81 В4  08 00 00 00  Д8 7В ЕЕ ЕЕ  ЕЕ 48 89 ДБ  |.H.......|...H..|
000004А0: 48 81 ДБ 08  00 00 00 48  89 03 48 В7  В0 02 00 00  |H......H..H.....|
000004Б0: 00 48 89 ДБ  48 81 ДБ 10  00 00 00 48  89 03 48 В7  |.H..H......H..H.|
000004В0: В0 64 00 00  00 50 48 89  ДБ 48 81 ДБ  10 00 00 00  |.d...PH..H......|
000004Г0: 48 8Б 03 5Б  48 01 Г8 48  89 ДБ 48 81  ДБ 18 00 00  |H..[H..H..H.....|
000004Д0: 00 48 89 03  48 89 ДБ 48  81 ДБ 08 00  00 00 48 8Б  |.H..H..H......H.|
000004Е0: 03 50 5Б 48  81 ДБ 00 00  00 00 0Е 8Д  9Г 01 00 00  |.P[H............|
00000500: 68 Г5 00 01  00 Д8 А1 ЕВ  ЕЕ ЕЕ 48 81  В4 08 00 00  |h.........H.....|
00000510: 00 48 89 ДБ  48 81 ДБ 08  00 00 00 48  8Б 03 50 Д8  |.H..H......H..P.|
00000520: Б2 ЕВ ЕЕ ЕЕ  48 81 В4 08  00 00 00 48  89 ДБ 48 81  |....H......H..H.|
00000530: ДБ 08 00 00  00 48 8Б 03  50 Д8 98 ЕД  ЕЕ ЕЕ 48 81  |.....H..P.....H.|
00000540: В4 08 00 00  00 48 89 ДБ  48 81 ДБ 10  00 00 00 48  |.....H..H......H|
00000550: 89 03 48 В7  В0 В8 00 00  00 50 48 89  ДБ 48 81 ДБ  |..H......PH..H..|
00000560: 10 00 00 00  48 8Б 03 5Б  48 01 Г8 48  89 ДБ 48 81  |....H..[H..H..H.|
00000570: ДБ 18 00 00  00 48 89 03  68 Е5 00 01  00 Д8 29 ЕВ  |.....H..h.....).|
00000580: ЕЕ ЕЕ 48 81  В4 08 00 00  00 68 1Е 01  01 00 Д8 18  |..H......h......|
00000590: ЕВ ЕЕ ЕЕ 48  81 В4 08 00  00 00 48 89  ДБ 48 81 ДБ  |...H......H..H..|
000005А0: 10 00 00 00  48 8Б 03 50  Д8 29 ЕВ ЕЕ  ЕЕ 48 81 В4  |....H..P.)...H..|
000005Б0: 08 00 00 00  68 65 01 01  00 Д8 ДГ ЕБ  ЕЕ ЕЕ 48 81  |....he........H.|
000005В0: В4 08 00 00  00 48 89 ДБ  48 81 ДБ 18  00 00 00 48  |.....H..H......H|
000005Г0: 8Б 03 50 Д8  ЕД ЕБ ЕЕ ЕЕ  48 81 В4 08  00 00 00 68  |..P.....H......h|
000005Д0: Е5 00 01 00  Д8 В2 ЕБ ЕЕ  ЕЕ 48 81 В4  08 00 00 00  |.........H......|
000005Е0: 48 89 ДБ 48  81 ДБ 10 00  00 00 48 8Б  03 50 48 89  |H..H......H..PH.|
00000600: ДБ 48 81 ДБ  18 00 00 00  48 8Б 03 5Б  48 29 В3 0Е  |.H......H..[H)..|
00000610: 8Г 6Д 00 00  00 48 89 ДБ  48 81 ДБ 10  00 00 00 48  |.n...H..H......H|
00000620: 8Б 03 50 Д8  79 ЕВ ЕЕ ЕЕ  48 81 В4 08  00 00 00 50  |..P.y...H......P|
00000630: 5Б 48 81 ДБ  01 00 00 00  0Е 85 1А 00  00 00 48 89  |[H............H.|
00000640: ДБ 48 81 ДБ  10 00 00 00  48 8Б 03 50  Д8 85 ЕБ ЕЕ  |.H......H..P....|
00000650: ЕЕ 48 81 В4  08 00 00 00  48 89 ДБ 48  81 ДБ 10 00  |.H......H..H....|
00000660: 00 00 48 8Б  03 50 48 В7  В0 01 00 00  00 5Б 48 01  |..H..PH......[H.|
00000670: Г8 48 89 ДБ  48 81 ДБ 10  00 00 00 48  89 03 Д9 6Г  |.H..H......H...m|
00000680: ЕЕ ЕЕ ЕЕ 48  89 ДБ 48 81  ДБ 08 00 00  00 48 8Б 03  |...H..H......H..|
00000690: 50 Д8 АЕ ЕГ  ЕЕ ЕЕ 48 81  В4 08 00 00  00 68 6Б 01  |P.....H......hk.|
000006А0: 01 00 Д8 04  ЕБ ЕЕ ЕЕ 48  81 В4 08 00  00 00 48 89  |.......H......H.|
000006Б0: ДВ 5Г 48 В7  В0 3В 00 00  00 48 31 ЕЕ  0Е 05        |.]H..<...H1...|
000006БД:

Вывод программы:

Код:
Следующий шаг: открытие, чтение, закрытие файла
Описатель файла:
3
----------------------------------------
Начинаем поиск простых чисел с числа:
2000
до
2200
----------------------------------------
2003
2011
2017
2027
2029
2039
2053
2063
2069
2081
2083
2087
2089
2099
2111
2113
2129
2131
2137
2141
2143
2153
2161
2179
Выход.

файл txt:

Код:
./rex txt 
00000000: Г0 07 00 00  00 00 00 00  00 00 00                  |...........|
0000000Б:

0

22

Передаем несколько аргументов функции.
input.rcx:

Код:
;* -------------------------------------------
    Начало - точка входа программы
-------------------------------------------- *;

Начало {
    ВыводСНовойСтрокой("Следующий шаг: несколько аргументов функции")

    Целое число          ; первое число с которого ведется поиск
    Целое последнее      ; верхний предел поиска

    Целое счетчик = 0
    Целое чиселВСтроке = 10
    Целое описательФайла = ФайлОткрыть("conf.txt")

    Если описательФайла > 0 {
        число = ФайлЧитать(описательФайла, 4)
        последнее = ФайлЧитать(описательФайла, 4) + число     ; верхний предел поиска
        ФайлЗакрыть(описательФайла)

        ВыводСНовойСтрокой("----------------------------------------")
        ВыводСНовойСтрокой("Начинаем поиск простых чисел:")
        ВыводСтроки(" от ")
        ВыводЧисла(число)
        ВыводСтроки(" до ")
        ВыводЧисла(последнее)
        ВыводНовойСтроки()
        ВыводСНовойСтрокой("----------------------------------------")

        Пока число < последнее {
            Если ПроверкаПростоты(число) = 1 {
                ВыводЧисла(число)
                ВыводСтроки(" ")
                счетчик = счетчик + 1
            }
            
            Если счетчик = чиселВСтроке {
                ВыводНовойСтроки()
                счетчик = 0
            }
        
            число = число + 1
        } 
        ВыводНовойСтроки()
    }

    ВыводСНовойСтрокой("Выход.")
}


ФайлЧитать(Целое описательФайла, Целое количествоБайт) {
    Целое буфер = 0
асм("
    ; --------------------------------
    ; [РФ - 0ш8] - описатель файла
    ; [РФ - 0ш10] - количество байт
    ; [РФ - 0ш18] - буфер
    ; --------------------------------

    ; -------------------------------
    Копировать РА, 0              ; системная команда 'чтение из файла'

    Копировать РБ, РФ             ; формируем указатель
    Уменьшить РБ, 0ш8 
    Копировать РН, [РБ]           ; описатель файла 

    Копировать РБ, РФ             ; формируем указатель буфера
    Уменьшить РБ, 0ш18 
    Копировать РИ, РБ             ; указатель на буфер

    Копировать РБ, РФ             ; формируем 
    Уменьшить РБ, 0ш10 
    Копировать РД, [РБ]           ; размер буфера в байтах

    ВызватьСистему
    ; -------------------------------
")
    Вернуть буфер
}


ФункцияДлиныСтроки {асм("
    ; [РФ + 0ш10] - указатель на строку
    ; --------------------------------

    Копировать РЧ, 0
    Копировать РИ, [РФ + 0ш10]
    Уменьшить1 РИ
    Уменьшить1 РЧ
ЦИКЛ2:
    Увеличить1 РИ
    Увеличить1 РЧ
    Копировать РА, [РИ]
    БитИ РА, 0шЕЕ
    ПерейтиЕслиНе0В ЦИКЛ2
    Копировать РА, РЧ
")}


ВыводСтроки(Строка строка) {асм("
    ; [РФ + 0ш10] - указатель на строку
    ; --------------------------------

    ; считаем длину строки
    Втолкнуть [РФ + 0ш10]                 
    Вызвать ФункцияДлиныСтроки
    Увеличить РС, 0ш08
    Копировать РД, РА  ; длина строки

    Копировать РА, 1              ; системная команда 'запись файла'
    Копировать РН, РА             ; 1 - консоль
    Копировать РИ, [РФ + 0ш10]    ; указатель на строку
    ВызватьСистему
")}


ВыводНовойСтроки {асм("
    Втолкнуть 0шА    ; конец строки

    Копировать РА, 1              ; системная команда 'запись файла'
    Копировать РН, РА             ; 1 - консоль
    Копировать РИ, РС             ; указатель на строку
    Копировать РД, 1              ; длина строки
    ВызватьСистему
")}


ВыводСНовойСтрокой(Строка строка) {
    ВыводСтроки(строка)
    ВыводНовойСтроки()
}


ВыводЧисла {асм("
    ; [РФ + 0ш10] - число
    ; --------------------------------
    Втолкнуть РД
    Втолкнуть РБ
    Втолкнуть РА

    Уменьшить РС, 0ш40
    ; [РФ - 0ш8] - переменная

    Копировать РБ, [РФ + 0ш10]
    Копировать РЧ, 1
    Копировать РИ, 0        ; буфер для числа

Цикл2:
    Копировать РА, 0        ; sum_quotient = 0

    Втолкнуть РБ
Цикл:
    Вытолкнуть РБ           ; восстанавливаем остаток
Цикл3:
    Копировать РД, РБ       ; 
    БитИ РБ, 7              ; остаток от деления на 8
    СдвинутьВправоАрифметический РД, 3    ; делим на 8 ; quotient

    Увеличить РА, РД        ; sum += quotient
    СдвинутьВлево РД, 1     ; quotient * 2
    Уменьшить РБ, РД
    ПерейтиЕслиМеньше Цикл3
    Втолкнуть РБ            ; сохраняем остаток
    Уменьшить РБ, 9
    ПерейтиЕслиБольше Цикл

    Копировать РБ, РА       ; целая часть в РБ
    Вытолкнуть РА           ; восстанавливаем остаток 

    ; РА - остаток, РБ - целое, РД - часть для деления(поправка)

    БитИли РА, 0ш30

    ; сохраняем остаток в байте

    БитИ РА, 0шЕ
    БитИли РА, 0ш30
    СдвинутьВлево РИ, 8
    БитИли РИ, РА
    Увеличить1 РЧ

    Копировать РА, 0
    БитИли РА, РД
    ПерейтиЕслиНе0В Цикл2

    ; проверяем на последний 0 
    Копировать РН, РИ
    Уменьшить РН, 0ш0А30
    ПерейтиЕсли0В Сюда2

    Копировать РН, РИ
    БитИ РН, 15
    ПерейтиЕслиНе0В Сюда2
    СдвинутьВправо РИ, 8
    Уменьшить1 РЧ

Сюда2:    
    ; новая строка

    Втолкнуть РИ

    Копировать РА, 1       ; системная команда 'запись файла'
    Копировать РД, РЧ      ; длина строки
    Копировать РИ, РС      ; указатель на строку
    Копировать РН, РА      ; 1 - консоль
    ВызватьСистему

    Вытолкнуть РИ

    Вытолкнуть РА
    Вытолкнуть РБ
    Вытолкнуть РД
")}


;* -------------------------------------------
    Возвращает:
        1 - если проверяемое число - простое
        0 - составное число
-------------------------------------------- *;
ПроверкаПростоты(Целое проверяемое) {
    Целое прибавка = 2
    Целое число

    Пока прибавка < проверяемое {
        число = 0

        Пока число < проверяемое {
            число = число + прибавка
        } 

        Если число = проверяемое {
            Вернуть 0
        }

        прибавка = прибавка + 1
    } 

    Вернуть 1
}




ФайлОткрыть(Строка путьКФайлу) {асм("
    ; [РФ + 0ш10] - путь к файлу
    ; [РФ - 0ш8] - путь к файлу
    ; --------------------------------
    Копировать РА, 2              ; системная команда 'открыть файл'

    Копировать РН, РФ             ; 
    Уменьшить  РН, 8              ; 
    Копировать РН, [РН]           ; путь к файлу(указатель на строку)

    Копировать РИ, 0              ; опции : ТОЛЬКО_ЧТЕНИЕ
    Копировать РД, 0ш1ЕВ          ; режим : 0774
    ВызватьСистему

")}


ФайлЗакрыть(Целое ОписательФайла) {асм("
    ; [РФ + 0ш10] - описатель файла
    ; [РФ - 0ш8] - описатель файла
    ; --------------------------------

    Копировать РА, 3              ; системная команда 'закрыть файл'
    Копировать РН, [РФ + 0ш10]    ; описатель файла (ИД)
    ВызватьСистему
")}

input.rax:

Код:
.Байт 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 
.ш(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

ПерейтиВ Начало
С1: .Байт 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шБГ, 0шГ0, 0шБ5, 0шГ1, 0ш81, 0шГ0, 0шБА, 0шГ0, 0шБД, 0шГ0, 0шББ, 0шГ1, 0ш8В, 0шГ0, 0шБА, 0шГ0, 0шБД, 0ш20, 0шГ0, 0шБ0, 0шГ1, 0ш80, 0шГ0, 0шБ3, 0шГ1, 0ш83, 0шГ0, 0шБВ, 0шГ0, 0шБ5, 0шГ0, 0шБГ, 0шГ1, 0ш82, 0шГ0, 0шБД, 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ш63, 0ш6Е, 0ш6Д, 0ш66, 0ш2Д, 0ш74, 0ш78, 0ш74, 0
С3: .Байт 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0ш2Г, 0
С4: .Байт 0шГ0, 0ш9Г, 0шГ0, 0шБ0, 0шГ1, 0ш87, 0шГ0, 0шБ8, 0шГ0, 0шБГ, 0шГ0, 0шБ0, 0шГ0, 0шБ5, 0шГ0, 0шБВ, 0ш20, 0шГ0, 0шБЕ, 0шГ0, 0шБД, 0шГ0, 0шБ8, 0шГ1, 0ш81, 0шГ0, 0шБА, 0ш20, 0шГ0, 0шБЕ, 0шГ1, 0ш80, 0шГ0, 0шБД, 0шГ1, 0ш81, 0шГ1, 0ш82, 0шГ1, 0ш8Б, 0шГ1, 0ш85, 0ш20, 0шГ1, 0ш87, 0шГ0, 0шБ8, 0шГ1, 0ш81, 0шГ0, 0шБ5, 0шГ0, 0шББ, 0ш3А, 0
С5: .Байт 0ш20, 0шГ0, 0шБД, 0шГ1, 0ш82, 0ш20, 0
С6: .Байт 0ш20, 0шГ0, 0шБ4, 0шГ0, 0шБД, 0ш20, 0
С7: .Байт 0ш20, 0
С8: .Байт 0шГ0, 0ш92, 0шГ1, 0ш8Б, 0шГ1, 0ш85, 0шГ0, 0шБД, 0шГ0, 0шБ4, 0ш2Д, 0
; -------------------------------------------------------------------------------------
        Начало:
; -------------------------------------------------------------------------------------
    ; пролог
    Втолкнуть РФ
    Копировать РФ, РС
    Уменьшить РС, 96

    Втолкнуть С1
    Вызвать ВыводСНовойСтрокой

    Копировать РА, 0
    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать [РБ], РА

    Копировать РА, 10
    Копировать РБ, РФ
    Уменьшить РБ, 32
    Копировать [РБ], РА

    Втолкнуть С2
    Вызвать ФайлОткрыть

    Копировать РБ, РФ
    Уменьшить РБ, 40
    Копировать [РБ], РА

    Копировать РБ, РФ
    Уменьшить РБ, 40
    Копировать РА, [РБ]
    Втолкнуть РА
    Вытолкнуть РБ
    Уменьшить РБ, 0

    ПерейтиЕслиМеньшеИлиРавно М1

    Втолкнуть 4
    Копировать РБ, РФ
    Уменьшить РБ, 40
    Копировать РА, [РБ]
    Втолкнуть РА
    Вызвать ФайлЧитать

    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать [РБ], РА

    Втолкнуть 4
    Копировать РБ, РФ
    Уменьшить РБ, 40
    Копировать РА, [РБ]
    Втолкнуть РА
    Вызвать ФайлЧитать

    Втолкнуть РА
    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать РА, [РБ]
    Вытолкнуть РБ
    Увеличить РА, РБ
    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать [РБ], РА

    Копировать РБ, РФ
    Уменьшить РБ, 40
    Копировать РА, [РБ]
    Втолкнуть РА
    Вызвать ФайлЗакрыть

    Втолкнуть С3
    Вызвать ВыводСНовойСтрокой

    Втолкнуть С4
    Вызвать ВыводСНовойСтрокой

    Втолкнуть С5
    Вызвать ВыводСтроки

    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать РА, [РБ]
    Втолкнуть РА
    Вызвать ВыводЧисла

    Втолкнуть С6
    Вызвать ВыводСтроки

    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать РА, [РБ]
    Втолкнуть РА
    Вызвать ВыводЧисла

    Вызвать ВыводНовойСтроки

    Втолкнуть С3
    Вызвать ВыводСНовойСтрокой

М3:
    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать РА, [РБ]
    Вытолкнуть РБ
    Уменьшить РБ, РА
    ПерейтиЕслиБольшеИлиРавно М4

    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать РА, [РБ]
    Втолкнуть РА
    Вызвать ПроверкаПростоты

    Втолкнуть РА
    Вытолкнуть РБ
    Уменьшить РБ, 1

    ПерейтиЕслиНе0 М5

    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать РА, [РБ]
    Втолкнуть РА
    Вызвать ВыводЧисла

    Втолкнуть С7
    Вызвать ВыводСтроки

    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РА, 1
    Вытолкнуть РБ
    Увеличить РА, РБ
    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать [РБ], РА

М5:
    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РБ, РФ
    Уменьшить РБ, 32
    Копировать РА, [РБ]
    Вытолкнуть РБ
    Уменьшить РБ, РА
    ПерейтиЕслиНе0 М7

    Вызвать ВыводНовойСтроки

    Копировать РА, 0
    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать [РБ], РА

М7:
    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РА, 1
    Вытолкнуть РБ
    Увеличить РА, РБ
    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать [РБ], РА

    Перейти М3
М4:
    Вызвать ВыводНовойСтроки

М1:
    Втолкнуть С8
    Вызвать ВыводСНовойСтрокой


    ; эпилог
    Копировать РС, РФ
    Вытолкнуть РФ

    ; выход
    Копировать РА, 0ш3В           ;  системная команда - 'выход'
    БитИсключающееИли РН, РН    ;  результат программы
    ВызватьСистему
; -------------------------------------------------------------------------------------
        ФайлЧитать:
; -------------------------------------------------------------------------------------
    ; пролог
    Втолкнуть РФ
    Копировать РФ, РС
    Уменьшить РС, 24

    Копировать РБ, РФ
    Увеличить РБ, 16
    Копировать РА, [РБ]

    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать [РБ], РА

    Копировать РБ, РФ
    Увеличить РБ, 24
    Копировать РА, [РБ]

    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать [РБ], РА

    Копировать РА, 0
    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать [РБ], РА


    ; --------------------------------
    ; [РФ - 0ш8] - описатель файла
    ; [РФ - 0ш10] - количество байт
    ; [РФ - 0ш18] - буфер
    ; --------------------------------

    ; -------------------------------
    Копировать РА, 0              ; системная команда 'чтение из файла'

    Копировать РБ, РФ             ; формируем указатель
    Уменьшить РБ, 0ш8 
    Копировать РН, [РБ]           ; описатель файла 

    Копировать РБ, РФ             ; формируем указатель буфера
    Уменьшить РБ, 0ш18 
    Копировать РИ, РБ             ; указатель на буфер

    Копировать РБ, РФ             ; формируем 
    Уменьшить РБ, 0ш10 
    Копировать РД, [РБ]           ; размер буфера в байтах

    ВызватьСистему
    ; -------------------------------

    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать РА, [РБ]
    ПерейтиВ М9

М9:
    ; эпилог
    Копировать РС, РФ
    Вытолкнуть РФ
    Назад

; -------------------------------------------------------------------------------------
        ФункцияДлиныСтроки:
; -------------------------------------------------------------------------------------
    ; пролог
    Втолкнуть РФ
    Копировать РФ, РС


    ; [РФ + 0ш10] - указатель на строку
    ; --------------------------------

    Копировать РЧ, 0
    Копировать РИ, [РФ + 0ш10]
    Уменьшить1 РИ
    Уменьшить1 РЧ
ЦИКЛ2:
    Увеличить1 РИ
    Увеличить1 РЧ
    Копировать РА, [РИ]
    БитИ РА, 0шЕЕ
    ПерейтиЕслиНе0В ЦИКЛ2
    Копировать РА, РЧ

М10:
    ; эпилог
    Копировать РС, РФ
    Вытолкнуть РФ
    Назад

; -------------------------------------------------------------------------------------
        ВыводСтроки:
; -------------------------------------------------------------------------------------
    ; пролог
    Втолкнуть РФ
    Копировать РФ, РС
    Уменьшить РС, 8

    Копировать РБ, РФ
    Увеличить РБ, 16
    Копировать РА, [РБ]

    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать [РБ], РА


    ; [РФ + 0ш10] - указатель на строку
    ; --------------------------------

    ; считаем длину строки
    Втолкнуть [РФ + 0ш10]                 
    Вызвать ФункцияДлиныСтроки
    Увеличить РС, 0ш08
    Копировать РД, РА  ; длина строки

    Копировать РА, 1              ; системная команда 'запись файла'
    Копировать РН, РА             ; 1 - консоль
    Копировать РИ, [РФ + 0ш10]    ; указатель на строку
    ВызватьСистему

М11:
    ; эпилог
    Копировать РС, РФ
    Вытолкнуть РФ
    Назад

; -------------------------------------------------------------------------------------
        ВыводНовойСтроки:
; -------------------------------------------------------------------------------------
    ; пролог
    Втолкнуть РФ
    Копировать РФ, РС


    Втолкнуть 0шА    ; конец строки

    Копировать РА, 1              ; системная команда 'запись файла'
    Копировать РН, РА             ; 1 - консоль
    Копировать РИ, РС             ; указатель на строку
    Копировать РД, 1              ; длина строки
    ВызватьСистему

М12:
    ; эпилог
    Копировать РС, РФ
    Вытолкнуть РФ
    Назад

; -------------------------------------------------------------------------------------
        ВыводСНовойСтрокой:
; -------------------------------------------------------------------------------------
    ; пролог
    Втолкнуть РФ
    Копировать РФ, РС
    Уменьшить РС, 8

    Копировать РБ, РФ
    Увеличить РБ, 16
    Копировать РА, [РБ]

    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать [РБ], РА

    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать РА, [РБ]
    Втолкнуть РА
    Вызвать ВыводСтроки

    Вызвать ВыводНовойСтроки

М13:
    ; эпилог
    Копировать РС, РФ
    Вытолкнуть РФ
    Назад

; -------------------------------------------------------------------------------------
        ВыводЧисла:
; -------------------------------------------------------------------------------------
    ; пролог
    Втолкнуть РФ
    Копировать РФ, РС


    ; [РФ + 0ш10] - число
    ; --------------------------------
    Втолкнуть РД
    Втолкнуть РБ
    Втолкнуть РА

    Уменьшить РС, 0ш40
    ; [РФ - 0ш8] - переменная

    Копировать РБ, [РФ + 0ш10]
    Копировать РЧ, 1
    Копировать РИ, 0        ; буфер для числа

Цикл2:
    Копировать РА, 0        ; sum_quotient = 0

    Втолкнуть РБ
Цикл:
    Вытолкнуть РБ           ; восстанавливаем остаток
Цикл3:
    Копировать РД, РБ       ; 
    БитИ РБ, 7              ; остаток от деления на 8
    СдвинутьВправоАрифметический РД, 3    ; делим на 8 ; quotient

    Увеличить РА, РД        ; sum += quotient
    СдвинутьВлево РД, 1     ; quotient * 2
    Уменьшить РБ, РД
    ПерейтиЕслиМеньше Цикл3
    Втолкнуть РБ            ; сохраняем остаток
    Уменьшить РБ, 9
    ПерейтиЕслиБольше Цикл

    Копировать РБ, РА       ; целая часть в РБ
    Вытолкнуть РА           ; восстанавливаем остаток 

    ; РА - остаток, РБ - целое, РД - часть для деления(поправка)

    БитИли РА, 0ш30

    ; сохраняем остаток в байте

    БитИ РА, 0шЕ
    БитИли РА, 0ш30
    СдвинутьВлево РИ, 8
    БитИли РИ, РА
    Увеличить1 РЧ

    Копировать РА, 0
    БитИли РА, РД
    ПерейтиЕслиНе0В Цикл2

    ; проверяем на последний 0 
    Копировать РН, РИ
    Уменьшить РН, 0ш0А30
    ПерейтиЕсли0В Сюда2

    Копировать РН, РИ
    БитИ РН, 15
    ПерейтиЕслиНе0В Сюда2
    СдвинутьВправо РИ, 8
    Уменьшить1 РЧ

Сюда2:    
    ; новая строка

    Втолкнуть РИ

    Копировать РА, 1       ; системная команда 'запись файла'
    Копировать РД, РЧ      ; длина строки
    Копировать РИ, РС      ; указатель на строку
    Копировать РН, РА      ; 1 - консоль
    ВызватьСистему

    Вытолкнуть РИ

    Вытолкнуть РА
    Вытолкнуть РБ
    Вытолкнуть РД

М14:
    ; эпилог
    Копировать РС, РФ
    Вытолкнуть РФ
    Назад

; -------------------------------------------------------------------------------------
        ПроверкаПростоты:
; -------------------------------------------------------------------------------------
    ; пролог
    Втолкнуть РФ
    Копировать РФ, РС
    Уменьшить РС, 24

    Копировать РБ, РФ
    Увеличить РБ, 16
    Копировать РА, [РБ]

    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать [РБ], РА

    Копировать РА, 2
    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать [РБ], РА

М16:
    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать РА, [РБ]
    Вытолкнуть РБ
    Уменьшить РБ, РА
    ПерейтиЕслиБольшеИлиРавно М17

    Копировать РА, 0
    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать [РБ], РА

М18:
    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать РА, [РБ]
    Вытолкнуть РБ
    Уменьшить РБ, РА
    ПерейтиЕслиБольшеИлиРавно М19

    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать РА, [РБ]
    Вытолкнуть РБ
    Увеличить РА, РБ
    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать [РБ], РА

    Перейти М18
М19:
    Копировать РБ, РФ
    Уменьшить РБ, 24
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать РА, [РБ]
    Вытолкнуть РБ
    Уменьшить РБ, РА
    ПерейтиЕслиНе0 М20

    Копировать РА, 0
    ПерейтиВ М15

М20:
    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать РА, [РБ]
    Втолкнуть РА
    Копировать РА, 1
    Вытолкнуть РБ
    Увеличить РА, РБ
    Копировать РБ, РФ
    Уменьшить РБ, 16
    Копировать [РБ], РА

    Перейти М16
М17:
    Копировать РА, 1
    ПерейтиВ М15

М15:
    ; эпилог
    Копировать РС, РФ
    Вытолкнуть РФ
    Назад

; -------------------------------------------------------------------------------------
        ФайлОткрыть:
; -------------------------------------------------------------------------------------
    ; пролог
    Втолкнуть РФ
    Копировать РФ, РС
    Уменьшить РС, 8

    Копировать РБ, РФ
    Увеличить РБ, 16
    Копировать РА, [РБ]

    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать [РБ], РА


    ; [РФ + 0ш10] - путь к файлу
    ; [РФ - 0ш8] - путь к файлу
    ; --------------------------------
    Копировать РА, 2              ; системная команда 'открыть файл'

    Копировать РН, РФ             ; 
    Уменьшить  РН, 8              ; 
    Копировать РН, [РН]           ; путь к файлу(указатель на строку)

    Копировать РИ, 0              ; опции : ТОЛЬКО_ЧТЕНИЕ
    Копировать РД, 0ш1ЕВ          ; режим : 0774
    ВызватьСистему


М22:
    ; эпилог
    Копировать РС, РФ
    Вытолкнуть РФ
    Назад

; -------------------------------------------------------------------------------------
        ФайлЗакрыть:
; -------------------------------------------------------------------------------------
    ; пролог
    Втолкнуть РФ
    Копировать РФ, РС
    Уменьшить РС, 8

    Копировать РБ, РФ
    Увеличить РБ, 16
    Копировать РА, [РБ]

    Копировать РБ, РФ
    Уменьшить РБ, 8
    Копировать [РБ], РА


    ; [РФ + 0ш10] - описатель файла
    ; [РФ - 0ш8] - описатель файла
    ; --------------------------------

    Копировать РА, 3              ; системная команда 'закрыть файл'
    Копировать РН, [РФ + 0ш10]    ; описатель файла (ИД)
    ВызватьСистему

М23:
    ; эпилог
    Копировать РС, РФ
    Вытолкнуть РФ
    Назад

rex:

Код:
./rex ./output.bin
00000000: 7Е 45 4В 46  02 01 01 00  00 00 00 00  00 00 00 00  |.ELF............|
00000010: 02 00 3Д 00  01 00 00 00  78 00 01 00  00 00 00 00  |..>.....x.......|
00000020: 40 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  |@...............|
00000030: 00 00 00 00  40 00 38 00  01 00 00 00  00 00 00 00  |....@.8.........|
00000040: 01 00 00 00  05 00 00 00  78 00 00 00  00 00 00 00  |........x.......|
00000050: 78 00 01 00  00 00 00 00  78 00 01 00  00 00 00 00  |x.......x.......|
00000060: 38 00 00 00  00 00 00 00  38 00 00 00  00 00 00 00  |8.......8.......|
00000070: 10 00 00 00  00 00 00 00  Д9 Г7 00 00  00 Г0 А1 Г0  |................|
00000080: ББ Г0 Б5 Г0  Б4 Г1 83 Г1  8Д Г1 89 Г0  Б8 Г0 Б9 20  |............... |
00000090: Г1 88 Г0 Б0  Г0 Б3 3А 20  Г0 БГ Г0 Б5  Г1 81 Г0 БА  |......: ........|
000000А0: Г0 БД Г0 ББ  Г1 8В Г0 БА  Г0 БД 20 Г0  Б0 Г1 80 Г0  |.......... .....|
000000Б0: Б3 Г1 83 Г0  БВ Г0 Б5 Г0  БГ Г1 82 Г0  БД Г0 Б2 20  |............... |
000000В0: Г1 84 Г1 83  Г0 БГ Г0 БА  Г1 86 Г0 Б8  Г0 Б8 00 63  |...............c|
000000Г0: 6Е 6Д 66 2Д  74 78 74 00  2Г 2Г 2Г 2Г  2Г 2Г 2Г 2Г  |onf.txt.--------|
000000Д0: 2Г 2Г 2Г 2Г  2Г 2Г 2Г 2Г  2Г 2Г 2Г 2Г  2Г 2Г 2Г 2Г  |----------------|
000000Е0: 2Г 2Г 2Г 2Г  2Г 2Г 2Г 2Г  2Г 2Г 2Г 2Г  2Г 2Г 2Г 2Г  |----------------|
00000100: 00 Г0 9Г Г0  Б0 Г1 87 Г0  Б8 Г0 БГ Г0  Б0 Г0 Б5 Г0  |................|
00000110: БВ 20 Г0 БЕ  Г0 БД Г0 Б8  Г1 81 Г0 БА  20 Г0 БЕ Г1  |. .......... ...|
00000120: 80 Г0 БД Г1  81 Г1 82 Г1  8Б Г1 85 20  Г1 87 Г0 Б8  |........... ....|
00000130: Г1 81 Г0 Б5  Г0 ББ 3А 00  20 Г0 БД Г1  82 20 00 20  |......:. .... . |
00000140: Г0 Б4 Г0 БД  20 00 20 00  Г0 92 Г1 8Б  Г1 85 Г0 БД  |.... . .........|
00000150: Г0 Б4 2Д 00  55 48 89 Д5  48 81 ДВ 60  00 00 00 68  |....UH..H..`...h|
00000160: 7Г 00 01 00  Д8 76 03 00  00 48 В7 В0  00 00 00 00  |}....v...H......|
00000170: 48 89 ДБ 48  81 ДБ 18 00  00 00 48 89  03 48 В7 В0  |H..H......H..H..|
00000180: 0А 00 00 00  48 89 ДБ 48  81 ДБ 20 00  00 00 48 89  |....H..H.. ...H.|
00000190: 03 68 ВЕ 00  01 00 Д8 86  05 00 00 48  89 ДБ 48 81  |.h.........H..H.|
000001А0: ДБ 28 00 00  00 48 89 03  48 89 ДБ 48  81 ДБ 28 00  |.(...H..H..H..(.|
000001Б0: 00 00 48 8Б  03 50 5Б 48  81 ДБ 00 00  00 00 0Е 8Д  |..H..P[H........|
000001В0: В4 01 00 00  68 04 00 00  00 48 89 ДБ  48 81 ДБ 28  |....h....H..H..(|
000001Г0: 00 00 00 48  8Б 03 50 Д8  В6 01 00 00  48 89 ДБ 48  |...H..P.....H..H|
000001Д0: 81 ДБ 08 00  00 00 48 89  03 68 04 00  00 00 48 89  |......H..h....H.|
000001Е0: ДБ 48 81 ДБ  28 00 00 00  48 8Б 03 50  Д8 А1 01 00  |.H..(...H..P....|
00000200: 00 50 48 89  ДБ 48 81 ДБ  08 00 00 00  48 8Б 03 5Б  |.PH..H......H..[|
00000210: 48 01 Г8 48  89 ДБ 48 81  ДБ 10 00 00  00 48 89 03  |H..H..H......H..|
00000220: 48 89 ДБ 48  81 ДБ 28 00  00 00 48 8Б  03 50 Д8 3В  |H..H..(...H..P.<|
00000230: 05 00 00 68  Г8 00 01 00  Д8 А2 02 00  00 68 01 01  |...h.........h..|
00000240: 01 00 Д8 98  02 00 00 68  38 01 01 00  Д8 1Д 02 00  |.......h8.......|
00000250: 00 48 89 ДБ  48 81 ДБ 08  00 00 00 48  8Б 03 50 Д8  |.H..H......H..P.|
00000260: БГ 02 00 00  68 3Е 01 01  00 Д8 01 02  00 00 48 89  |....h?........H.|
00000270: ДБ 48 81 ДБ  10 00 00 00  48 8Б 03 50  Д8 А0 02 00  |.H......H..P....|
00000280: 00 Д8 35 02  00 00 68 Г8  00 01 00 Д8  4Е 02 00 00  |..5...h.....O...|
00000290: 48 89 ДБ 48  81 ДБ 08 00  00 00 48 8Б  03 50 48 89  |H..H......H..PH.|
000002А0: ДБ 48 81 ДБ  10 00 00 00  48 8Б 03 5Б  48 29 В3 0Е  |.H......H..[H)..|
000002Б0: 8Г ВД 00 00  00 48 89 ДБ  48 81 ДБ 08  00 00 00 48  |.....H..H......H|
000002В0: 8Б 03 50 Д8  24 03 00 00  50 5Б 48 81  ДБ 01 00 00  |..P.$...P[H.....|
000002Г0: 00 0Е 85 43  00 00 00 48  89 ДБ 48 81  ДБ 08 00 00  |...C...H..H.....|
000002Д0: 00 48 8Б 03  50 Д8 37 02  00 00 68 46  01 01 00 Д8  |.H..P.7...hF....|
000002Е0: 7Б 01 00 00  48 89 ДБ 48  81 ДБ 18 00  00 00 48 8Б  |{...H..H......H.|
00000300: 03 50 48 В7  В0 01 00 00  00 5Б 48 01  Г8 48 89 ДБ  |.PH......[H..H..|
00000310: 48 81 ДБ 18  00 00 00 48  89 03 48 89  ДБ 48 81 ДБ  |H......H..H..H..|
00000320: 18 00 00 00  48 8Б 03 50  48 89 ДБ 48  81 ДБ 20 00  |....H..PH..H.. .|
00000330: 00 00 48 8Б  03 5Б 48 29  В3 0Е 85 19  00 00 00 Д8  |..H..[H)........|
00000340: 77 01 00 00  48 В7 В0 00  00 00 00 48  89 ДБ 48 81  |w...H......H..H.|
00000350: ДБ 18 00 00  00 48 89 03  48 89 ДБ 48  81 ДБ 08 00  |.....H..H..H....|
00000360: 00 00 48 8Б  03 50 48 В7  В0 01 00 00  00 5Б 48 01  |..H..PH......[H.|
00000370: Г8 48 89 ДБ  48 81 ДБ 08  00 00 00 48  89 03 Д9 0Г  |.H..H......H....|
00000380: ЕЕ ЕЕ ЕЕ Д8  33 01 00 00  68 48 01 01  00 Д8 4Г 01  |....3...hH....M.|
00000390: 00 00 48 89  ДВ 5Г 48 В7  В0 3В 00 00  00 48 31 ЕЕ  |..H..]H..<...H1.|
000003А0: 0Е 05 55 48  89 Д5 48 81  ДВ 18 00 00  00 48 89 ДБ  |..UH..H......H..|
000003Б0: 48 81 В3 10  00 00 00 48  8Б 03 48 89  ДБ 48 81 ДБ  |H......H..H..H..|
000003В0: 08 00 00 00  48 89 03 48  89 ДБ 48 81  В3 18 00 00  |....H..H..H.....|
000003Г0: 00 48 8Б 03  48 89 ДБ 48  81 ДБ 10 00  00 00 48 89  |.H..H..H......H.|
000003Д0: 03 48 В7 В0  00 00 00 00  48 89 ДБ 48  81 ДБ 18 00  |.H......H..H....|
000003Е0: 00 00 48 89  03 48 В7 В0  00 00 00 00  48 89 ДБ 48  |..H..H......H..H|
00000400: 81 ДБ 08 00  00 00 48 8Б  3Б 48 89 ДБ  48 81 ДБ 18  |......H.;H..H...|
00000410: 00 00 00 48  89 ГД 48 89  ДБ 48 81 ДБ  10 00 00 00  |...H..H..H......|
00000420: 48 8Б 13 0Е  05 48 89 ДБ  48 81 ДБ 18  00 00 00 48  |H....H..H......H|
00000430: 8Б 03 Д9 00  00 00 00 48  89 ДВ 5Г В3  55 48 89 Д5  |.......H..].UH..|
00000440: 48 В7 В1 00  00 00 00 48  8Б 75 10 48  ЕЕ ВД 48 ЕЕ  |H......H.u.H..H.|
00000450: В9 48 ЕЕ В6  48 ЕЕ В1 48  8Б 06 48 81  Д0 ЕЕ 00 00  |.H..H..H..H.....|
00000460: 00 0Е 85 ДА  ЕЕ ЕЕ ЕЕ 48  89 В8 48 89  ДВ 5Г В3 55  |.......H..H..].U|
00000470: 48 89 Д5 48  81 ДВ 08 00  00 00 48 89  ДБ 48 81 В3  |H..H......H..H..|
00000480: 10 00 00 00  48 8Б 03 48  89 ДБ 48 81  ДБ 08 00 00  |....H..H..H.....|
00000490: 00 48 89 03  ЕЕ 75 10 Д8  А0 ЕЕ ЕЕ ЕЕ  48 81 В4 08  |.H...u......H...|
000004А0: 00 00 00 48  89 В2 48 В7  В0 01 00 00  00 48 89 В7  |...H..H......H..|
000004Б0: 48 8Б 75 10  0Е 05 48 89  ДВ 5Г В3 55  48 89 Д5 68  |H.u...H..].UH..h|
000004В0: 0А 00 00 00  48 В7 В0 01  00 00 00 48  89 В7 48 89  |....H......H..H.|
000004Г0: Д6 48 В7 В2  01 00 00 00  0Е 05 48 89  ДВ 5Г В3 55  |.H........H..].U|
000004Д0: 48 89 Д5 48  81 ДВ 08 00  00 00 48 89  ДБ 48 81 В3  |H..H......H..H..|
000004Е0: 10 00 00 00  48 8Б 03 48  89 ДБ 48 81  ДБ 08 00 00  |....H..H..H.....|
00000500: 00 48 89 03  48 89 ДБ 48  81 ДБ 08 00  00 00 48 8Б  |.H..H..H......H.|
00000510: 03 50 Д8 58  ЕЕ ЕЕ ЕЕ Д8  9Е ЕЕ ЕЕ ЕЕ  48 89 ДВ 5Г  |.P.X........H..]|
00000520: В3 55 48 89  Д5 52 53 50  48 81 ДВ 40  00 00 00 48  |.UH..RSPH..@...H|
00000530: 8Б 5Г 10 48  В7 В1 01 00  00 00 48 В7  В6 00 00 00  |.].H......H.....|
00000540: 00 48 В7 В0  00 00 00 00  53 5Б 48 89  ГА 48 81 Д3  |.H......S[H..H..|
00000550: 07 00 00 00  48 В1 ЕА 03  48 01 Г0 48  В1 Д2 01 48  |....H...H..H...H|
00000560: 29 Г3 0Е 8В  Д2 ЕЕ ЕЕ ЕЕ  53 48 81 ДБ  09 00 00 00  |).......SH......|
00000570: 0Е 8Е Г3 ЕЕ  ЕЕ ЕЕ 48 89  В3 58 48 81  В8 30 00 00  |......H..XH..0..|
00000580: 00 48 81 Д0  0Е 00 00 00  48 81 В8 30  00 00 00 48  |.H......H..0...H|
00000590: В1 Д6 08 48  09 В6 48 ЕЕ  В1 48 В7 В0  00 00 00 00  |...H..H..H......|
000005А0: 48 09 Г0 0Е  85 98 ЕЕ ЕЕ  ЕЕ 48 89 Е7  48 81 ДЕ 30  |H........H..H..0|
000005Б0: 0А 00 00 0Е  84 17 00 00  00 48 89 Е7  48 81 Д7 0Е  |.........H..H...|
000005В0: 00 00 00 0Е  85 07 00 00  00 48 В1 ДД  08 48 ЕЕ В9  |.........H...H..|
000005Г0: 56 48 В7 В0  01 00 00 00  48 89 ВА 48  89 Д6 48 89  |VH......H..H..H.|
000005Д0: В7 0Е 05 5Д  58 5Б 5А 48  89 ДВ 5Г В3  55 48 89 Д5  |...^X[ZH..].UH..|
000005Е0: 48 81 ДВ 18  00 00 00 48  89 ДБ 48 81  В3 10 00 00  |H......H..H.....|
00000600: 00 48 8Б 03  48 89 ДБ 48  81 ДБ 08 00  00 00 48 89  |.H..H..H......H.|
00000610: 03 48 В7 В0  02 00 00 00  48 89 ДБ 48  81 ДБ 10 00  |.H......H..H....|
00000620: 00 00 48 89  03 48 89 ДБ  48 81 ДБ 10  00 00 00 48  |..H..H..H......H|
00000630: 8Б 03 50 48  89 ДБ 48 81  ДБ 08 00 00  00 48 8Б 03  |..PH..H......H..|
00000640: 5Б 48 29 В3  0Е 8Г В6 00  00 00 48 В7  В0 00 00 00  |[H).......H.....|
00000650: 00 48 89 ДБ  48 81 ДБ 18  00 00 00 48  89 03 48 89  |.H..H......H..H.|
00000660: ДБ 48 81 ДБ  18 00 00 00  48 8Б 03 50  48 89 ДБ 48  |.H......H..PH..H|
00000670: 81 ДБ 08 00  00 00 48 8Б  03 5Б 48 29  В3 0Е 8Г 31  |......H..[H)...1|
00000680: 00 00 00 48  89 ДБ 48 81  ДБ 18 00 00  00 48 8Б 03  |...H..H......H..|
00000690: 50 48 89 ДБ  48 81 ДБ 10  00 00 00 48  8Б 03 5Б 48  |PH..H......H..[H|
000006А0: 01 Г8 48 89  ДБ 48 81 ДБ  18 00 00 00  48 89 03 Д9  |..H..H......H...|
000006Б0: АА ЕЕ ЕЕ ЕЕ  48 89 ДБ 48  81 ДБ 18 00  00 00 48 8Б  |....H..H......H.|
000006В0: 03 50 48 89  ДБ 48 81 ДБ  08 00 00 00  48 8Б 03 5Б  |.PH..H......H..[|
000006Г0: 48 29 В3 0Е  85 0В 00 00  00 48 В7 В0  00 00 00 00  |H).......H......|
000006Д0: Д9 37 00 00  00 48 89 ДБ  48 81 ДБ 10  00 00 00 48  |.7...H..H......H|
000006Е0: 8Б 03 50 48  В7 В0 01 00  00 00 5Б 48  01 Г8 48 89  |..PH......[H..H.|
00000700: ДБ 48 81 ДБ  10 00 00 00  48 89 03 Д9  15 ЕЕ ЕЕ ЕЕ  |.H......H.......|
00000710: 48 В7 В0 01  00 00 00 Д9  00 00 00 00  48 89 ДВ 5Г  |H...........H..]|
00000720: В3 55 48 89  Д5 48 81 ДВ  08 00 00 00  48 89 ДБ 48  |.UH..H......H..H|
00000730: 81 В3 10 00  00 00 48 8Б  03 48 89 ДБ  48 81 ДБ 08  |......H..H..H...|
00000740: 00 00 00 48  89 03 48 В7  В0 02 00 00  00 48 89 ДЕ  |...H..H......H..|
00000750: 48 81 ДЕ 08  00 00 00 48  8Б 3Е 48 В7  В6 00 00 00  |H......H.?H.....|
00000760: 00 48 В7 В2  ЕВ 01 00 00  0Е 05 48 89  ДВ 5Г В3 55  |.H........H..].U|
00000770: 48 89 Д5 48  81 ДВ 08 00  00 00 48 89  ДБ 48 81 В3  |H..H......H..H..|
00000780: 10 00 00 00  48 8Б 03 48  89 ДБ 48 81  ДБ 08 00 00  |....H..H..H.....|
00000790: 00 48 89 03  48 В7 В0 03  00 00 00 48  8Б 7Г 10 0Е  |.H..H......H.}..|
000007А0: 05 48 89 ДВ  5Г В3                                  |.H..].|
000007А6:

Вывод программы:

Код:
Следующий шаг: несколько аргументов функции
----------------------------------------
Начинаем поиск простых чисел:
 от 6000 до 7000
----------------------------------------
6007 6011 6029 6037 6043 6047 6053 6067 6073 6079 
6089 6091 6101 6113 6121 6131 6133 6143 6151 6163 
6173 6197 6199 6203 6211 6217 6221 6229 6247 6257 
6263 6269 6271 6277 6287 6299 6301 6311 6317 6323 
6329 6337 6343 6353 6359 6361 6367 6373 6379 6389 
6397 6421 6427 6449 6451 6469 6473 6481 6491 6521 
6529 6547 6551 6553 6563 6569 6571 6577 6581 6599 
6607 6619 6637 6653 6659 6661 6673 6679 6689 6691 
6701 6703 6709 6719 6733 6737 6761 6763 6779 6781 
6791 6793 6803 6823 6827 6829 6833 6841 6857 6863 
6869 6871 6883 6899 6907 6911 6917 6947 6949 6959 
6961 6967 6971 6977 6983 6991 6997 
Выход.

conf.txt:

Код:
00000000: 70 17 00 00  Д8 03 00 00  00 00 00 00  00           |p............|
0000000Г:

Отредактировано ИванАс (2024-10-09 20:04:55)

0

23

Диапазон можно было через параметры командной строки передать.
Хотя читать файл тоже полезно, без этого можно было бы обойтись (использовав только чтение stdin).

0

24

ИванАс написал(а):

РуЧей, аРЧи, РуЧка,

Похоже, что я скоро дойду до РуЧки.

0

25

Лис написал(а):

Диапазон можно было через параметры командной строки передать.

Параметры командной строки будут потом.

Лис написал(а):

Хотя читать файл тоже полезно, без этого можно было бы обойтись (использовав только чтение stdin).

Да, тоже вариант - не нужно открывать, закрывать файл, и строку-путь к файлу тоже можно выбросить.

NuShaman написал(а):

Похоже, что я скоро дойду до РуЧки.

Все! Я устал! Я ухожу! Я умываю РуЧки! :)

0

26

NuShaman написал(а):

Похоже, что я скоро дойду до РуЧки.

Смертность по населению в РФ наибольшая среди мужчин работоспособного возраста.
НуШаман, не пугайте нас.
В случае трудностей, форум настоятельно рекомендует подписываться на телеграм-каналы Антона Сорвачёва, Эдуарда Х,
беречь себя и быть счастливым!
И офтопить в специально отведённых местах.

Отредактировано Лис (2024-10-10 12:11:03)

0

27

Код:
    Целое последнее 

Шёл 2024-й год, а люди продолжают изобретать Алгол. До времени Вирта ещё не дошли. Тогда уж надо на перфокарты перейти. Отзываю своё пожелание успеха этому проекту. Всё-таки должны быть какие-то рамки у невежества.

0

28

БудДен написал(а):

Отзываю своё пожелание успеха этому проекту. Всё-таки должны быть какие-то рамки у невежества.

Вы там что-то говорили про враждебность сообщества. Может и вы индуцируете ее?

БудДен написал(а):

Шёл 2024-й год, а люди продолжают изобретать Алгол. До времени Вирта ещё не дошли.

Я затрагиваю ваши бизнес-интересы?

БудДен написал(а):

Целое последнее

А где конструктив?

Отредактировано ИванАс (2024-10-11 14:13:39)

0

29

БудДен написал(а):

люди продолжают изобретать Алгол.

https://ru.wikipedia.org/wiki/Алгол
«Обычно названием Алгол (без уточнения версии) именуют Алгол 60,
в то время как Алгол 68 рассматривается как самостоятельный язык.»

ISO 1538:1984 Programming languages — ALGOL 60

стандарт Алгол 60, который был опубликован в 1960 году,
определяет синтаксис объявления переменных следующим образом:

3.1. Variables
3.1.1. Syntax
<variable identifier> ::= <identifier>
<simple variable> ::= <variable identifier>
<subscript expression> ::= <arithmetic expression>
<subscript list> ::= <subscript expression>l<subscript list>,
     <subscript expression>
<array identifler> ::= <identifier>
<subscripted variable> ::= <array identifier> [ <subscript list> ]
<variable> ::= <simple variable> l <subscripted variable>

3.1 .2. Examples
    epsilon
    detA
    al7
    Q[1,2]
    x[sin(n x pi/2), Q[3, n,4]]

...

5.1. Type declarations
5.7.7. Syntax
<type list> ::= <simple variable>l<simple variable>,<type list>
<type> ::= real]integerlBoolean
<local or own> ::= (empty) | own
<type declaration> ::= <local or own> <type> <type list>

5.7.2. Examples
    integer p, q, s
    own Boolean Acryl, n

БудДен написал(а):

До времени Вирта ещё не дошли.

https://ru.wikipedia.org/wiki/Паскаль_(язык_программирования)

«Язык программирования Pascal был создан в 1970 году на основе языка Алгол-60»

ISO 7185:1983 Programming languages — PASCAL
  (не удалось найти)
ISO 7185:1990 Information technology — Programming languages — Pascal
  (есть в Library Genesis, ID:3111198)

6.4 Type-definitions
6.4.1 General
A type-definition shall introducean identifier to denotea type Type shall be an attribute that is possessed
by every value and every variable. Each occurrenceof a new-typeshall denotea type that is distinct from
any other new-type.
     type-definition = identifier ‘=’ type-denoter .
     type-denoter= type-identifier I new-type .
     new-type = new-ordinal-type I new-structured-typeI new-pointer-type .
...
A type-identifier shall be consideredas a simple-type-identifier,a structured-type-identifier,or a pointer-
type-identifier,accordingto the type that it denotes.

...

6.5 Declarations and denotations of variables
6.5.1 Variable-declarations
A variableshall be an entity to which a value can be attributed (see 6.8.2.2). Each identifier in the identifier-
list of a variable-declarationshall denotea distinct variablepossessingthe type denotedby the type-denoter
of the variable-declaration.
variable-declaration= identifier-list ‘:’ type-denoter .

...

Exampleof a variable-declaration-part:
var
     x, y, z, max : real;
     i, j : integer:
     k : 0..9;
     p, q, r : Boolean;
     operator : (plus, minus, times) ;
     a : array [0..63] of real;
     c : colour;
     f : file of char;
     hue1, hue2 : set of colour;
     p1, p2 : person;
     m, m1, m2 : array [1..10, 1..10] of real;
     coord : polar;
     pooltape : array [1..4] of FileOfInteger;

...

БудДен написал(а):

Всё-таки должны быть какие-то рамки у невежества.

Нижайше прошу разъяснить, чем второе лучше чем первое, особенно если это вспомогательный код-на-выброс,
который нужен временно пока не появится чисто-ассемблерное решение? (по крайней мере так декларировалось)

...

Никлаус Вирт в своей книге
1976, Wirth, Algorithms + Data Structures = Programs
1979, Вирт Н, Алгоритмы + структуры данных = программы, М.: Мир
   (есть в LibGen, ID:88252)
что-то пишет. Но я не нашел там цитаты, похожей на такую:

«В Паскале переменная объявляется сначала указанием имени, а затем типа. Это более естественный порядок, чем тот, который используется в Алголе, где тип указывается первым.»

0

30

> Я затрагиваю ваши бизнес-интересы?

Когда я дал Вам один хороший совет в форме вопроса, а может быть там была и рекомендация, не буду лазать по темам и отматывать назад, чтобы проверить. Вы сказали, что это срач. Срач был рядом, но хороший вопрос и совет Вы пропустили. Теперь я Вам дал второй ключ для понимания Вашей ошибки, и Вы увидели в этом только атаку. Я не могу Вам помочь, Вы меня всё равно не услышите. То, как Вы делаете свой проект - лучше бы Вы вообще его не делали. Делаете по Даннингу-Крюгеру и укрепляете собой в общественном сознании образ тех, кто программирует на русском, как недотёп. Т.е. наносите вред той идее, в которую я вложил силы и здоровье. Кроме того, Вы работаете для своего удовольствия, а не для блага России. И сил Вам на задуманное Вами вполне хватит, верно? Значит, Вам не нужен попутный ветер моих добрых пожеланий, я его потрачу на что-нибудь другое.

Но дам последний совет, правда, не зная Ваших истинных мотивов, он может быть мимо кассы: идите в подмастерья к А.Н.Терехову в его проект РуСи, если он Вас возьмёт. Меня вот не взял. Либо к А.Недоре в его Тривиль, он скорее возьмёт, мне кажется. Потому что сами Вы ни черта не смыслите в разработке языков программирования. Когда опыта поднаберётесь - тогда и будете делать своё.

Соответственно, и конструктива по Вашему проекту я Вам не дам. Зачем мне помогать Вам, если Вы мне не помогаете, а вредите? За Ваше удовольствие платите сами.

Отредактировано БудДен (2024-10-12 19:27:38)

0


Вы здесь » Применение искинов - шоссе империализма (Стенгазета русификаторов ИТ) » другое разное » ИванАс пишет язык, похожий на Си или Паскаль