Форум: "Прочее";
Текущий архив: 2007.03.04;
Скачать: [xml.tar.bz2];
ВнизАссемблер это что? Компилятор/интерпритатор/нечто уникальное? Найти похожие ветки
← →
wHammer © (2007-02-08 09:24) [0]Помогите разобраться пожалуйста? Информация на различных информационных сайтах весьма противоречива.
С наилучшими...
Александр.
← →
Алхимик © (2007-02-08 09:28) [1]http://ru.wikipedia.org/wiki/%D0%90%D1%81%D1%81%D0%B5%D0%BC%D0%B1%D0%BB%D0%B5%D1%80
← →
wHammer © (2007-02-08 09:35) [2]
> Алхимик © (08.02.07 09:28) [1]
Это все понятно. Но я могу тоже привести http://www.softcraft.ru/translat/lect/t01-02.shtml и отттуда:
Транслятор - обслуживающая программа, преобразующая исходную программу, предоставленную на входном языке программирования, в рабочую программу, представленную на объектном языке.
Приведенное определение относится ко всем разновидностям транслирующих программ. Однако у каждой из таких программ могут иметься свои особенности по организации процесса трансляции. В настоящее время трансляторы разделяются на три основные группы: ассемблеры, компиляторы и интерпретаторы.
Интересно личное мнение форумчан по этому поводу?
← →
palva © (2007-02-08 09:35) [3]Компилятор.
← →
@!!ex © (2007-02-08 09:42) [4]Язык программирования? :)
← →
TUser © (2007-02-08 09:43) [5]> Интересно личное мнение форумчан по этому поводу?
Ну, что ж. Скажу тебе свое личное мнение - мне пофиг. Хоть горшком назови, только в печь не ставь.
← →
wHammer © (2007-02-08 09:44) [6]
> Ну, что ж. Скажу тебе свое личное мнение - мне пофиг. Хоть
> горшком назови, только в печь не ставь.
Понятно, а мне вот нет.
← →
Сергей М. © (2007-02-08 10:02) [7]
> wHammer © (08.02.07 09:44) [6]
Ассемблер - это, прежде всего, язык программирования.
Любую среду программирования, использующую этот язык для создания программ, часто тоже называют "ассемблером", такие среды используют механизм компилирующего типа, т.к. результатом ассемблирования является код, ориентированный на исполнение той или иной исполняющей системой, например, процессором.
← →
Сергей М. © (2007-02-08 10:06) [8]
> wHammer
В нек.случаях ассемблерные программы интерпретируются, например, для пошаговой отладки программного кода в условиях отсутствия целевой исполняющей системы (режим эмуляции целевой системы команд)
← →
wHammer © (2007-02-08 10:14) [9]
> Сергей М. © (08.02.07 10:02) [7]
Язык ассемблера. Язык программирования низкого уровня.
Язык получил свое название от слова ассемблер (lang-en|assembler - сборщик) - названия транслятора (компилятора) c языка ассемблера. Язык ассемблера, в некоторых случаях, для краткости, называют "ассемблером" (а что-то связанное с ним - "ассемблерный"), но в общем случае это неправильно. Также, сам ассемблер (программу) никогда не называют -компилятором языка ассемблера или компилятором ассемблера (разве что в редких случаях).
← →
wHammer © (2007-02-08 10:16) [10]...отсюда http://ru.wikipedia.org/wiki/%D0%AF%D0%B7%D1%8B%D0%BA_%D0%B0%D1%81%D1%81%D0%B5%D0%BC%D0%B1%D0%BB%D0%B5%D1%80%D0%B0
← →
TUser © (2007-02-08 10:20) [11]А какая разница, как классифицировать этот объект. О чем речь идет - и там всем понятно.
← →
wHammer © (2007-02-08 10:27) [12]
> TUser © (08.02.07 10:20) [11]
Да нет, не все, т.к. интересует процесс преобразования ассемблер-программы в машинные коды. Как мне кажется, этот процесс - практичеки типичный процесс компиляции, ну за некоторыми исключениями. Но есть иное мнение, например:
Ассемблер (транслятор языка ассемблера), своего рода компилятор – берётся программа, написанная на языке ассемблера (исходный текст) и переводится в машинный код. Однако есть некоторые различия. Когда компилятор делает перевод с одного языка на другой, предполагается получить программу на целевом языке, который будет управлять программой теми же самыми методами и давать те же самые результаты. Подобно выбору между языками программирования различного строения, но выполняющих одну и ту же работу, компилятор имеет свободу выбора – одновременно предполагая, что выбор будет оптимальным. Различные компиляторы, переводящие программы с языка на язык могут давать весьма различные результаты, даже при том, что программы будут делать одно и тоже. В этом плане танслятор языка ассемблера немного отличается, так как инструкции языка ассемблера точно соответствуют машинным кодам, на которые они переведены. В большинстве случаев мы точно знаем какие байты будут переведены языком ассемблера. В данном случае работа транслятора подобна работе интепритатора. Это наиболее очевидно при рассмотрении следующей директивы:
db 90h
котороя указывает транслятору на необходимость поместить один байт с информацией (90h) в текущую позицию в шестнадцетиричном коде. В данном случае работа транслятора ассемблера больше похожа на работу интерпритатора, а машинный код произведённый транслятором – просто перевод с языка исходной программы.
Когда кто-то пишет программу на языке ассемблера, он обычно думает, что программа, которую он пишет, написана на машинном коде – ассемблере, только выполняется эта задача по созданию программы, на более простом к восприятию машинном языке, обеспечивающем более лёгкое запоминание имён инструкций (называемых мнемоникой). Ещё этот машинный язык разрешает маркировать различные места в памяти, а затем вычислять соответствующие адреса и смещения автоматически. При написании некоторой простой последовательности инструкций на языке ассемблера:
mov ax, 4C00h
int 21h
никто обычно не думает о том, как интерпретируются эти директивы, каким получается машинный код.
Но фактически имеются две программы, слитые вместе (компилятор и интерпритатор). Это наделяет ассемблер новым качеством: инструмент, который, оказывается и компилятором и интерпритатором одновременно.
Рассмотрим две простые команды языка ассемблера. Они прибавляют EAX к самому себе, повторяя этот процесс пять раз. Первая команда (mov) использует ECX, чтобы считать количество повторений:
mov ecx,5
square: add eax,eax
loop square
Транслятор переводит три инструкции в машинный код и приводит их в действие, которое добавляет EAX к самому себе. Это повторяется пять раз, пока процессор выполняет машинный код. Каждый проход уменьшает ECX на единицу и, в случае если ECX – все еще не ноль, переходит обратно к метке (square).
Так как ассемблер является и компилятором и интерпритатором одновременно, то ни один из этих терминов не даёт полного представления о работе транслятора языка ассемблера.
Оригиал:
Assembler as a compiler and assembler as an interpreter
The implementations of programming languages are divided into two main classes: compilers and interpreters. The interpreter is a program which takes a program written in some language and executes it. And the compiler is simply a program that translates program written in one language into another one - the most commonly the target language is the machine language, so the result can be then executed by the machine.
From this point of view, the assembler appears to be a kind of compiler - it takes the program written in assembly language (the source code) and translates it into machine language. However there are some differences. When compiler does the translation from one language to another, it is expected to make the program in the target language that will run (when executed by some interpreter or processor) the same way and give the same results. But in exact details like choosing between many possible language constructs that would do the same, the compiler has freedom of choice - while it is expected to make possibly the best choice, the various compilers translating between the same two languages may give quite different results, even though the programs will do the same. The assembler is a bit different in this aspect, as there is a kind of exact correspondence between the instructions of assembly language and the instructions of machine language they are translated to. In fact in most cases you know what bytes exactly will be generated by the assembly language construct. This is what in fact makes assembler behave a bit like interpreter. This is the most obvious in the case of directives like:
db 90h
which tells the assembler to put the one byte with value 90h at the current position in the output code. This is more like if the assembler was an interpreter, and the machine language generated by assembler was simply an output of the interpreted program. Even the instructions, which in fact represent the machine language instructions they are translated to, can be considered to be actually the directives that tell assembler to generate the opcode of given instruction and place it at current position in output.
Also one can put no instruction mnemonics at all into the source code, and use only DB directives to create, for instance, just some text. In such case the output is not a program at all, as it doesn"t contain any machine language instructions. This makes assembler appear to be really an interpreter.
But when someone writes the program in assembly language, he usually thinks about the program he writes in machine language - assembler just makes the task of creating program in machine language easier, providing easy to memorize names for instructions (called mnemonics for that very reason), allowing to label various places in memory and other values with names and then calculating the appropriate addresses and displacements automatically. When writing some simple sequence of instructions in assembly language:
mov ax,4C00h
int 21h
one usually doesn"t think about them as interpreted directives that generate the machine language instructions. One does think as if they actually were the instructions which they generate, one thinks in terms of the program he writes with the assembly language, not the program he writes in assembly language. But there are actually those two programs merged together, two different layers of thinking in one source code. This makes assembler a new quality: a tool that appears to be both compiler and interpreter at the same time.
← →
wHammer © (2007-02-08 10:30) [13]...
Объяснение не очень, но ключевая фраза здесь:
Так как ассемблер является и компилятором и интерпритатором одновременно, то ни один из этих терминов не даёт полного представления о работе транслятора языка ассемблера.
← →
@!!ex © (2007-02-08 10:40) [14]Бред. Или у енмя уж совсем не правильное определение "интрепритатора" забито.
← →
evvcom © (2007-02-08 10:41) [15]> [12] wHammer © (08.02.07 10:27)
> В данном случае работа транслятора ассемблера больше похожа
> на работу интерпритатора
Чушь какая-то. В моем понимании:
1. Компилятор - программа, преобразующая исходный код в объектный.
2. Транслятор - то же, что и компилятор, за исключением того, что выполняется однозначное преобразование: одна инструкция - одна машинная команда.
3. Интерпретатор - программа, которая преобразует исходный текст или некий оптимизированный, но все же еще виртуальный, во время выполнения в некие инструкции и далее их выполняет.
Транслятор с языка ассемблера не выполняет исходный код (текст), написанный программистом, потому называть его интерпретатором просто в корне неверно.
← →
Desdechado © (2007-02-08 11:00) [16]Сложности с толкованием связаны, имхо, с тем, что ранние компиляторы выполняли трансляцию не сразу в машинные коды, а в промежуточный ассемблерный код, который уже дополнительно транслировался в машинный. Эта двухфазность (не считая компоновки) и вызывает "три основные группы: ассемблеры, компиляторы и интерпретаторы".
Такая двухфазность хорошо документирована на советских многотерминальных машинных комплексах, которые я застал в нашем ХНУРЭ.
← →
Сергей М. © (2007-02-08 11:19) [17]
> evvcom © (08.02.07 10:41) [15]
1. Совершенно верно. Следует лишь уточнить, что результирующий "объектный код" нельзя рассматривать без жесткой привязки к целевой исполняющей системе, каковой м.б. как "железо" (процессор), так и "софт" (виртуальная машина, например, java-машина)
2. Не согласен. Трансляторы выполняют преобразование языковых конструкций входного языка программирования в логически эквивалентные им языковые конструкции выходного языка программирования. Среды же транслирующего типа, как правило, сочетают в себе функции транслятора и компилятора - программа, к примеру, на Фортране в ходе обработки средой транслируется сначала в промежуточное языковое представление (низкоуровневое, традиционно ассемблерное), а уж затем (опционально) компилирует промежуточный рез-т в объектный код.
3. Ассемблерные среды интерпретирующего типа имеют право на существование и довольно широко распространены, скажем, для интерактивной трассировки/отладки на эмулирующих виртуальных машинах кода для целевых машин с иной системой команд.
← →
Плохиш © (2007-02-08 11:23) [18]Классная ветка, не думал, что философов уже тоже заставляют изучать программирования, са ещё и на ассемблере :-))
← →
wHammer © (2007-02-08 11:46) [19]
> Desdechado © (08.02.07 11:00) [16]
> Сложности с толкованием связаны, имхо, с тем, что ранние
> компиляторы выполняли трансляцию не сразу в машинные коды,
> а в промежуточный ассемблерный код, который уже дополнительно
> транслировался в машинный. Эта двухфазность (не считая компоновки)
> и вызывает "три основные группы: ассемблеры, компиляторы
> и интерпретаторы".
> Такая двухфазность хорошо документирована на советских многотерминальных
> машинных комплексах, которые я застал в нашем ХНУРЭ.
Вот это, как мне кажется основное. Спасибо. Теперь более менее понятно откуда ноги растут.
> Плохиш © (08.02.07 11:23) [18]
> Классная ветка, не думал, что философов уже тоже заставляют
> изучать программирования, са ещё и на ассемблере :-))
Это почемуже сразу такое предвзятое обо мне мнение? :))
← →
evvcom © (2007-02-08 12:58) [20]> [17] Сергей М. © (08.02.07 11:19)
> 2. Не согласен.
Ну пусть будет так. Не возражаю. Мое понимание в общем основывалось на некотором опыте знакомства в былые времена с ассемблером и только. С Фортраном же я близко не знакомился. В принципе твое пояснение лишь немного расширило мое представление о трансляторах. Согласен, что я слишком узко его изобразил в [15] :)
← →
Сергей М. © (2007-02-08 13:06) [21]
> evvcom © (08.02.07 12:58) [20]
Строго говоря, сравнивать или противопоставлять "Трансляторы/Компиляторы" vs "Интерпретаторы" не уместно.
← →
evvcom © (2007-02-08 13:15) [22]> [21] Сергей М. © (08.02.07 13:06)
Угу, согласен. Я и не пытался. Кстати,
> [17] Сергей М. © (08.02.07 11:19)
> 3. Ассемблерные среды интерпретирующего типа
я бы все ж назвал просто эмуляторами. Понятное дело, что все они интерпретирующего типа, причем совсем неважно, что берется за источник: текст на языке ассемблера или "исполняемый" код.
← →
Чапаев © (2007-02-08 14:29) [23]> Бред. Или у енмя уж совсем не правильное определение "интрепритатора"
> забито.
У етбя слова с ошибками. Откуда правильному определению взяться? %-)
> [17] Сергей М. © (08.02.07 11:19)
Компилятор и интерпретатор -- два вида трансляторов, которые так или иначе исходный текст программы транслируют в машинный код.
← →
evvcom © (2007-02-08 14:30) [24]> [23] Чапаев © (08.02.07 14:29)
> Компилятор и интерпретатор -- два вида трансляторов, которые
> так или иначе исходный текст программы транслируют в машинный
> код.
Это интерпретатор транслирует в машинный код? LOL :-)
← →
Сергей М. © (2007-02-08 14:46) [25]
> Чапаев © (08.02.07 14:29) [23]
Интерпретатор ничего не "транслирует", он интерпретирует вх.языковые конструкции "шаг за шагом", вызывая при этом на выполнение уже имеющиеся участки нативного кода, реализующего логику текущей интерпретируемой языковой конструкции.
← →
Чапаев © (2007-02-08 16:04) [26]> Это интерпретатор транслирует в машинный код?
Если программа исполняется, то она так или иначе транслируется в машинный код, нес па?
← →
Сергей М. © (2007-02-08 16:09) [27]
> Чапаев © (08.02.07 16:04) [26]
>
> Если программа исполняется
Кем исполняется ? Процессором ? Виртуальной машиной ?
Определись уже ...
← →
evvcom © (2007-02-08 16:12) [28]> [26] Чапаев © (08.02.07 16:04)
Программа эта исполняется в интерпретаторе, т.е. в тех функциях/процедурах, которые к программисту-пользователю не имеют никакого отношения, а значит и к машинному коду. Вот если бы ты сказал "к коду виртуальной машины" про интерпретатор, я б еще согласился, но с выражением "машинный код" AFAIK связывают именно инструкции для процессора.
> нес па?
это на каком? Французский я не знаю совсем.
← →
Чапаев © (2007-02-08 16:17) [29]> Кем исполняется ? Процессором ? Виртуальной машиной ?
А процессор -- не "виртуальная машина для машинного кода"? ;-)
← →
Чапаев © (2007-02-08 16:19) [30]> [29] Чапаев © (08.02.07 16:17)
+ туда же проц, который нативно исполняет жабовский байт-код. Не помню только, сумели его сделать или плюнули
← →
Сергей М. © (2007-02-08 16:40) [31]
> Чапаев © (08.02.07 16:17) [29]
> процессор -- не "виртуальная машина для машинного кода"?
С каких пор "железный" процессор стал "виртуальной машиной" ?
> проц, который нативно исполняет жабовский байт-код
Пример такого "железного" процессора ты, разумеется, не приведешь, ибо "не помнишь")
← →
Чапаев © (2007-02-08 16:57) [32]> Пример такого "железного" процессора ты, разумеется, не
> приведешь, ибо "не помнишь")
Могу, конечно, поискать в стопке журналов статью об этом... Но, как я уже сказал, я даже не знаю, довели ли разработку до конца.
← →
Чапаев © (2007-02-08 17:05) [33]> [32] Чапаев © (08.02.07 16:57)
Гм... Статью нашёл в "Компьютерном обозрении" №10 за 1998 год.
Вот ещё статьи нагуглил: http://www.osp.ru/nets/1997/01/142118, http://www.osp.ru/os/1999/01/179635.
← →
Stexen © (2007-02-08 18:39) [34]
> Помогите разобраться пожалуйста? Информация на различных
> информационных сайтах весьма противоречива.
Компилятор - это программа
Интерпритатор - программа
Ассемблер - язык программирования низкого уровня - стандарта вообще говоря нет, для каждого процессора обычно свой... Хотя, вообще говоря, последнее утверждение вполне противоречиво, все опять таки же будет зависеть от компилятора, но с другой стороны для создания компилятора для языка ассемблера под конкретный процессор должен быть стандарт, т.о. для каждого процессора могут быть свои стандарты, соответсвенно Язык ассемблера некий абстрактный класс, имеющий множество классов детей - являющимися реализациями языка под конкретный тип процессора. А вообще wasm.ru есть!
Может ничего нового не сказал(лень все перечитывать) так что извените за флуд если что...
← →
oldman © (2007-02-08 18:43) [35]Анекдот из прошлого:
Купили мы как-то новую версию ассемблера.
Скопировали ее на диск.
Папку-то надо как-то назвать...
Так и назвали - ASS (блин, мозгов не хватило назвать TASM)
Пришел зав.отделом.
Долго пялился в монитер с медленно расширяющимися глазами.
Потом аккуратно подвел курсор к данной папке и нажал Ентер.
А ТАМ АССЕМБЛЕР!!! :))))))))))))
← →
GrayFace © (2007-02-08 19:10) [36]Уж точно не интерпретатор.
wHammer © (08.02.07 10:27) [12]
Бред какой-то. Вначале автор четко пишет, что интерпретатор исполняет программу, потом говорит о какой-то однозначности соответствия, чотя ежу понятно, Ассемблер ничего не исполняет, значит не удволитворяет его же определению.
evvcom © (08.02.07 10:41) [15]
3. Интерпретатор - программа, которая преобразует исходный текст или некий оптимизированный, но все же еще виртуальный, во время выполнения в некие инструкции и далее их выполняет.
Преобразовывать он ничего не должен. Если преобразует, то это уже Just in Time компилятором попахивает.
Чапаев © (08.02.07 16:04) [26]
Если программа исполняется, то она так или иначе транслируется в машинный код, нес па?
Не она. Исполняется код интерпретатора, программа ни к чему не приобразуется.
← →
GrayFace © (2007-02-08 19:11) [37]P.S. ИМХО
← →
oldman © (2007-02-08 19:14) [38]
> GrayFace © (08.02.07 19:10) [36]
> Чапаев © (08.02.07 16:04) [26]
> Если программа исполняется, то она так или иначе транслируется
> в машинный код, нес па?
> Не она. Исполняется код интерпретатора, программа ни к чему
> не приобразуется.
Слова спиши...
Буду потомкам показывать в назидание...
← →
oldman © (2007-02-08 19:18) [39]
> GrayFace © (08.02.07 19:10) [36]
Без обид:
По анкете - 20 лет.
Пора бы уж где-нибудь почитать, чем компилятор отличается от интерпретатора и как они работают с исходным текстом программы...
Чтобы больше вышеизложенного тобой не писать в форум программистов.
← →
GrayFace © (2007-02-08 22:25) [40]oldman © (08.02.07 19:18) [39]
По анкете - 20 лет.
19.
oldman © (08.02.07 19:18) [39]
Пора бы уж где-нибудь почитать, чем компилятор отличается от интерпретатора и как они работают с исходным текстом программы...
http://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B0%D1%82%D0%BE%D1%80
Видимо, Вы плохо читали мой пост.
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2007.03.04;
Скачать: [xml.tar.bz2];
Память: 0.59 MB
Время: 0.052 c