Тема: OFF: Про ассемблер
Ассемблер, он же "простой" алгоритм, в нём много излишнего.
serzh82saratov, что «излишнего» есть в ассемблере?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Ассемблер, он же "простой" алгоритм, в нём много излишнего.
serzh82saratov, что «излишнего» есть в ассемблере?
Не могу найти ссылку, уж извините, не хочется быть голословным, но придётся.
Там суть в том, что человек раскладывал простейшие операции\алгоритмы на ассемблере в виде машинного кода. И показывал как их можно логически упростить и сократить на том же машинном коде. Дело доходило до того что сам код сокращался в двое, так же как и его быстродействие улучшалось в 2-3 раза. Излишним он называл то, что ассемблер, это всё таки интерпретатор, хоть и самый низший, но всё же. То есть интерпретируя код ассемблера в непосредственно сам машинный код для процессора, он действовал по алгоритму. Но, в большинстве случаев, код можно было бы существенно упростить\улучшить, применив простейшую человеческую логику.
Там суть в том, что человек раскладывал простейшие операции\алгоритмы на ассемблере в виде машинного кода. И показывал как их можно логически упростить и сократить на том же машинном коде. Дело доходило до того что сам код сокращался в двое, так же как и его быстродействие улучшалось в 2-3 раза.
Пример приведите.
Ассемблер - ни разу не интерпретатор, он - транслятор. А означает это, что исходник на ассемблере и машинный код могут быть сколько угодно раз транслированы туда-обратно. И если человеческая логика позволяет что-то оптимизировать в машинных кодах, то и на ассемблере эта оптимизация доступна, хотя бы дизассемблированием. Возможны проблемы с внешними макросами / библиотеками процедур, но это не проблема ассемблера. Видел парочку "продвинутых" ассемблеров, типа объектноориентированные и т.д., но это уже либо компилируемый язык, либо ассемблер со встроенными теми самыми библиотеками. Поэтому, земляк, хоть голословно, хоть нет - не убедил.
Вообще-то, ассемблер — это язык программирования низкого уровня . А транслятор — приложение, преобразующее исходный код на языке программирования в объектный код.
Видел парочку "продвинутых" ассемблеров, типа объектноориентированные и т.д.
Каких именно?
Там суть в том, что человек раскладывал простейшие операции\алгоритмы на ассемблере в виде машинного кода. И показывал как их можно логически упростить и сократить на том же машинном коде.
Не знаю, что там происходило, но вообще-то 1 инструкция ассемблера = 1 инструкция процессора. Просто вместо машинного кода, т.е. числа, используется какое-то условное имя (мнемоника), чтобы человеку проще было инструкции запомнить. Да, какой-то конкретный ассемблер может предлагать какие-то свои макросы для ускорения написания кода, например, оформление функций. Вход в процедуру, выход из неё и т.п. В каких-то случаях стандартная обвязка может быть неоптимальной, но всегда можно обойтись без неё или свою написать.
Машинный код нужен, если в ассемблере ещё нет мнемоник для каких-то инструкций процессора. Не успел ещё автор обновить свой ассемблер или забросил его.
Ассемблер по сути является символическим представлением машинного языка, именно поэтому он неразрывно связан с архитектурой процессора (логично предположить, что с внесением изменений в архитектуру последнего совершенствуется и сам язык ассемблера). Так что разговоры о "продвинутых" (или "задвинутых") версиях ассемблера - сплошная софистика, а вот:
Дело доходило до того что сам код сокращался в двое, так же как и его быстродействие улучшалось в 2-3 раза.
это скорее касательно стиля написания программ (точнее оптимизации кода), нежели "излишеств" ассемблера, - г-н alexii прав.
alexii, во-первых, я обозвал ассемблер транслятором в ответ на заявление, что он - интерпретатор, в данном контексте не вижу ошибки; во-вторых, программа интерпретатор имеет полное право называться ассемблером, да, собственно, они так и называются; в-третьих, диалекты, или, если угодно, реализации ассемблера, помимо того общего, что объединяет их в одно семейство, имеют и некоторые различия (когда я писал на масме, переводить тасмовские примеры было не всегда элементарно), поэтому, на мой взгляд, корректнее говорить о семействе языков программирования и конкретных реализациях, неразрывно связанных с трансляторами. А на "задвинутых" не писал - так, любопытствовал. Кажется, один из них назывался не то Monade, не то как-то похоже (гуглить лень).
А вообще - не понял, о чём Вы и greg zakharov со мной-то спорите? Вроде, я в своём ответе земляку был на Вашей стороне, или главное - спорить?
Ассемблер - ни разу не интерпретатор, он - транслятор. А означает это, что исходник на ассемблере и машинный код могут быть сколько угодно раз транслированы туда-обратно. И если человеческая логика позволяет что-то оптимизировать в машинных кодах, то и на ассемблере эта оптимизация доступна, хотя бы дизассемблированием. Возможны проблемы с внешними макросами / библиотеками процедур, но это не проблема ассемблера. Видел парочку "продвинутых" ассемблеров, типа объектноориентированные и т.д., но это уже либо компилируемый язык, либо ассемблер со встроенными теми самыми библиотеками. Поэтому, земляк, хоть голословно, хоть нет - не убедил.
Я ничего не утверждаю, и тем более ни кого не убеждаю, хотя бы в силу своего дилетантизма. Вообще завёл речь про это, чтобы из возможного дальнейшего обсуждения подчерпнуть знаний для себя. А так как на лицо разногласия между гуру, значит вопрос неоднозначен.
Код на ассемблере это текстовый файл. Машинный код - единицы и нули, единственное что может понять процессор.
Перед тем как запустить в работу машинный код для непосредственной обработки процессором, требуются ресурсы для интерпретации текста ассемблера в машинный код.
Машинный код это бинарный файл, он принимается в обработку процессором без предварительного выделения ресурсов на его интерпретацию.
И если человеческая логика позволяет что-то оптимизировать в машинных кодах, то и на ассемблере эта оптимизация доступна,
Человеческая логика может только заранее предусмотреть некоторые варианты того что может наваять программер, и внести это в алгоритм интерпретации текста в машинный код.
Конечно можно легко полученный машинный код преобразовать обратно в код ассемблера, через "обратный алгоритм интерпретации" того же ассемблера, но речь ведь совсем не об этом. А про то что машинный код интерпретированный ассемблером можно в большинстве случаев далее оптимизировать исходя из каждого конкретного случая.
Это мои предположения. Если тут присутствуют глубокие заблуждения, прошу не пинать ногами, а просто объяснить что не правильно.
serzh82saratov, ещё раз: нет никакой интерпретации. Совсем. Строчка на ассемблере (кто в теме - не придерайтесь к словам, я упрощаю) однозначно, без дополнительной обработки, переводится в машинный код. Тождество. Одна строка - одна команда процессора. Поэтому и обратный перевод возможен, в отличие от высокоуровневых языков, где одна команда в исходниках может породить что угодно в машинном представлении. И, если версия ассемблера актуальна для используемого процессора, такой строчкой в исходнике может быть представлена ЛЮБАЯ команда процессора. С ЛЮБЫМИ параметрами. Потому и оптимизировать нечего: одна строка == одна команда, и обратно. И если можно что-то поменять в бинарнике, то это же точно так же можно поменять и в исходнике. Поскольку - тождество.
alexii, во-первых, я обозвал ассемблер транслятором в ответ на заявление, что он - интерпретатор, в данном контексте не вижу ошибки;
Транслятором является как интерпретатор, так и компилятор. Просто действуют они по-разному.
во-вторых, программа интерпретатор имеет полное право называться ассемблером, да, собственно, они так и называются;
Совсем не понял.
…или главное - спорить?
Цель — договориться о корректной терминологии.
Я не в теме. Потому ещё глупый вопрос:
без дополнительной обработки,
и
переводится в машинный код.
Каким именно образом переводится? Как, когда и что этот перевод осуществляет?
Транслятором является как интерпретатор, так и компилятор. Просто действуют они по-разному.
Это в какой википедии написано? Меня несколько иначе учили. Три типа обработчиков исходного кода, как три источника и три составных части марксизма...
Совсем не понял.
Что? Программа masm.exe называется Macro Assembler, tasm.exe - Turbo Assembler... Это я и имел в виду. А священные войны за кошерную терминологию - это не моё. Здесь я на редкость демократичен.
serzh82saratov, боян, но, надеюсь, хорошо забытый:
команда начальника: "Чёзанах?"
интерпретация: сотрудник думает: "в следующий раз надо не умничать, а делать что говорят...";
компиляция: бухгалтерия срезает половину премии сотрудника, сотрудник, получив в кассе машинный код, делает что говорят;
трансляция: сотрудник расстёгивает ширинку и правда - чё?
Ассемблер переводит исходник буквально, даже не так, как переводят с русского на английский - там обработка текста есть, а так, как текстовый файл переводится из кодировки UTF-16 LE в UTF-16 BE и обратно. Однозначно и без изменения имеющейся информации. Переводит, разумеется, программа-транслятор.
Меня несколько иначе учили. Три типа обработчиков исходного кода,
Расскажите.
Расскажите.
См. боян в предыдущем посте
В самом низу - трансляция - буквальный перевод мнемоник (не команд!) в машинный код. Текстовый исходник -> трансляция -> бинарный файл (обычно obj).
Выше - компиляция - перевод "литературный": команды имеют немашинную (предполагается - человеческую) семантику, результирующий код зависит от контекста (одна и та же команда, использованная, скажем, в начале файла и в подпрограмме даст разный результат в машинном коде (область видимости, стэк и т.д.), соответственно и обработка производится в несколько проходов - анализируется контекст, блоки команд (процедуры, подпрограммы) команды и т.д. Трансляция на последнем этапе присутствует, но не из ассемблера, а из некоего промежуточного кода, зависящего от конкретного компилятора. На выходе (обычно) - готовый экзешник.
На самом верху (по оторванности от железа) - интерпретация - текстовый исходник обрабатывается интерпретатором налету, без преобразования в бинарный файл. В те времена - шелл да комманд.ком...
Serge Yolkin, ясно. В моём понимании, транслятор — это программа, осуществляющая преобразование программы, написанной на одном языке, в программу, написанную на другом языке. Её частными случаями являются и компилятор, и интерпретатор. Первый осуществляет преобразование программы целиком, второй — по инструкциям, как правило — построчно (иногда бывают и оригинальные идеи — компилирующий интерпретатор, как в QBasic).
alexii, мир меняется, возможно, мы оба првы... Но интерпретатор - всё же среда исполнения, а не преобразователь
Но интерпретатор - всё же среда исполнения, а не преобразователь smile
С первым согласен. Со вторым — нет.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться