1

Тема: OFF: Про ассемблер

Ассемблер, он же "простой" алгоритм, в нём много излишнего.

serzh82saratov, что «излишнего» есть в ассемблере?

2

Re: OFF: Про ассемблер

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

3

Re: OFF: Про ассемблер

serzh82saratov пишет:

Там суть в том, что человек раскладывал простейшие операции\алгоритмы на ассемблере в виде машинного кода. И показывал как их можно логически упростить и сократить на том же машинном коде. Дело доходило до того что сам код сокращался в двое, так же как и его быстродействие улучшалось в 2-3 раза.

Пример приведите.

4

Re: OFF: Про ассемблер

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

5

Re: OFF: Про ассемблер

Вообще-то, ассемблер — это язык программирования низкого уровня . А транслятор — приложение, преобразующее исходный код на языке программирования в объектный код.

Видел парочку "продвинутых" ассемблеров, типа объектноориентированные и т.д.

Каких именно?

6 (изменено: YMP, 2014-01-04 08:26:51)

Re: OFF: Про ассемблер

serzh82saratov пишет:

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

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

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

7

Re: OFF: Про ассемблер

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

serzh82saratov пишет:

Дело доходило до того что сам код сокращался в двое, так же как и его быстродействие улучшалось в 2-3 раза.

это скорее касательно стиля написания программ (точнее оптимизации кода), нежели "излишеств" ассемблера, - г-н alexii прав.

8

Re: OFF: Про ассемблер

alexii, во-первых, я обозвал ассемблер транслятором в ответ на заявление, что он - интерпретатор, в данном контексте не вижу ошибки; во-вторых, программа интерпретатор имеет полное право называться ассемблером, да, собственно, они так и называются; в-третьих, диалекты, или, если угодно, реализации ассемблера, помимо того общего, что объединяет их в одно семейство, имеют и некоторые различия (когда я писал на масме, переводить тасмовские примеры было не всегда элементарно), поэтому, на мой взгляд, корректнее говорить о семействе языков программирования и конкретных реализациях, неразрывно связанных с трансляторами. А на "задвинутых" не писал - так, любопытствовал. Кажется, один из них назывался не то Monade, не то как-то похоже (гуглить лень).

А вообще - не понял, о чём Вы и greg zakharov со мной-то спорите? Вроде, я в своём ответе земляку был на Вашей стороне, или главное - спорить?

9

Re: OFF: Про ассемблер

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

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

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

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

Это мои предположения. Если тут присутствуют глубокие заблуждения, прошу не пинать ногами, а просто объяснить что не правильно.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

10

Re: OFF: Про ассемблер

serzh82saratov, ещё раз: нет никакой интерпретации. Совсем. Строчка на ассемблере (кто в теме - не придерайтесь к словам, я упрощаю) однозначно, без дополнительной обработки, переводится в машинный код. Тождество. Одна строка - одна команда процессора. Поэтому и обратный перевод возможен, в отличие от высокоуровневых языков, где одна команда в исходниках может породить что угодно в машинном представлении. И, если версия ассемблера актуальна для используемого процессора, такой строчкой в исходнике может быть представлена ЛЮБАЯ команда процессора. С ЛЮБЫМИ параметрами. Потому и оптимизировать нечего: одна строка == одна команда, и обратно. И если можно что-то поменять в бинарнике, то это же точно так же можно поменять и в исходнике. Поскольку - тождество.

11

Re: OFF: Про ассемблер

Serge Yolkin пишет:

alexii, во-первых, я обозвал ассемблер транслятором в ответ на заявление, что он - интерпретатор, в данном контексте не вижу ошибки;

Транслятором является как интерпретатор, так и компилятор. Просто действуют они по-разному.

Serge Yolkin пишет:

во-вторых, программа интерпретатор имеет полное право называться ассемблером, да, собственно, они так и называются;

Совсем не понял.

Serge Yolkin пишет:

…или главное - спорить?

Цель — договориться о корректной терминологии.

12

Re: OFF: Про ассемблер

Я не в теме. Потому ещё глупый вопрос:

без дополнительной обработки,

и

переводится в машинный код.

Каким именно образом переводится? Как, когда и что этот перевод осуществляет?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

13

Re: OFF: Про ассемблер

alexii пишет:

Транслятором является как интерпретатор, так и компилятор. Просто действуют они по-разному.

Это в какой википедии написано? Меня несколько иначе учили. Три типа обработчиков исходного кода, как три источника и три составных части марксизма...

Совсем не понял.

Что? Программа masm.exe называется Macro Assembler, tasm.exe - Turbo Assembler... Это я и имел в виду. А священные войны за кошерную терминологию - это не моё. Здесь я на редкость демократичен.

serzh82saratov, боян, но, надеюсь, хорошо забытый:
команда начальника: "Чёзанах?"
интерпретация: сотрудник думает: "в следующий раз надо не умничать, а делать что говорят...";
компиляция: бухгалтерия срезает половину премии сотрудника, сотрудник, получив в кассе машинный код, делает что говорят;
трансляция: сотрудник расстёгивает ширинку и правда - чё?

Ассемблер переводит исходник буквально, даже не так, как переводят с русского на английский - там обработка текста есть, а так, как текстовый файл переводится из кодировки UTF-16 LE в UTF-16 BE и обратно. Однозначно и без изменения имеющейся информации. Переводит, разумеется, программа-транслятор.

14

Re: OFF: Про ассемблер

Serge Yolkin пишет:

Меня несколько иначе учили. Три типа обработчиков исходного кода,

Расскажите.

15 (изменено: Serge Yolkin, 2014-01-04 23:34:52)

Re: OFF: Про ассемблер

Расскажите.

См. боян в предыдущем посте

В самом низу - трансляция - буквальный перевод мнемоник (не команд!) в машинный код. Текстовый исходник -> трансляция -> бинарный файл (обычно obj).
Выше - компиляция - перевод "литературный": команды имеют немашинную (предполагается - человеческую) семантику, результирующий код зависит от контекста (одна и та же команда, использованная, скажем, в начале файла и в подпрограмме даст разный результат в машинном коде (область видимости, стэк и т.д.), соответственно и обработка производится в несколько проходов - анализируется контекст, блоки команд (процедуры, подпрограммы) команды и т.д. Трансляция на последнем этапе присутствует, но не из ассемблера, а из некоего промежуточного кода, зависящего от конкретного компилятора. На выходе (обычно) - готовый экзешник.
На самом верху (по оторванности от железа) - интерпретация - текстовый исходник обрабатывается интерпретатором налету, без преобразования в бинарный файл. В те времена - шелл да комманд.ком...

16

Re: OFF: Про ассемблер

Serge Yolkin, ясно. В моём понимании, транслятор — это программа, осуществляющая преобразование программы, написанной на одном языке, в программу, написанную на другом языке. Её частными случаями являются и компилятор, и интерпретатор. Первый осуществляет преобразование программы целиком, второй — по инструкциям, как правило — построчно (иногда бывают и оригинальные идеи — компилирующий интерпретатор, как в QBasic).

17

Re: OFF: Про ассемблер

alexii, мир меняется, возможно, мы оба првы... Но интерпретатор - всё же среда исполнения, а не преобразователь

18

Re: OFF: Про ассемблер

Но интерпретатор - всё же среда исполнения, а не преобразователь smile

С первым согласен. Со вторым — нет.