Pull to refresh

Comments 29

А теперь вопрос: неужели получившаяся программа получилась более простой, чем на традиционных языках программирования?
Проще всего — не жить.
Цель была другая :)
Если я правильно понял, то у него нет меток никаких, записываются абсолютные адреса переходов. Тогда это не язык ассемблера, а самый обычный машинный код (только что идентификаторы команд текстовые, а не числовые) и его интерпретатор.
Это ассемблер.
Удачи вам в программировании на «ассемблере» без символьных адресов. Вставка/удаление инструкций приведет к необходимости правки всех адресов переходов.
По-вашему, разница между языком ассемблера и машинными кодами лишь в наличии относительной адресации? И добавление к машинным кодам оной делает из них ассемблер? Процитировав вас же, пожелаю вам удачи в программировании на таком ассемблере.
Я говорю не про относительную адресацию, а про символьную адресацию (переход по метке, именование регионов данных). Я утверждаю, что программирование на языке ассемблера без символьной адресации — это то же самое, что программировать в машинных кодах.
И в чем принципиальное отличие между меткой и относительной адресацией? Вы же сами говорили о проблеме присутствия лишь абсолютной адресации.
Есть у вас замечательный цикл на три экрана ассемблера с отрицательным относительным переходом в конце. Хотите вставить инструкцию в середину цикла? Тогда вам придется пересчитывать отнсительный адрес перехода. Каноническая упрощенная реализация ассемблера в первом проходе как раз собирает информацию о метках, чтобы вторым проходом генерить все переходы.
Первые свои программы на ассемблере я писал на листочке в клеточку. Компьютера у меня тогда не было. Трассировал тоже в голове. Когда дошло дело до железа перевел все (уже отлаженное в голове и многократно правленное) из мнемоник в хексы, расставил адреса и вбил через шестнадцатеричную клавиатуру программатора в ПЗУ.

не путайте чтоль язык и инструмент его реализующий.
И да, я считаю что разница между ними в следующих вещах. Ассемблер дает:
  1. мнемонические имена для команд, регистров
  2. генерация нетривиальных комманд (режими адрессации, префиксы и т.д.)
  3. символы (адресация, переходы, загрузка данных)

Первые два пункта — не беда, немного практики и просто наизусть уже запоминаешь, что значит 0x55 (push rbp для x86_64).

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

Процессор x86 читает байты- мненмоники команд и потом — операнды.
Предположим на минуточку, если бы в памяти кода, вместо числовых кодов — были бы строки, которые процессор разбирал.
Да, у нас были бы читаемые мнемоники, но суть от этого не особо изменилась — это все равно машинный язык.

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

Поскольку дополнительного преобразования (изменения структуры программы, блоков, разворачивание процедур, подстановки адресов) не делается, то назвать это Ассемблером будет громко.
В дополнение этому, я не вижу здесь никаких команд, которые будут понятны только ассемблеру, и при этом не будут являться выходным машинным кодом. Вроде директив.
И кто-нибудь уже ответит мне, чем же по вашему отличается данный Exembly (авторское название проекта) от интерпретатора машинного кода кроме наличия мнемонических имен для команд и регистров?
«Мнемонические имена для комманд и регистров» — и есть язык ассемблера.
Поверьте, вам все уже тоже устали объяснять, что символы, может, и дали миру счастья, но язык ассемблера — это именно то, что я написал.
Ок, теперь я понял вашу точку зрения.
Даже не знаю, гением его назвать или все-таки дураком.
Неужели, не было более простого решения для этой задачки?
А кому интересны простые решения? Это олимпиада, а не бизнес соревнование по принципу «быстрей, технологичней, дешевле»
Ну так на олимпиаде нужно решать задачи максимально быстро и рационально, как раз-таки.

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

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

Разумеется, мой алгоритм и рядом не стоял.

Так вот после окончания олимпиады на разборе этой задачи был показан алгоритм, схожий с моим, и была фраза:
Еще ее, конечно, можно было решить с помощью хеш-функций, <много умных слов>, но это уже излишние усложнения и трата времени.
Ну это зависит от конкурсных условий конкретной олимпиады. Если нет ограничения по времени, но есть масса других, а в приоритет идет оригинальный подход, то почему бы и нет?
Когда-то я на память знал содержимое 6 байтного reboot.com для MS-DOS…
EA 00 F0 00 00 (пять байтов, полез в таблицы посмотреть опкод)? Чем CD 18 плох (помню по памяти)?
Зачем целых 6 байт? Насколько я помню, нужно было два:

CLI (FA)
HLT (F4)
Это во-первых не ребут, во-вторых HLT на 8086 не было.
Sign up to leave a comment.

Articles