Comments 29
А теперь вопрос: неужели получившаяся программа получилась более простой, чем на традиционных языках программирования?
-29
Если я правильно понял, то у него нет меток никаких, записываются абсолютные адреса переходов. Тогда это не язык ассемблера, а самый обычный машинный код (только что идентификаторы команд текстовые, а не числовые) и его интерпретатор.
-8
Это ассемблер.
+22
По-вашему, разница между языком ассемблера и машинными кодами лишь в наличии относительной адресации? И добавление к машинным кодам оной делает из них ассемблер? Процитировав вас же, пожелаю вам удачи в программировании на таком ассемблере.
+1
Я говорю не про относительную адресацию, а про символьную адресацию (переход по метке, именование регионов данных). Я утверждаю, что программирование на языке ассемблера без символьной адресации — это то же самое, что программировать в машинных кодах.
+8
И в чем принципиальное отличие между меткой и относительной адресацией? Вы же сами говорили о проблеме присутствия лишь абсолютной адресации.
-3
Есть у вас замечательный цикл на три экрана ассемблера с отрицательным относительным переходом в конце. Хотите вставить инструкцию в середину цикла? Тогда вам придется пересчитывать отнсительный адрес перехода. Каноническая упрощенная реализация ассемблера в первом проходе как раз собирает информацию о метках, чтобы вторым проходом генерить все переходы.
+5
Первые свои программы на ассемблере я писал на листочке в клеточку. Компьютера у меня тогда не было. Трассировал тоже в голове. Когда дошло дело до железа перевел все (уже отлаженное в голове и многократно правленное) из мнемоник в хексы, расставил адреса и вбил через шестнадцатеричную клавиатуру программатора в ПЗУ.
не путайте чтоль язык и инструмент его реализующий.
не путайте чтоль язык и инструмент его реализующий.
+1
И да, я считаю что разница между ними в следующих вещах. Ассемблер дает:
Первые два пункта — не беда, немного практики и просто наизусть уже запоминаешь, что значит 0x55 (push rbp для x86_64).
А вот последний пункт — это фатальная проблема при разработке сколько-нибудь сложных программ. Потому что отсутствие, например, переходов по символам, делает невозможным какое-либо редактирование программы (читай «очень-очень-очень сложным»).
- мнемонические имена для команд, регистров
- генерация нетривиальных комманд (режими адрессации, префиксы и т.д.)
- символы (адресация, переходы, загрузка данных)
Первые два пункта — не беда, немного практики и просто наизусть уже запоминаешь, что значит 0x55 (push rbp для x86_64).
А вот последний пункт — это фатальная проблема при разработке сколько-нибудь сложных программ. Потому что отсутствие, например, переходов по символам, делает невозможным какое-либо редактирование программы (читай «очень-очень-очень сложным»).
+7
Я согласен с Вами. и вот почему.
Язык ассемблера должен быть понятен человеку, но еще не машине.
Для выполнения на машине, он должен быть оттранслирован.
Процессор x86 читает байты- мненмоники команд и потом — операнды.
Предположим на минуточку, если бы в памяти кода, вместо числовых кодов — были бы строки, которые процессор разбирал.
Да, у нас были бы читаемые мнемоники, но суть от этого не особо изменилась — это все равно машинный язык.
В листе Excel — машиной является процессор выражений листа и условия в ячейках, написанные автором.
Я могу с чистой совестью утверждать, что первые четыре столбца понятны этой машине.
Поскольку дополнительного преобразования (изменения структуры программы, блоков, разворачивание процедур, подстановки адресов) не делается, то назвать это Ассемблером будет громко.
Язык ассемблера должен быть понятен человеку, но еще не машине.
Для выполнения на машине, он должен быть оттранслирован.
Процессор x86 читает байты- мненмоники команд и потом — операнды.
Предположим на минуточку, если бы в памяти кода, вместо числовых кодов — были бы строки, которые процессор разбирал.
Да, у нас были бы читаемые мнемоники, но суть от этого не особо изменилась — это все равно машинный язык.
В листе Excel — машиной является процессор выражений листа и условия в ячейках, написанные автором.
Я могу с чистой совестью утверждать, что первые четыре столбца понятны этой машине.
Поскольку дополнительного преобразования (изменения структуры программы, блоков, разворачивание процедур, подстановки адресов) не делается, то назвать это Ассемблером будет громко.
+2
В дополнение этому, я не вижу здесь никаких команд, которые будут понятны только ассемблеру, и при этом не будут являться выходным машинным кодом. Вроде директив.
0
И кто-нибудь уже ответит мне, чем же по вашему отличается данный Exembly (авторское название проекта) от интерпретатора машинного кода кроме наличия мнемонических имен для команд и регистров?
+6
«Мнемонические имена для комманд и регистров» — и есть язык ассемблера.
-3
Я устал повторять одно и то же в четвертый раз. Символы, именно символы дали миру счастье!
+1
Даже не знаю, гением его назвать или все-таки дураком.
Неужели, не было более простого решения для этой задачки?
Неужели, не было более простого решения для этой задачки?
-4
А кому интересны простые решения? Это олимпиада, а не бизнес соревнование по принципу «быстрей, технологичней, дешевле»
0
Ну так на олимпиаде нужно решать задачи максимально быстро и рационально, как раз-таки.
Почему-то я не слышал, чтобы кто-нибудь на олимпиадах быструю сортировку на асме писал.
Это мне напомнило случай, когда я был на олимпиаде школьников. Тогда я после окончания спросил у парня, который сидел рядом (он, кстати, стал победителем), как решать одну из задач. Он начал мне рассказывать про хеш-функции о многих других вещах, о которых я понятия не имел.
Разумеется, мой алгоритм и рядом не стоял.
Так вот после окончания олимпиады на разборе этой задачи был показан алгоритм, схожий с моим, и была фраза:
Еще ее, конечно, можно было решить с помощью хеш-функций, <много умных слов>, но это уже излишние усложнения и трата времени.
Почему-то я не слышал, чтобы кто-нибудь на олимпиадах быструю сортировку на асме писал.
Это мне напомнило случай, когда я был на олимпиаде школьников. Тогда я после окончания спросил у парня, который сидел рядом (он, кстати, стал победителем), как решать одну из задач. Он начал мне рассказывать про хеш-функции о многих других вещах, о которых я понятия не имел.
Разумеется, мой алгоритм и рядом не стоял.
Так вот после окончания олимпиады на разборе этой задачи был показан алгоритм, схожий с моим, и была фраза:
Еще ее, конечно, можно было решить с помощью хеш-функций, <много умных слов>, но это уже излишние усложнения и трата времени.
+1
Когда-то я на память знал содержимое 6 байтного reboot.com для MS-DOS…
+1
Sign up to leave a comment.
Assembler в 30 строк на Excel