[ Раскрыть online-чат / Закрыть ] · [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: nightmare, Huntswarrior, Aleks_Crow  
Форум » Программирование микроконтроллеров AVR, PIC » Языки програмирования » Язык ассемблера (Описание и т.п.)
Язык ассемблера
Отправлено 28.07.2009 - 14:541
Администраторы
571 сообщений
Мужчина
Язык ассемблера

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

Низкоуровневый язык программирования (язык программирования низкого уровня) — язык программирования, близкий к программированию непосредственно в машинных кодах используемого реального или виртуального (например, Java, Microsoft .NET) процессора. Для обозначения машинных команд обычно применяется мнемоническое обозначение. Это позволяет запоминать команды не в виде последовательности двоичных нулей и единиц, а в виде осмысленных сокращений слов человеческого языка (обычно английских).

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

Как правило, использует особенности конкретного семейства процессоров. Общеизвестный пример низкоуровнего языка — язык ассемблера, хотя правильнее говорить о группе языков ассемблера. Более того! Для одного и того же процессора существует несколько видов языка ассемблера! Они совпадают в машинных командах, но различаются набором дополнительных функций (директив и макросов).

Также к языкам низкого уровня условно можно причислить MSIL, применяемый в платформе Microsoft .NET, Форт, Java байт-код.

Достоинства и недостатки

Достоинства



Я Админ
Профиль Личное сообщение Дом. страница icq Skype
Отправлено 28.07.2009 - 14:572
Администраторы
571 сообщений
Мужчина
1. Искусный программист, как правило, способен написать более эффективную программу на ассемблере, чем те, что генерируются трансляторами с языков программирования высокого уровня, то есть для программ на ассемблере характерно использование меньшего количества команд и обращений в память, что позволяет увеличить скорость и уменьшить размер программы.[источник?]
2. Обеспечение максимального использования специфических возможностей конкретной платформы, что также позволяет создавать более эффективные программы с меньшими затратами ресурсов.
3.При программировании на ассемблере возможен непосредственный доступ к аппаратуре, в том числе портам ввода-вывода, регистрам процессора, и др.
4. Язык ассемблера применяется для создания драйверов оборудования и ядра операционной системы
5. Язык ассемблера используется для создания "прошивок" BIOS (ПЗУ).
6. С помощью языка ассемблера создаются компиляторы и интерпретаторы языков высокого уровня, а также реализуется совместимость платформ.
7. Существует возможность исследования других программ с отсутствующим исходным кодом с помощью дизассемблера.

Недостатки

1. Главное преимущество ассемблера практически полностью нивелируется хорошей оптимизацией современных компиляторов языков высокого уровня.[источник?]
2. В силу своей машинной ориентации («низкого» уровня) человеку по сравнению с языками программирования высокого уровня сложнее читать и понимать программу, она состоит из слишком «мелких» элементов — машинных команд, соответственно усложняются программирование и отладка, растет трудоемкость, велика вероятность внесения ошибок. В значительной степени возрастает сложность совместной разработки.
3. Как правило, меньшее количество доступных библиотек по сравнению с современными индустриальными языками программирования.
4.переносимость программ на ЭВМ с другой архитектурой и системой команд (кроме двоично совместимых).



Я Админ
Профиль Личное сообщение Дом. страница icq Skype
Отправлено 28.07.2009 - 15:013
Администраторы
571 сообщений
Мужчина
Применение

Исторически можно рассматривать ассемблер как второе поколение языков программирования ЭВМ (если первым считать машинный код). Недостатки ассемблера, сложность разработки на нем больших программных комплексов привели к появлению языков третьего поколения — языков программирования высокого уровня (Фортран, Лисп, Кобол, Паскаль, Си и др.). Именно языки программирования высокого уровня и их наследники в основном используются в настоящее время в индустрии информационных технологий. Однако, языки ассемблера сохраняют свою нишу, обуславливаемую их уникальными преимуществами в части эффективности и возможности полного использования специфических средств конкретной платформы.

На ассемблере пишутся программы или фрагменты программ, для которых критически важны:

1. быстродействие (драйверы, игры);
2.объем используемой памяти (загрузочные сектора, встраиваемое (англ. embedded) программное обеспечение, программы для микроконтроллеров и процессоров с ограниченными ресурсами, вирусы, программные защиты).

С использованием программирования на ассемблере производятся:

1. Оптимизация критичных к скорости участков программ написанных на языке высокого уровня, таком как C++. Это особенно актуально для игровых приставок, у которых фиксированная производительность, и для мультимедийных кодеков, которые стремятся делать менее ресурсоемкими и более популярными.
2. Создание операционных систем (ОС). ОС часто пишут на Си, языке, который специально был создан для написания одной из первых версий Unix. Аппаратно зависимые участки кода, такие, как загрузчик ОС, уровень абстрагирования от аппаратного обеспечения — HAL и ядро, часто пишутся на ассемблере. Ассемблерного кода в ядрах Windows или Linux совсем немного, поскольку авторы стремятся к переносимости и надёжность, но тем не менее он присутствует. Некоторые любительские ОС, такие, как MenuetOS, целиком написаны на ассемблере. При этом MenuetOS помещается на дискету и содержит графический многооконный интерфейс.
3.Программирование микроконтроллеров (МК) и других встраиваемых процессоров. По мнению профессора Танненбаума, развитие МК повторяет историческое развитие компьютеров новейшего времени.[1] На сегодняшний день для программирования МК весьма часто применяют ассемблер. В МК приходится перемещать отдельные байты и биты между различными ячейками памяти. Программирование МК весьма важно, так как, по мнению Танненбаума, в автомобиле и квартире современного цивилизованного человека в среднем содержится 50 микроконтроллеров.[2]
4.Создание драйверов. Некоторые участки драйверов, взаимодействующие с аппаратным обеспечением, программируют на ассемблере. Хотя в целом в настоящее время драйверы стараются писать на языках высокого уровня в связи с повышенными требованиями к надёжности. Надёжность для драйверов играет особую роль, поскольку в Windows NT и Linux драйверы работают в режиме ядра. Одна ошибка может привести к краху системы.
5. Создание антивирусов и других защитных программ.
6. Написание трансляторов языков программирования.



Я Админ
Профиль Личное сообщение Дом. страница icq Skype
Отправлено 28.07.2009 - 15:044
Администраторы
571 сообщений
Мужчина
Набор команд

Типичными командами языка ассемблера являются (большинство примеров даны для Intel-синтаксиса архитектуры x86):

1.Команды пересылки данных (mov, lea и т. д.)
2. Арифметичекие команды (add, sub, imul и т. д.)
3. Логические и побитовые операции (or, and, xor, shr и т. д.)
4. Команды управления ходом выполнения программы (jmp, loop, ret и т. д.)
5. Команды вызова программных прерываний (иногда относят к командам управления): int, into 6.
6. Команды ввода/вывода в порт (in, out)
7. Для микроконтроллеров и микроЭВМ характерны также команды, выполняющие проверку и переход по условию, например:
cbne — перейти, если не равно
dbnz — декрементировать, и если результат ненулевой, то перейти
cfsneq — сравнить, и если не равно, пропустить следующую команду



Я Админ
Профиль Личное сообщение Дом. страница icq Skype
Форум » Программирование микроконтроллеров AVR, PIC » Языки програмирования » Язык ассемблера (Описание и т.п.)
  • Страница 1 из 1
  • 1
Поиск: