Мнемокод что это
Перейти к содержимому

Мнемокод что это

  • автор:

Мнемокод

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

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

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

Директивы ассемблера позволяют, в частности, включать блоки данных, задать ассемблирование фрагмента программы по условию, задать значения меток, использовать макроопределения с параметрами.

Каждая модель (или семейство) процессоров имеет свой набор команд и соответствующий ему язык ассемблера.

Существуют ЭВМ, реализующие в качестве машинного язык программирования высокого уровня (Forth, Lisp, Эль-76), фактически в них он является «ассемблером».

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

Достоинства языка ассемблера

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

Недостатки языка ассемблера

  • В силу своей машинной ориентации («низкого» уровня) человеку по сравнению с языками программирования высокого уровня сложнее читать и понимать программу, она состоит из слишком «мелких» элементов — машинных команд, соответственно усложняются программирование и отладка, растет трудоемкость, велика вероятность внесения ошибок. В значительной степени возрастает сложность совместной разработки.
  • Как правило, меньшее количество доступных библиотек по сравнению с современными индустриальными языками программирования.
  • Отсутствует переносимость программ на ЭВМ с другой архитектурой и системой команд (кроме двоично совместимых).

Применение

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

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

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

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

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

Нелегальная сфера деятельности

Программирование на языке ассемблера характерно также для нелегальных сфер деятельности в ИТ, в частности, с использованием ассемблера производятся:

  • Взлом программ. «Оригинал» ПО, копии которого продаются незаконно, если в нём использовались технические средства защиты авторских прав, вероятно, был взломан с помощью отладчика и знаний языка ассемблера. Это позволяет при помощи отладчика или дизассемблера найти внутри кода программы функцию, ответственную за ввод кода активации или прекращение работы демонстрационной версии программы. Взломщик может изменить исходный код программы при помощи специального редактора (1), либо создать генератор ключа (2). Первый способ более прост для конечного пользователя. Второй менее наказуем (УК РФ, ст. 272: до 2 лет). [3]
  • Создание вирусов и других вредоносных программ (УК РФ, ст. 273: до 3 лет, при тяжких последствиях до 7 лет).

Связывание программ на ассемблере с другими языками

Поскольку на ассемблере часто разрабатываются только фрагменты программ, их необходимо связывать с остальными частями программной системы, написанными на других языках.

Это достигается 2 основными способами:

  • На этапе компиляции — вставка в программу ассемблерных фрагментов (англ.inline assembler ) с помощью специальных директив языка (в частности, данный способ поддерживается языком программирования Си), в том числе написание процедур на языке ассемблера. Способ удобен для несложных преобразований данных, но полноценного ассемблерного кода, с данными и подпрограммами, включая подпрограммы с множеством входов и выходов, не поддерживаемых высокоуровневыми языками, с помощью него сделать нельзя.
  • На этапе компоновки, или раздельная компиляция. Для взаимодействия скомпонованных модулей достаточно, чтобы связующие функции (определённые в одних модулях и использующиеся в других) поддерживали нужные соглашения вызова (англ.calling conventions ) и типы данных. Написаны же отдельные модули могут быть на любых языках, в том числе и на ассемблере.

Синтаксис

Синтаксис языка ассемблера определяется системой команд конкретного процессора.

Набор команд

  • cbne — перейти, если не равно
  • dbnz — декрементировать, и если результат ненулевой, то перейти
  • cfsneq — сравнить, и если не равно, пропустить следующую команду

Инструкции

Типичный формат записи команд:

где опкод (код операции) — непосредственно мнемоника инструкции процессору. К ней могут быть добавлены префиксы (повторения, изменения типа адресации и пр.).

В качестве операндов могут выступать константы, адреса регистров, адреса в оперативной памяти и пр.. Различия между стандартами Intel и AT&T касаются, в основном, порядка перечисления операндов и их синтаксиса при различных методах адресации.

Используемые мнемоники обычно одинаковы для всех процессоров одной архитектуры или семейства архитектур (среди широко известных — мнемоники процессоров и контроллеров Motorola, ARM, x86). Они описываются в спецификации процессоров. Возможные исключения:

  • Если ассемблер использует кроссплатформенный AT&T-синтаксис (оригинальные мнемоники приводятся к синтаксису AT&T)
  • Если изначально существовало два стандарта записи мнемоник (система команд была наследована от процессора другого производителя).

Например, процессор Zilog Z80 наследовал систему команд Intel i8080, расширил ее и поменял мнемоники (и обозначения регистров) на свой лад. Процессоры Motorola Fireball наследовали систему команд Z80, несколько её урезав. Вместе с тем, Motorola официально вернулась к мнемоникам Intel. И в данный момент половина ассемблеров для Fireball работает с интеловскими мнемониками, а половина с мнемониками Zilog.

Директивы

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

  • определение данных (констант и переменных)
  • управление организацией программы в памяти и параметрами выходного файла
  • задание режима работы компилятора
  • всевозможные абстракции (то есть элементы языков высокого уровня) — от оформления процедур и функций (для упрощения реализации парадигмы процедурного программирования) до условных конструкций и циклов (для парадигмы структурного программирования)
  • макросы

Пример программы

Примеры программы Hello, world! для разных платформ и разных диалектов:

Мнемокод — помощь в запоминании чисел

Современный человек окружен морем числовых последовательностей, многие из которых должны держаться в памяти из-за большой востребованости — различные номера телефонов, PIN-коды, цифровые пароли.

Существующая наука о запоминании — мнемоника предлагает достаточно элегантный метод запоминания: ряду десятичных цифр присваиваются значения согласных букв, для запоминания числа достаточно будет запомнить слово (или словосочетание), в котором порядок согласных соответствует порядку следования цифр в числе.

Приведу цифровой ряд для запоминания цифр от 0 до 9: НоЛь — Раз — Два — Три — Четыре — Пять — Шесть — Семь — Восемь — Много.

Запоминаем числа с dig.by

Кажущаяся простота метода натыкается на то, что для кодирования большого количества чисел используется малое количество элементов — 10, и они будут путаться в голове, создавая «кашу» вместо стройной последовательности цифр.

Выход находится в использовании для запоминания образов двузначных чисел — возросшая на порядок сложность окупается хорошей запоминаемостью больших чисел.

Пять лет назад я использовал этот метод для запоминания PIN-кода к моей зарплатной пластиковой карте. У карты уже давно истек срок действия и она была заменена на новую, однако PIN-код до сих пор сидит у меня в голове.

Сила образов достаточна сильна: едущий танк Т-34, подрывающийся на мине — таким образом отложился у меня код 3495 у меня в голове. Почему 34 запомнилось в виде танка — это конечно понятно любому, воспитанному на советских фильмах о войне мужчине. С цифрой 95 у меня связаны воспоминания о Windows 95 и лозунге «Windows Must Die», высвечивающимся при загрузке моего компьютера в студенческие годы.

Вот таким образом безвременная кончина гордости советского танкостроения оказалась связана с безмерно любимой пользователями Windows и до сих пор вспоминается всвязи с любой увиденной картой Visa.

Самая большая проблема для обычных людей — у них нет времени и сил для запоминания, как минимум 100 образов двузначных чисел, что необходимо для плодотворного использования метода.

В помощь тем, кто хочет надежно запомнить какое-либо число, и не напрягаться с составлением таблицы образов двузначных чисел, я недавно запустил проект Мнемокод — помощь в запоминании чисел на сайте dig.by.

Проект представляет собой он-лайн книгу мнемокодов для двузначных чисел. Посетитель может выбрать образы для запоминания нужного ему числа — дня рождения, PIN-кода, номера телефона. В настоящий момент есть буквенная таблица кодов, построенная на базе модифицированной таблицы Олега Степанова, к 15% двузначных чисел есть изображение, иллюстрирующее мнемокод.

Проект только начал развиваться и вы можете оказать большое влияние на судьбу «Мнемокода».

Мнемокод или Мнемокод+оператор

Всем доброго времени суток.
Програмирование контроллеров я занялся недавно, но уже первый (пока что единственный серьезный на мой взгляд проект) зделал.
Мой вопрос.
Для прогрмирования я использовал чистый мнемокод, но посмотре на форуме народ широко использует операторы, а вчем плюсы этих операторов и где найти подробное их описание?
Заранее спасибо!

  • KT315B
  • Сообщений: 1263
  • Зарегистрирован: Пт июл 21, 2006 15:05:19
  • Откуда: плод воображения
  • Сайт

Ср июл 25, 2007 00:37:25

А что это за мнемокод такой? Насчет операторов — вот, например откроем даташит на ATMEGA8 на странице 284 — «Instruction Set Simmary» — вот он и список всех операторов с кратким описанием, по которому, в принципе и так все ясно =)

  • Мышонок
  • Сообщений: 3792
  • Зарегистрирован: Чт сен 14, 2006 11:42:09
  • Откуда: Обитаю на чердаке
  • Сайт

Ср июл 25, 2007 05:50:59

Mr.Moss , флудим?
Выражайтесь яснее, посмотрите «обучалку , конкретно раздел: МК и ПЛИС

  • ARV
  • Сообщений: 18002
  • Зарегистрирован: Чт дек 28, 2006 08:19:56
  • Откуда: Новочеркасск
  • Сайт

Ср июл 25, 2007 07:42:40

Я так понимаю, мнемокод — это ассемблер, а «операторы» — это Си. ?

  • Aheir
  • Сообщений: 4519
  • Зарегистрирован: Пн апр 03, 2006 11:43:25
  • Откуда: Санкт — Петербург

Ср июл 25, 2007 08:32:47

Истинно так, насколько я понял.
Только обычно употребляют слово «мнемоника», а не «мнемокод»
А как таковые «операторы» присутствуют в любом языке высокого уровня.
Вас какой интересует-то?

  • Мышонок
  • Сообщений: 3792
  • Зарегистрирован: Чт сен 14, 2006 11:42:09
  • Откуда: Обитаю на чердаке
  • Сайт

Ср июл 25, 2007 08:48:22

Aheir писал(а): А как таковые «операторы» присутствуют в любом языке высокого уровня.

Скажу больше — в языке программирования любого уровня есть операторы, и естественно, их операнды.

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

Команда , она же оператор языка программирования;
Операнды — данные, с которыми работает данная команда/оператор;

Операции или действия — то, что производит команда/оператор с данными или с ходом выполнения программы.

По-моему, теперь яснее!

  • Mr.Moss
  • Сообщений: 68
  • Зарегистрирован: Вт июл 24, 2007 23:34:23

Ср июл 25, 2007 18:48:37

Моет быть я неправильно изъяснился, прошу прощения.
Я просто в инете нарыл сайт в котором есть воттакие строчки:

Вычитание.
Символ: —
Описание: Возвращает результат вычитания правого выражения из левого
Приоритет: 12
Пример: ldi r17, c1-c2

если я не ошибаюсь от это можно написать так:

ldi r17,c1
subi r17,c2

На сайте так и сказано что это операторы.

  • Мышонок
  • Сообщений: 3792
  • Зарегистрирован: Чт сен 14, 2006 11:42:09
  • Откуда: Обитаю на чердаке
  • Сайт

Ср июл 25, 2007 19:23:28

Так значит, всё-таки про «Си»! Или всё-таки про ассемблер?

В приведённых примерах применены оба языка, извольте отделить мух от котлет!

Ключевые слова в «Си» — функции, указанные вами символы — действительно операторы.

В «Ассемблере» (1-й пример) ключевые слова — операторы, имена регистров — операнды. Символы — операции, если только они допускаются в данном языке.

  • ARV
  • Сообщений: 18002
  • Зарегистрирован: Чт дек 28, 2006 08:19:56
  • Откуда: Новочеркасск
  • Сайт

Ср июл 25, 2007 19:55:29

Вышеупомянутые операторы — это операторы препроцессора ассемблера. Разумеется, они есть и в Си, но для ассемблера имеется весьма важная особенность: все эти операторы работают над числами, которые известны на этапе компиляции (т.е. константами). Например
Код: .equ C1 = 50
.equ C2 = 20
LDI R17, C1+C2
значение суммы вычисляется на этапе компиляции программы и в код поместится в сразу LDI R17, 70 — никакого сложения в коде программы не будет.
А вот в этом примере
Код: LDI R17, 50
LDI R18, 20
LDI R19, R17+R18
будет ошибка, так как складывать содержимое регистров оператором + компилятор не умеет.

Скажем так, операторы +,-,* и т.п. в ассемблере позволяют заменить константу какой-то формулой, в которой все переменные заранее известны (т.е. являются константами).

  • Mr.Moss
  • Сообщений: 68
  • Зарегистрирован: Вт июл 24, 2007 23:34:23

Ср июл 25, 2007 19:59:34

Большое Вам всем СПАСИБО.
Теперь все понятно.

Что такое мнемокод?

Что такое мнемокод?
Выберите один ответ:
1удобная для человека символьная форма записи команд и их аргументов
2символьное представление названий регистров процессора (аккумулятор, фиктивный регистр, указатель вершины стека и т. д.)
3машинноориентированный язык программирования
4программа записанная в виде шестнадцатеричного кода процессора

Голосование за лучший ответ

Влад СалбаковУченик (218) 3 года назад

Что такое операнд?
Выберите один ответ:
1адрес команды
2код команды
3код данных
4адрес адреса данных
5адрес данных

Solusipse Искусственный Интеллект (170966) 3

Влад СалбаковУченик (218) 3 года назад

спасибо огромное

Solusipse Искусственный Интеллект (170966) учись)))

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *