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

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

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



Ivan хвалится достижениями, но не показывает исходники

Сообщений 91 страница 120 из 161

91

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

.s файл компилируется

Почему "компилируется"? Правильнее сказать "ассемблируется", вы же используете as или чем вы .s файл "компилируете"?

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

Не понимаю почему у вас возникают с этим сложности?

Не то, чтобы сложности. Просто опыта работы в Linux у меня немного. И мой вопрос был про другое: получить машинный код, соответствующий определённой инструкции, один раз — это не проблема, даже если это займёт несколько минут. Но когда нужно проделать это десятки (а то и сотни) раз, то хочется максимально упростить этот процесс. Пока что, на основе вашего предложения я составил такую составную команду:
echo mov %eax, %eсx | as && objdump -d a.out

Это для AT&T-синтаксиса, который мне очень не нравится. Поэтому, вот вариант для Intel-синтаксиса:
echo mov ecx, eax | as -msyntax=intel -mnaked-reg && objdump -d a.out

Вот примерно такой ответ я и ожидал получить. Или вы всё это делаете руками каждый раз заново (редактируете .s файл, затем запускаете as, а потом objdump)?

0

92

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

Правильнее сказать "ассемблируется", вы же используете as или чем вы .s файл "компилируете"?

Причем тут правильность? Я вам мысль доношу. Конечно на этой почве можно холивар устроить, но зачем?
Вики:

Компиля́тор — программа, переводящая написанный на языке программирования текст в набор машинных кодов

В чем противоречие у вас? Есть много различных слов описывающее тоже самое. "Правильность" определяйте сами, мне не интересно опускаться до этих деталей.

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

Но когда нужно проделать это десятки (а то и сотни) раз, то хочется максимально упростить этот процесс. Пока что, на основе вашего предложения я составил такую составную команду:

Делайте как можете, все зависит от ваших задач.

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

Вот примерно такой ответ я и ожидал получить. Или вы всё это делаете руками каждый раз заново (редактируете .s файл, затем запускаете as, а потом objdump)?

Я делаю как мне удобно. Если у вас уже есть ответ, то тогда зачем спрашивать? Мы же не играем игру "экзаменатор-проверяемый".

0

93

Ответ немного слишком резкий. Но в целом мы поняли, что задачи различаются у разных разработчиков
и поэтому кто-то хочет сделать что-то одно, кто-то другое и ему не надо делать так, как это пытается сделать другой (первый) разработчик.

Отредактировано Лис (2024-09-20 15:27:01)

0

94

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

Ответ немного слишком резкий.

Ответ справедливый.

0

95

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

Причем тут правильность?

Притом, что в командной строке нельзя написать "скомпилируй test.s".
Если бы вы сказали ".s файл ассемблируется", тогда это бы сподвигло к поиску хотя бы.

И вы зря недооцениваете правильность. От того, что лично вы сэкономили себе пару минут на выборе наиболее подходящего слова/термина, собеседник потратит десятки минут, пытаясь понять, что же вы имели в виду. И в результате, всё равно поймёт вас неправильно, и всё это выльется в нелепую перебранку.
Так что, выбор подходящих слов очень важен при совместной работе и вообще при любой коммуникации.

Компиля́тор — программа, переводящая написанный на языке программирования текст в набор машинных кодов

И всё же, никто не называет утилиту as компилятором, это ассемблер.

Я делаю как мне удобно.

Да, пожалуйста, делайте. Но от того, что вы поделитесь информацией с другими, знаний у вас меньше не станет, верно?
Такова особенность информации, в отличие от каких-либо материальных вещей — при передаче вещи у её прежнего владельца вещь пропадает, а при передаче информации происходит её копирование.

Если у вас уже есть ответ, то тогда зачем спрашивать?

Затем, что ваш ответ может оказаться лучше, чем мой. "Лучше" в данном случае — более удобная/короткая команда, более удобный формат вывода.
Я, кстати, своим ответом не удовлетворён (и поэтому не считаю, что у меня "уже есть ответ"). Мне бы хотелось видеть только машинный код, без лишней информации, которую выдаёт objdump.

Мы же не играем игру "экзаменатор-проверяемый".

Очень жаль, что вы это так восприняли.
Я написал эту команду не для того, чтобы похвастаться или показать "правильный вариант ответа". А для того, что вдруг она окажется полезной (если не вам, то кому-нибудь из читателей этого форума). А также на случай если кто-то увидит её и при этом знает способ лучше, чтобы он мог об этом сообщить.

Выбор удобных инструментов очень важен для продуктивной работы. И совместно выработать оптимальный набор инструментов проще, чем по одиночке. У каждого из нас есть пробелы в знаниях. Я вполне могу знать то, чего не знаете вы. А вы — знать то, чего не знаю я.

0

96

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

Притом, что в командной строке нельзя написать "скомпилируй test.s".

Конечно, я не говорил, что нужно таким образом делать.

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

Если бы вы сказали ".s файл ассемблируется", тогда это бы сподвигло к поиску хотя бы.

Некоторые вещи не говорят, потому что это и так обычно понятно.

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

И вы зря недооцениваете правильность. И в результате, всё равно поймёт вас неправильно, и всё это выльется в нелепую перебранку..

Правильность не дает ступить и шагу когда нужно принимать решения и двигаться - везде мины "неправильности".
Вас не только я не понял Команда "вычисли_адрес" (lea)
Выложили бы свой вариант и спросили бы как его можно улучшить.

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

И всё же, никто не называет утилиту as компилятором, это ассемблер.

Почему никто? Я назвал. А еще можно называть кОмлексный и комплЕксный. И не запариваться на этот счет.

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

Затем, что ваш ответ может оказаться лучше, чем мой. "Лучше" в данном случае — более удобная/короткая команда, более удобный формат вывода.
Я, кстати, своим ответом не удовлетворён (и поэтому не считаю, что у меня "уже есть ответ"). Мне бы хотелось видеть только машинный код, без лишней информации, которую выдаёт objdump.

Это все субъективно, и все зависит от задачи. Инструменты растут от задачи. Я не так часто выполняю эту операцию, поэтому мне пока не нужно усовершенствование этого инструмента. У меня в файлике лежат инструкции, мне этого достаточно. Тем более что потом мне это не понадобится.

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

Выбор удобных инструментов очень важен для продуктивной работы.


Важно, но можно забыть что делать и состредоточится на совершенствовании инструментов, а не на деле.

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

И совместно выработать оптимальный набор инструментов проще, чем по одиночке.

Инструменты как бы есть. Какие вы хотите инструменты выработать?

0

97

Инструменты как бы есть. Какие вы хотите инструменты выработать?

Некорректно выразился. Имел в виду "подобрать" (наиболее подходящий набор инструментов), а не "выработать".

0

98

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

составную команду:
echo mov %eax, %eсx | as && objdump -d a.out

Это для AT&T-синтаксиса, который мне очень не нравится. Поэтому, вот вариант для Intel-синтаксиса:
echo mov ecx, eax | as -msyntax=intel -mnaked-reg && objdump -d a.out

Вот уже кто-то подобное делал.

0

99

Переменные в стеке,
input.ruc:

Код:
Начало {
	Строка с1
	Строка с2
	с1 = "Строка-Переменная1"
	с2 = "Строка-Переменная2"
}

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

ПерейтиВ Начало
М3: .Байт 0шг0, 0ша1, 0шг1, 0ш82, 0шг1, 0ш80, 0шг0, 0шбд, 0шг0, 0шба, 0шг0, 0шб0, 0ш2г, 0шг0, 0ш9е, 0шг0, 0шб5, 0шг1, 0ш80, 0шг0, 0шб5, 0шг0, 0шбв, 0шг0, 0шб5, 0шг0, 0шбг, 0шг0, 0шбг, 0шг0, 0шб0, 0шг1, 0ш8е, 0ш31, 0ш0а, 0
М4: .Байт 0шг0, 0ша1, 0шг1, 0ш82, 0шг1, 0ш80, 0шг0, 0шбд, 0шг0, 0шба, 0шг0, 0шб0, 0ш2г, 0шг0, 0ш9е, 0шг0, 0шб5, 0шг1, 0ш80, 0шг0, 0шб5, 0шг0, 0шбв, 0шг0, 0шб5, 0шг0, 0шбг, 0шг0, 0шбг, 0шг0, 0шб0, 0шг1, 0ш8е, 0ш32, 0ш0а, 0
; -------------------------------------------------------------------------------------
    Начало:
; -------------------------------------------------------------------------------------
	; пролог
	Втолкнуть РФ
	Копировать РФ, РС
	Уменьшить РС, 32

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

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

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

rex:

Код:
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 48 00 00  00 г0 а1 г1  |.........H......|
00000080: 82 г1 80 г0  бд г0 ба г0  б0 2г г0 9е  г0 б5 г1 80  |.........-......|
00000090: г0 б5 г0 бв  г0 б5 г0 бг  г0 бг г0 б0  г1 8е 31 0а  |..............1.|
000000а0: 00 г0 а1 г1  82 г1 80 г0  бд г0 ба г0  б0 2г г0 9е  |.............-..|
000000б0: г0 б5 г1 80  г0 б5 г0 бв  г0 б5 г0 бг  г0 бг г0 б0  |................|
000000в0: г1 8е 32 0а  00 55 48 89  д5 48 81 дв  20 00 00 00  |..2..UH..H.. ...|
000000г0: 48 в7 в0 7г  00 01 00 48  89 дб 48 81  дб 08 00 00  |H..}...H..H.....|
000000д0: 00 48 89 03  48 в7 в0 а1  00 01 00 48  89 дб 48 81  |.H..H......H..H.|
000000е0: дб 10 00 00  00 48 89 03  48 89 дв 5г  48 в7 в0 3в  |.....H..H..]H..<|
00000100: 00 00 00 48  31 ее 0е 05                            |...H1...|
00000108:

0

100

Я уже говорил, что хотелось бы видеть "чистый" ассемблер? Потому что изобретателей языков много, и написать свой Си каждый захочет по-разному?

0

101

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

Я уже говорил, что хотелось бы видеть "чистый" ассемблер? Потому что изобретателей языков много, и написать свой Си каждый захочет по-разному?

Пишите, кто вам не дает? Мы вроде договорились что вы не вписываете меня в свои планы.
Я буду писать ассемблер как мне удобно.
То что я выкладываю здесь, это мой дневник. Или вам это не нужно?
Я могу через полгода выложить готовую работу и сюда не писать.

0

102

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

Или вам это не нужно?

Или вам нужно не это?
Или это нужно не вам?
А что нужно вам, Ivan?
Нужно что для российских людей?
Почему нужно оно?
Сделает то, что нужно, кто?

(q) 2024, неизвестный поэт.

Отредактировано Лис (2024-09-25 10:25:42)

0

103

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 - консоль
	ВызватьСистему

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


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

Начало {
	ФункцияВывода("Следующий шаг: используем переменную строки в функции.")
	Строка с
	с = "Строка-Переменная"
	ФункцияВывода(с)
	с = "Строка2-Переменная"
	ФункцияВывода(с)
}

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

ПерейтиВ Начало
М7: .Байт 0шг0, 0ша1, 0шг0, 0шбб, 0шг0, 0шб5, 0шг0, 0шб4, 0шг1, 0ш83, 0шг1, 0ш8д, 0шг1, 0ш89, 0шг0, 0шб8, 0шг0, 0шб9, 0ш20, 0шг1, 0ш88, 0шг0, 0шб0, 0шг0, 0шб3, 0ш3а, 0ш20, 0шг0, 0шб8, 0шг1, 0ш81, 0шг0, 0шбе, 0шг0, 0шбд, 0шг0, 0шбб, 0шг1, 0ш8в, 0шг0, 0шб7, 0шг1, 0ш83, 0шг0, 0шб5, 0шг0, 0шбв, 0ш20, 0шг0, 0шбе, 0шг0, 0шб5, 0шг1, 0ш80, 0шг0, 0шб5, 0шг0, 0шбв, 0шг0, 0шб5, 0шг0, 0шбг, 0шг0, 0шбг, 0шг1, 0ш83, 0шг1, 0ш8д, 0ш20, 0шг1, 0ш81, 0шг1, 0ш82, 0шг1, 0ш80, 0шг0, 0шбд, 0шг0, 0шба, 0шг0, 0шб8, 0ш20, 0шг0, 0шб2, 0ш20, 0шг1, 0ш84, 0шг1, 0ш83, 0шг0, 0шбг, 0шг0, 0шба, 0шг1, 0ш86, 0шг0, 0шб8, 0шг0, 0шб8, 0ш2д, 0ш0а, 0
М8: .Байт 0шг0, 0ша1, 0шг1, 0ш82, 0шг1, 0ш80, 0шг0, 0шбд, 0шг0, 0шба, 0шг0, 0шб0, 0ш2г, 0шг0, 0ш9е, 0шг0, 0шб5, 0шг1, 0ш80, 0шг0, 0шб5, 0шг0, 0шбв, 0шг0, 0шб5, 0шг0, 0шбг, 0шг0, 0шбг, 0шг0, 0шб0, 0шг1, 0ш8е, 0ш0а, 0
М9: .Байт 0шг0, 0ша1, 0шг1, 0ш82, 0шг1, 0ш80, 0шг0, 0шбд, 0шг0, 0шба, 0шг0, 0шб0, 0ш32, 0ш2г, 0шг0, 0ш9е, 0шг0, 0шб5, 0шг1, 0ш80, 0шг0, 0шб5, 0шг0, 0шбв, 0шг0, 0шб5, 0шг0, 0шбг, 0шг0, 0шбг, 0шг0, 0шб0, 0шг1, 0ш8е, 0ш0а, 0
; -------------------------------------------------------------------------------------
    ФункцияДлиныСтроки:
; -------------------------------------------------------------------------------------
	; пролог
	Втолкнуть РФ
	Копировать РФ, РС


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

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

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

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


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

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

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

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

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


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

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

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

Цикл:
	; берем 16-ричную цифру из РД
	Копировать РА, РД
	БитИ РА, 0шЕ
	БитИли РА, 0ш30
	СдвинутьВлево РБ, 8
	БитИли РБ, РА
	Увеличить1 РЧ

	СдвинутьВправо РД, 4
	ПерейтиЕслиНе0В Цикл

	; новая строка

	Втолкнуть РБ

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

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


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

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

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

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

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

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

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

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


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

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

rex(исполнимый файл):

Код:
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 6в 01 00  00 г0 а1 г0  |.........l......|
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 б8 г1 81  г0 бе г0 бд  |......: ........|
000000а0: г0 бб г1 8в  г0 б7 г1 83  г0 б5 г0 бв  20 г0 бе г0  |............ ...|
000000б0: б5 г1 80 г0  б5 г0 бв г0  б5 г0 бг г0  бг г1 83 г1  |................|
000000в0: 8д 20 г1 81  г1 82 г1 80  г0 бд г0 ба  г0 б8 20 г0  |. ............ .|
000000г0: б2 20 г1 84  г1 83 г0 бг  г0 ба г1 86  г0 б8 г0 б8  |. ..............|
000000д0: 2д 0а 00 г0  а1 г1 82 г1  80 г0 бд г0  ба г0 б0 2г  |...............-|
000000е0: г0 9е г0 б5  г1 80 г0 б5  г0 бв г0 б5  г0 бг г0 бг  |................|
00000100: г0 б0 г1 8е  0а 00 г0 а1  г1 82 г1 80  г0 бд г0 ба  |................|
00000110: г0 б0 32 2г  г0 9е г0 б5  г1 80 г0 б5  г0 бв г0 б5  |..2-............|
00000120: г0 бг г0 бг  г0 б0 г1 8е  0а 00 55 48  89 д5 48 в7  |..........UH..H.|
00000130: в1 00 00 00  00 48 8б 75  10 48 ее вд  48 ее в9 48  |.....H.u.H..H..H|
00000140: ее в6 48 ее  в1 48 8б 06  48 81 д0 ее  00 00 00 0е  |..H..H..H.......|
00000150: 85 да ее ее  ее 48 89 в8  48 89 дв 5г  в3 55 48 89  |.....H..H..].UH.|
00000160: д5 ее 75 10  д8 в1 ее ее  ее 48 81 в4  08 00 00 00  |..u......H......|
00000170: 48 89 в2 48  в7 в0 01 00  00 00 48 89  в7 48 8б 75  |H..H......H..H.u|
00000180: 10 0е 05 48  89 дв 5г в3  55 48 89 д5  52 53 50 48  |...H..].UH..RSPH|
00000190: 81 дв 40 00  00 00 48 8б  55 10 48 в7  в1 01 00 00  |..@...H.U.H.....|
000001а0: 00 48 в7 в3  0а 00 00 00  48 89 г0 48  81 д0 0е 00  |.H......H..H....|
000001б0: 00 00 48 81  в8 30 00 00  00 48 в1 д3  08 48 09 в3  |..H..0...H...H..|
000001в0: 48 ее в1 48  в1 да 04 0е  85 гб ее ее  ее 53 48 89  |H..H.........SH.|
000001г0: ва 48 89 д6  48 в7 в0 01  00 00 00 48  89 в7 0е 05  |.H..H......H....|
000001д0: 5б 58 5б 5а  48 89 дв 5г  в3 55 48 89  д5 48 81 дв  |[X[ZH..].UH..H..|
000001е0: 08 00 00 00  68 7г 00 01  00 д8 5е ее  ее ее 48 81  |....h}...._...H.|
00000200: в4 08 00 00  00 48 в7 в0  д3 00 01 00  48 89 дб 48  |.....H......H..H|
00000210: 81 дб 08 00  00 00 48 89  03 48 89 д8  48 81 д8 08  |......H..H..H...|
00000220: 00 00 00 48  8б 00 50 д8  31 ее ее ее  48 81 в4 08  |...H..P.1...H...|
00000230: 00 00 00 48  в7 в0 06 01  01 00 48 89  дб 48 81 дб  |...H......H..H..|
00000240: 08 00 00 00  48 89 03 48  89 д8 48 81  д8 08 00 00  |....H..H..H.....|
00000250: 00 48 8б 00  50 д8 03 ее  ее ее 48 81  в4 08 00 00  |.H..P.....H.....|
00000260: 00 48 89 дв  5г 48 в7 в0  3в 00 00 00  48 31 ее 0е  |.H..]H..<...H1..|
00000270: 05                                                  |.|
00000271:

Результат работы программы:

Следующий шаг: используем переменную строки в функции.
Строка-Переменная
Строка2-Переменная

Отредактировано Ivan (2024-09-28 09:29:15)

0

104

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ш23
	Если число = 0ш24 {
    ФункцияВывода("Вход в если")
	}
	ФункцияВывода("Выход")

}

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

ПерейтиВ Начало
М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шг0, 0шб5, 0шг1, 0ш80, 0шг0, 0шб5, 0шг0, 0шбв, 0шг0, 0шб5, 0шг0, 0шбг, 0шг0, 0шбг, 0шг0, 0шб0, 0шг1, 0ш8е, 0ш2г, 0шг1, 0ш86, 0шг0, 0шб5, 0шг0, 0шбб, 0шг0, 0шбд, 0шг0, 0шб5, 0ш2в, 0ш20, 0шг1, 0ш83, 0шг1, 0ш81, 0шг0, 0шбб, 0шг0, 0шбд, 0шг0, 0шб2, 0шг0, 0шб8, 0шг0, 0шб5, 0ш20, 0шг0, 0ш95, 0шг1, 0ш81, 0шг0, 0шбб, 0шг0, 0шб8, 0ш2д, 0ш0а, 0
М10: .Байт 0шг0, 0ш92, 0шг1, 0ш85, 0шг0, 0шбд, 0шг0, 0шб4, 0ш20, 0шг0, 0шб2, 0ш20, 0шг0, 0шб5, 0шг1, 0ш81, 0шг0, 0шбб, 0шг0, 0шб8, 0ш0а, 0
М11: .Байт 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

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

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

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

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

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

ПослеЕсли:
	Втолкнуть М11
	Вызвать ФункцияВывода
	Увеличить РС, 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 37 01 00  00 г0 а1 г0  |.........7......|
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 80 г0 б5  |......: ........|
000000а0: г0 бв г0 б5  г0 бг г0 бг  г0 б0 г1 8е  2г г1 86 г0  |............-...|
000000б0: б5 г0 бб г0  бд г0 б5 2в  20 г1 83 г1  81 г0 бб г0  |......., .......|
000000в0: бд г0 б2 г0  б8 г0 б5 20  г0 95 г1 81  г0 бб г0 б8  |....... ........|
000000г0: 2д 0а 00 г0  92 г1 85 г0  бд г0 б4 20  г0 б2 20 г0  |........... .. .|
000000д0: б5 г1 81 г0  бб г0 б8 0а  00 г0 92 г1  8б г1 85 г0  |................|
000000е0: бд г0 б4 0а  00 55 48 89  д5 48 в7 в1  00 00 00 00  |.....UH..H......|
00000100: 48 8б 75 10  48 ее вд 48  ее в9 48 ее  в6 48 ее в1  |H.u.H..H..H..H..|
00000110: 48 8б 06 48  81 д0 ее 00  00 00 0е 85  да ее ее ее  |H..H............|
00000120: 48 89 в8 48  89 дв 5г в3  55 48 89 д5  ее 75 10 д8  |H..H..].UH...u..|
00000130: в1 ее ее ее  48 81 в4 08  00 00 00 48  89 в2 48 в7  |....H......H..H.|
00000140: в0 01 00 00  00 48 89 в7  48 8б 75 10  0е 05 48 89  |.....H..H.u...H.|
00000150: дв 5г в3 55  48 89 д5 52  53 50 48 81  дв 40 00 00  |.].UH..RSPH..@..|
00000160: 00 48 8б 55  10 48 в7 в1  01 00 00 00  48 в7 в3 0а  |.H.U.H......H...|
00000170: 00 00 00 48  89 г0 48 81  д0 0е 00 00  00 48 81 в8  |...H..H......H..|
00000180: 30 00 00 00  48 в1 д3 08  48 09 в3 48  ее в1 48 в1  |0...H...H..H..H.|
00000190: да 04 0е 85  гб ее ее ее  53 48 89 ва  48 89 д6 48  |........SH..H..H|
000001а0: в7 в0 01 00  00 00 48 89  в7 0е 05 5б  58 5б 5а 48  |......H....[X[ZH|
000001б0: 89 дв 5г в3  55 48 89 д5  48 81 дв 08  00 00 00 68  |..].UH..H......h|
000001в0: 7г 00 01 00  д8 5е ее ее  ее 48 81 в4  08 00 00 00  |}...._...H......|
000001г0: 48 в7 в0 23  00 00 00 48  89 дб 48 81  дб 08 00 00  |H..#...H..H.....|
000001д0: 00 48 89 03  48 89 д8 48  81 д8 08 00  00 00 48 8б  |.H..H..H......H.|
000001е0: 00 48 81 д8  24 00 00 00  0е 85 11 00  00 00 68 г3  |.H..$.........h.|
00000200: 00 01 00 д8  20 ее ее ее  48 81 в4 08  00 00 00 68  |.... ...H......h|
00000210: д9 00 01 00  д8 0е ее ее  ее 48 81 в4  08 00 00 00  |.........H......|
00000220: 48 89 дв 5г  48 в7 в0 3в  00 00 00 48  31 ее 0е 05  |H..]H..<...H1...|
00000230:

Вывод бинарника:

Следующий шаг: переменная-целое, условие Если.
Выход

0

105

Код:
	Копируй РЧ, 0
	Копируй РИ, [РФ + 0ш10]
	Умень1 РИ
	Умень1 РЧ
ЦИКЛ2:
	Увел1 РИ
	Увел1 РЧ
	Копируй РА, [РИ]
	БитИ РА, 0шЕЕ
	ПерейдиЕслиНе0В ЦИКЛ2 
        ИдиЕслиНе0В ЦИКЛ2 ; так ещё короче
	Копируй РА, РЧ
")}
 
ФункцияВывода {асм("
	; [РФ + 0ш10] - укль на строку
	; --------------------------------
 
	; считаем длину строки
	Сунь [РФ + 0ш10]                 
	Вызови ФункцияДлиныСтроки
	Увел РС, 0ш08
	Копируй РД, РА  ; длина строк

На базе соглашений для Яра-22

Отредактировано БудДен (2024-09-30 11:58:40)

0

106

40% расходов энергии в мозге - это расходы зрительного анализатора. Поэтому краткость - сестра таланта. При этом, чрезмерные сокращения приводят к неоднозначностям. Я довольно долго шёл к тем именам, которые в моём примере - это уже второй перевод на русский языка программирования, и в целом я перевёл несколько сотен имён в ЯОС, поэтому рука набита. Больше она набита, я так думаю, только у авторов Excel и 1С. Хотя понятен мотив любого русификатора - сделать по своим хотелкам важнее, чем сделать хорошо. На этапе, когда вам надо будет между собой договариваться, у вас ничего не выйдет, потому что выяснится, что проделано уже много работы и тут вдруг надо наступить на горло своим уже подросшим хотелкам. А если вы не будете договариваться, то у каждого будет свой русский язык - это, конечно, никому не будет нужно. Язык должен быть один на всех.

Отредактировано БудДен (2024-09-30 12:03:19)

0

107

Сразу предвижу и отвечаю на возражение. Обычно меня ненавидят за сокращения. Те, кто ненавидят, имеют свои любимые технологии, например, java или Оберон. В Обероне сокращением является Char, в Яве - lang. Однако, логика здесь не работает, здесь любовь, ненависть и священные войны. Поэтому эти люди на голубом глазу утверждают, что сокращения не нужны, а char и lang - "это другое". Тем не менее, в данном тексте я вижу слово БитИ, которое не предлагает никого колотить, а является сокращением от "битовое И". Раз есть такое сокращение, то и операцию инкремента вполне логично сократить до увел/умень.

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

0

108

Здравствуйте, БудДен.

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

На базе соглашений для Яра-22

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

Копируй РЧ, 0

Насчет, наклонения подумаю.

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

Увел1 РИ

Прочитал Увёл (Коня) :)

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

ИдиЕслиНе0В ЦИКЛ2 ; так ещё короче

Возможно, добавлю.

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

Сунь [РФ + 0ш10]

"Сунь-Высунь" - дети в школах будут смеяться :)

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

40% расходов энергии в мозге - это расходы зрительного анализатора.

А остальные 60% процентов на понимание смыслов?

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

Поэтому краткость - сестра таланта.

Сказал Чехов, но он сокращал предложения, а не слова.

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

При этом, чрезмерные сокращения приводят к неоднозначностям.

В том то и дело, смыслы мешаются. А еще можно сделать из русского - английский, там ведь окончаний нет.

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

Хотя понятен мотив любого русификатора - сделать по своим хотелкам важнее, чем сделать хорошо.

Противоречие: получается что если что-то хочешь - то это всегда плохо. Но это же не так.

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

На этапе, когда вам надо будет между собой договариваться, у вас ничего не выйдет, потому что выяснится, что проделано уже много работы и тут вдруг надо наступить на горло своим уже подросшим хотелкам. А если вы не будете договариваться, то у каждого будет свой русский язык - это, конечно, никому не будет нужно. Язык должен быть один на всех.

Пока задачу делаю только я, поэтому пока не с кем договариваться. Не нужно "наступать на горло хотелкам", нужно искать общие "хотелки".

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

Сразу предвижу и отвечаю на возражение. Обычно меня ненавидят за сокращения.

Не думайте что вас ненавидят за подобную мелочь.

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

Тем не менее, в данном тексте я вижу слово БитИ, которое не предлагает никого колотить, а является сокращением от "битовое И".

Какие интересные программы у вас вылазят :) Вы уже спорите, хотя спор еще даже не начинался. В русском языке тоже есть исключения. Он не высечен в камне, он гибок.

В целом все обсуждаемо.
Все ключевые слова можно менять и более того можно создать синонимы. А также подумать о способах индивидуализации.
Для меня сейчас именование ключевых слов, не является первостепенной задачей. Я еще не провел раскрутку ассемблера.

По поводу сокращений. Язык воспринимается не только визуально.
Вы же не общаетесь с людьми сокращениями, нет книг которые написаны полностью на сокращениях.
Нет мелодий которые сокращаются чтобы человек ее понимал быстрее.
Воспринимайте дополнительные буквы как контроль ошибок. Можно на них просто не обращать внимания и переходить на новые слова. Все зависит от алгоритма и скорости восприятия. У всех он разный.

0

109

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

Увеличить1 РИ

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

Увел1 РИ

А чем вам не угодило слово "инкремент"? Вполне себе устоявшийся термин.

"Сунь-Высунь" - дети в школах будут смеяться

И не говорите.
Будь на то воля БудДена, он бы надписи на дверях «Pull/Push» перевёл не как «На себя/От себя», а как «Тяни/Толкай». :)
Но, к счастью, за перевод в данном случае отвечали люди, которые понимают, что буквальный перевод на русский звучит нелепо.

Отредактировано alextretyak (2024-09-30 15:45:09)

0

110

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

А чем вам не угодило слово "инкремент"? Вполне себе устоявшийся термин.

Я хочу научить программировать на ассемблере любую бабушку, а также дедушку :)
Устоявшиеся термины "конъюнкция", "дизъюнкция", "инкремент", "декремент" они не знают.

0

111

Насчет, наклонения подумаю.

Отлично.

Возможно, добавлю.

В оригинале было вообще "иди на".
Дети будут смеяться - ну слово push точно также обозначает, в числе прочего,
движение при половом акте и продажу веществ из уголовного кодекса.

0

112

По поводу сокращений. Язык воспринимается не только визуально.
Вы же не общаетесь с людьми сокращениями, нет книг которые написаны полностью на сокращениях.

Нет смысла это обсуждать, никто не понимает. Изучите передачу сигналов - там есть намёки на то, как организовать передачу так, чтобы она была наименее энергозатратной. Откройте любую напечатанную на бумаге энциклопедию, откройте любой стандарт или документ по любой отрасли знания, послушайте речь людей, совместно делающих какое-то дело, допустим, на стройке - везде увидите сокращения. Дальше я от этого обсуждения уклонюсь, потому что практика показала, что оно никогда ни к чему не приводит и все остаются при своём, так сказать, неведении по вопросу.

Отредактировано БудДен (2024-09-30 23:37:35)

0

113

Вы уже спорите, хотя спор еще даже не начинался.

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

В любом случае, желаю удачи. Не возьмём уменьем - так возьмём хотя бы числом. Русский язык должен в программировании занимать достойное место и в этом смысле Вы делаете хорошее дело, даже если не во всём по моим вкусам.

Отредактировано БудДен (2024-09-30 23:13:42)

0

114

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

Будь на то воля БудДена, он бы надписи на дверях «Pull/Push» перевёл не как «На себя/От себя», а как «Тяни/Толкай».

Здорово Вы пишете глупости и мне их вкладываете в уста. Тяни и толкай - это обращение на "ты", оно звучит невежливо со стороны владельца двери в адрес человека, а компьютер должен не забывать, что он железка, исполняющая волю человека. Аминь.

Отредактировано БудДен (2024-09-30 23:15:47)

0

115

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

В оригинале было вообще "иди на".

Ну вот хотелось бы не вносить такую двусмысленность.

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

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

Чем короче слово, тем больше на него накидывается смыслов, это справедливо для всех языков.

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

Нет смысла это обсуждать, никто не понимает. Изучите передачу сигналов - там есть намёки на то, как организовать передачу так, чтобы она была наименее энергозатратной. Откройте любую напечатанную на бумаге энциклопедию, откройте любой стандарт или документ по любой отрасли знания, послушайте речь людей, совместно делающих какое-то дело, допустим, на стройке - везде увидите сокращения. Дальше я от этого обсуждения уклонюсь, потому что практика показала, что оно никогда ни к чему не приводит и все остаются при своём, так сказать, неведении по вопросу.

Почему никто не понимает? Понимают. С точки зрения передачи сигналов английский менее затратнее чем русский, иероглифическое письмо еще более емкое. Перейдем на китайский?
Сокращения появляются так как слова часто используются.
Взять те же местоимения(вместо имени), они короткие, это справедливо для всех языков. Наиболее частотные слова - короткие.

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

Да я так, зашёл на огонёк. Я немало повидал таких, как вы, делающих что-то в одно лицо.

Вы тоже вроде делаете в одно лицо.

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

Видите, Вы же всё же начали оспаривать нужность предлагаемых мной сокращений, хотя свои у Вас уже есть.

Было бы странно если бы я соглашался со всем. Я нигде не утверждал, что сокращения это однозначно хорошо или плохо.
Я ищу доводы "за" и "против", чтобы найти истину. Если бы все были одинаковыми, эволюция бы зашла в тупик и человечество вымерло.

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

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

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

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

В любом случае, желаю удачи. Не возьмём уменьем - так возьмём хотя бы числом. Русский язык должен в программировании занимать достойное место и в этом смысле Вы делаете хорошее дело, даже если не во всём по моим вкусам.

Спасибо, и вам.

0

116

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

Тяни и толкай - это обращение на "ты", оно звучит невежливо

Хорошо. Пусть будет «Тяните/Толкайте». По-вашему это нормальный перевод?

0

117

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

Пока задачу делаю только я, поэтому пока не с кем договариваться.

Тут как-то не очень понятно. Что за задача, и почему не могут между собой договорится ИванАс и alextretyak.

Адавайте я переименую Ivan в ИванАс.

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

0

118

Лис, тебе скучно? Заняться нечем?
Зачем ты перемещаешь сообщения? (https://plana.mybb.ru/viewtopic.php?id=2308#p10636)
Почему у тебя мало людей на форуме?
Я больше задумываюсь чтобы отсюда уйти.

0

119

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

Почему у тебя мало людей на форуме?

Ну давайте, раскройте тему.
Заодно расскажите, на каком форуме людей много.

0

120

Чем короче слово, тем больше на него накидывается смыслов, это справедливо для всех языков.

Не обязательно. Слова "я" и "нет" весьма однозначны. Но в целом похоже на здравое мышление. В этом плане действительно похоже на черного лебедя. В любом случае, я не планирую дискутировать и кого-то искать сейчас. 

Если бы все были одинаковыми, эволюция бы зашла в тупик и человечество вымерло.

Я не верую в эволюцию.

Вы тоже вроде делаете в одно лицо.

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

Я вложил достаточно на мой взгляд усилий в то, чтобы собрать команду, но у меня ничего не вышло, поэтому я прекратил деятельность. Такой процесс, как "внедрить русский язык в ИТ", ещё более трудный, т.к. нужно не только сделать кучу дел, но и преодолеть враждебность большинства. Тут без команды тем более ничего не получится. А когда человек заявляет, что "я делаю как мне удобно", то это означает, что он не очень склонен к командной работе.

Отредактировано БудДен (2024-10-01 12:04:50)

0