Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
15.02.2011, 23:54
|
|
Гражданин KAZUS.RU
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 341 раз(а) в 202 сообщении(ях)
|
Re: Atmel - в цинковый ящик?!!!
"Раз пошла такая пьянка..."
Было высказано очень много суждений по поводу ассемблера, транслятора, компилятора и пр. Возможно мне удастся расставить все точки над i.
1. Трансляторы - программы, которые служат переводчиками программ, записанных на каком-либо языке в последовательность машинных команд, которые могут выполняться (это совсем необязательно) непосредственно на целевом компьютере.
Трансляторы бывают двух видов: компиляторы и интерпретаторы. Общность компиляторов и интерпретаторов состоит в том, что и для тех и для других входом является программа записанная на каком-либо языке. На этом их сходство заканчивается и эти трансляторы работают совершенно по-разному.
При использовании компиляторов этапы трансляции и выполнения программы разделены во времени, на первом этапе выполняется трансляция программы в исполняемый код (при этом требуются дополнительные программы), после чего полученная программа может быть загружена в память компьютера для исполнения. При этом нет необходимости во время исполнения полученной программы хранить в памяти программу транслятора.
При использовании интерпретатора процесс трансляции программы происходит одновременно с ее исполнением. Интерпретатор просто просматривает операторы исходной программы и сразу же их выполняет. Естественно, что при этом интерпретатор должен быть загружен в память вместе с исходной программой.
Достоинства и недостатки использования трансляторов того или другого типа вполне очевидны и рассматривать их не будем.
Продолжение следует.
|
|
|
|
16.02.2011, 00:12
|
|
Гражданин KAZUS.RU
Регистрация: 14.11.2008
Сообщений: 701
Сказал спасибо: 298
Сказали Спасибо 283 раз(а) в 193 сообщении(ях)
|
Re: Atmel - в цинковый ящик?!!!
Сообщение от omercury
|
Так я с ассемблера транслячу или компилячу?
|
Похоже трансляча компилячите
|
|
|
|
16.02.2011, 00:15
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Atmel - в цинковый ящик?!!!
Сообщение от Bill
|
Продолжение следует.
|
Вот это радует!
PHP код:
|
Языковый процессор, который построчно анализирует исходную программу и одновременно выполняет предписанные действия, а не формирует на машинном языке скомпилированную программу, которая выполняется впоследствии.[4]
|
![Рот до ушей](images/smilies/icon_doushei.gif)
отсюда:- http://ru.wikipedia.org/wiki/%D0%98%...82%D0%BE%D1%80
И ещё где-то там видел, что интерпретатор - виртуальная машина. И, соответственно "транслирует" он совсем не в то, работу чего "виртуалит"
Последний раз редактировалось omercury; 16.02.2011 в 00:19.
|
|
|
|
16.02.2011, 00:21
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Atmel - в цинковый ящик?!!!
Сообщение от kittec
|
Похоже трансляча компилячите
|
... а ещё конструячу.. ..какую-то клячу...
Между прочим - выбрать объект, нажать правую кнопку указателя "мышь" и выбрать в выпадающем меню "копировать" - это команда высокого уровня, а, выделив объект, нажать сочетание клавишь Ctrl+C - низкого...
"Остапа понесло" (12 стульев)
Мужчины! Какая разница транслируем мы или компилируем. Мы тут серьёзный вопрос решаем: заколачивать Atmel или нет? Вы тут его дружно хороните, а я, практически голыми руками и в одиночку, удерживаю на плаву. И вы отвлекаетесь на всякие глупости!
Последний раз редактировалось omercury; 16.02.2011 в 00:39.
|
|
|
|
16.02.2011, 00:23
|
|
Гражданин KAZUS.RU
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 341 раз(а) в 202 сообщении(ях)
|
Re: Atmel - в цинковый ящик?!!!
2. Ассемблер. Что это такое? Обычно под ассемблером понимают:
а) машинно-зависимый язык программирования низкого уровня. Операторы этого языка в основном (но не только) записываются в виде мнемонических обозначений машинных инструкций;
б) транслятор с языка ассемблера.
Если не делать различий между этими двумя понятиями, то нередко возникает путаница.
Итак, ассемблер как язык программирования. Язык ассемблера как и любой другой язык имеет свой синтаксис и свою семантику. Поскольку ассемблер является машинно-зависимым, то для одной и той же целевой платформы может существовать множество различных языков, отличающихся между собой как синтаксисом, так и семантикой. При этом и результаты трансляции (выход) могут быть различными. Единственное сходство (да и то не всегда) между различными языками состоит в единой системе мнемонических обозначений машинных инструкций. В итоге получается, что программа, записанная на одном языке, не может быть странслирована программой ассемблера для другого языка. Для примера возьмем тот же AVR. Для него имеется по крайней мере три известных мне ассемблера - Atmel, IAR, WinAVR. Все они несовместимы между собой ни по входу, ни выходу (возможно я тут слишком категоричен). Можно привести примеры и для других целевых платформ.
Продолжение следует.
|
|
|
|
16.02.2011, 01:01
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Atmel - в цинковый ящик?!!!
Всем - до завтра.
|
|
|
|
16.02.2011, 01:10
|
|
Гражданин KAZUS.RU
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 341 раз(а) в 202 сообщении(ях)
|
Re: Atmel - в цинковый ящик?!!!
Ассемблер как транслятор. Поскольку процессы трансляции (ассемблирования) программы и ее исполнения разделены во времени, то транслятор с языка ассемблера можно считать компилятором. Интерпретация полученной программы происходит на аппаратном уровне самим процессором. Кстати, имеются еще программные эмуляторы, которые интерпретируют программы для другого процессора на уровне машинных инструкций.
Далее, простая замена в процессе трансляции мнемоник команд их двоичными значениями это самая простая и далеко не единственная часть работы транслятора (ассемблера). Как и трансляторы для любых других языков, ассемблер содержит в себе и лексический анализатор (сканер), и синтаксический анализатор, и процедуры работы с таблицами символов, и пр. и пр. Единственным отличием ассемблера от остальных компиляторов ЯВУ является принцип трансляции 1-›1 а не 1-›N. Т.е. ассемблер транслирует 1 оператор входного языка в 1 машинную инструкцию.
Не следует также забывать, что помимо трансляции мнемоник команд, ассемблер позволяет освободить программиста от необходимости вручную вычислять адреса переменных в памяти, адреса меток переходов и т.д. и т.п. Как ни странно, но есть ассемблеры, которые даже выполняют некоторую "оптимизацию". А о наличии возможности макро обработки во многих ассемблерах я вообще не говорю.
Выход ассемблера. В зависимости от того, что получается на выходе в результате трансляции, ассемблеры делятся на абсолютные и перемещающие.
Абсолютные ассемблеры выдают на выходе программу в абсолютном формате готовую к исполнению. Ассемблер сам выполняет привязку адресов в программе к физическим адресам в памяти.
Перемещаемые ассемблеры выдают на выходе код в перемещаемом формате. Это код не может быть непосредственно загружен в память для исполнения, поскольку помимо инструкций процессора он содержит много дополнительной информации, необходимой для компоновки программы с помощью специально дополнительной программы - линкера (linkage editor). Линкер осуществляет сборку единой программы из множества объектных модулей и выдает на выходе программу готовую к выполнению.
В общем, об этом можно говорить и писать много. Но интересующимся лучше найти информацию по системному программированию. Там все подробно расписано.
Конец.
|
|
|
Эти 2 пользователя(ей) сказали Спасибо Bill за это сообщение:
|
|
|
16.02.2011, 02:23
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.10.2010
Сообщений: 1,752
Сказал спасибо: 158
Сказали Спасибо 640 раз(а) в 364 сообщении(ях)
|
Re: Atmel - в цинковый ящик?!!!
Сообщение от Bill
|
...
В итоге получается, что программа, записанная на одном языке, не может быть странслирована программой ассемблера для другого языка.
...
|
А реализации С(С++) прям такие совместимые меж собой. Прям ваще.
Из DLLки, скомпиллированой VC вытянуть функцию и то зачастую
можно разве что используя GetProcAdreess. Совместимость просто офигеть какая.
|
|
|
|
16.02.2011, 09:05
|
|
Почётный гражданин KAZUS.RU
Регистрация: 30.06.2005
Сообщений: 3,399
Сказал спасибо: 5
Сказали Спасибо 431 раз(а) в 306 сообщении(ях)
|
Re: Atmel - в цинковый ящик?!!!
Сообщение от Ar-Gen-Tum
|
А реализации С(С++) прям такие совместимые меж собой. Прям ваще.
Из DLLки, скомпиллированой VC вытянуть функцию и то зачастую
можно разве что используя GetProcAdreess. Совместимость просто офигеть какая.
|
Про совместимость на бинарном уровне никто не говорит. Ее и не должно быть.
Совместимость на уровне синтаксиса присутствует и она полная,иначе это уже не Си/Си++.
Все существующие пакеты разработки не являются компиляторами Си/С++. Они являются средами разработки имеющими в основе компилятор Си.Эта формулировка освобождает их от соблюдения совместимости между собой.Как пример могу привести Делфи имеющая в основе язык паскаль. Но никто не будет сравнивать Дельфи и Паскаль7.0
|
|
|
|
16.02.2011, 09:17
|
|
Почётный гражданин KAZUS.RU
Регистрация: 30.06.2005
Сообщений: 3,399
Сказал спасибо: 5
Сказали Спасибо 431 раз(а) в 306 сообщении(ях)
|
Re: Atmel - в цинковый ящик?!!!
Сообщение от Bill
|
Ассемблер как транслятор. Поскольку процессы трансляции (ассемблирования) программы и ее исполнения разделены во времени, то транслятор с языка ассемблера можно считать компилятором. Интерпретация полученной программы происходит на аппаратном уровне самим процессором. Кстати, имеются еще программные эмуляторы, которые интерпретируют программы для другого процессора на уровне машинных инструкций.
Далее, простая замена в процессе трансляции мнемоник команд их двоичными значениями это самая простая и далеко не единственная часть работы транслятора (ассемблера). Как и трансляторы для любых других языков, ассемблер содержит в себе и лексический анализатор (сканер), и синтаксический анализатор, и процедуры работы с таблицами символов, и пр. и пр. Единственным отличием ассемблера от остальных компиляторов ЯВУ является принцип трансляции 1-›1 а не 1-›N. Т.е. ассемблер транслирует 1 оператор входного языка в 1 машинную инструкцию.
Не следует также забывать, что помимо трансляции мнемоник команд, ассемблер позволяет освободить программиста от необходимости вручную вычислять адреса переменных в памяти, адреса меток переходов и т.д. и т.п. Как ни странно, но есть ассемблеры, которые даже выполняют некоторую "оптимизацию". А о наличии возможности макро обработки во многих ассемблерах я вообще не говорю.
Выход ассемблера. В зависимости от того, что получается на выходе в результате трансляции, ассемблеры делятся на абсолютные и перемещающие.
Абсолютные ассемблеры выдают на выходе программу в абсолютном формате готовую к исполнению. Ассемблер сам выполняет привязку адресов в программе к физическим адресам в памяти.
Перемещаемые ассемблеры выдают на выходе код в перемещаемом формате. Это код не может быть непосредственно загружен в память для исполнения, поскольку помимо инструкций процессора он содержит много дополнительной информации, необходимой для компоновки программы с помощью специально дополнительной программы - линкера (linkage editor). Линкер осуществляет сборку единой программы из множества объектных модулей и выдает на выходе программу готовую к выполнению.
В общем, об этом можно говорить и писать много. Но интересующимся лучше найти информацию по системному программированию. Там все подробно расписано.
Конец.
|
Это ничего не меняет. Все метки,переменные,константы ассемблер просто подставляет.
Есть много исходняков ассмеблеров для 8-битных МК. Фактически они работают в 2 прохода. Первый проход - заполнение таблицы констант,меток и тд. Второй проход - подстановка их преобразование команд,которое тоже делается по таблице. На сегодняшний день это можно назвать компиляцией,ибо слово "компиляция" вошло в обиход и ей обозначают все что угодно,но если говорить чисто компьютерным языком то этот процесс называется ассемблированием,а именно подстановка(обычно табличная) машинных кодов вместо мнемонических команд.
А написанному например в педивикии не всегда можно верить - ее пишут школьные учителя которые родились уже в эпоху пентиумов.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 14:14.
|
|