Как стать программистом Как устроен компьютер. Что такое программа. Как написать свою программу. И многое другое узнаете вы из этой книги. Получить бесплатно! |
Команда NOP
Лучшие книги по Ассемблеру
Сделал подборку не новых, но проверенных книг по программированию на языке ассемблера. Если вы также как и я любите погружаться на низкий уровень, в те закоулки мира программирования, куда не всем путь открыт, то посмотрите. Возможно, что-то вам понравится. Подробнее... |
Лирическое вступление
Недавно один из подписчиков моего канала просто завалил мои видео по ассемблеру гневными комментариями. Ну всё то ему не нравится: и звук плохой, и о своём сайте то я говорю слишком много, то видео слишком короткое, то слишком длинное. И моя манера говорить ему тоже не нравится. И даже видео в плейлисте отсортированы не так, как ему хочется. Ну блин всё не так.
Несколько раз он написал, что я плохой учитель и он уходит к другому (ну прям история неразделённой любви))).
Что тут сказать - всегда найдутся люди, которые критикуют всех и вся, и обливают дерьмом людей с удовольствием и даже с садистским наслаждением. Такие люди сами обычно мало что умеют. Но критиковать других очень любят.
Я обычно не обращаю на подобные вещи внимания. Но в этот раз обратил. Дело в том, что одно замечание этого товарища было всё-таки правильным. Далее скажу, какое, но сначала расставлю точки над i. Итак:
- Я не учитель. Я просто человек, который делится опытом и даёт советы. Нужен кому этот опыт - берите. Не нужен - идите мимо.
- Это мой канал и мои правила. Я не собираюсь ни под кого подстраиваться. Я буду делать видео так, как считаю нужным и тогда, когда считаю нужным.
- Я делаю это для себя. Потому что мне это нравится. Если бы мне это не нравилось, я бы не тратил на это время. Если это нравится кому-то ещё - хорошо. Всегда приятно, когда твоя работа кому-то интересна. Ну а если нет, то решение всё тоже - просто отписывайтесь.
А теперь о справедливом замечании. Поскольку на своём канале я в основном говорю о программировании, то я часто употребляю слово “синтаксис”. И так уж сложилось исторически, что я привык произносить его так:
синтАксис
то есть с ударением на втором слоге. На самом деле правильно говорить так:
сИнтаксис
то есть с ударением на первом слоге.
Ну что же, ошибку я признаю, и теперь буду стараться говорить правильно...
А теперь об инструкции
Команда NOP в Ассемблере ничего не делает. Синтаксис:
NOP
Состояние флагов не изменяется.
NOP - это однобайтовая команда, которая ничего не выполняет, а только занимает место и время. Машинный код команды NOP фактически соответствует команде
XCHG AL, AL
о которой я ещё не рассказывал, но если кратко, то она меняет местами два операнда.
Зачем нужна команда NOP
Возникает закономерный вопрос - для чего нужна команда NOP, которая ничего не делает, а только занимает место в программе и отнимает время у процессора?
И, тем не менее, такая команда есть практически во всех ассемблерах, включая ассемблеры для микроконтроллеров.
Эта команда, в основном, используется для выполнения небольшой задержки в программе. Если говорить о микроконтроллерах, то такая задержка может потребоваться, например, для подавления “дребезга контактов”.
Как рассчитать время задержки командой NOP
Но что делать, если нужно выполнить задержку не абы как, а на определённое время? Как узнать, на какое время команда NOP задержит выполнение программы?
Приблизительно это можно рассчитать. Для этого потребуется знать два параметра:
- Тактовую частоту процессора.
- Количество тактов, которое требуется на выполнение команды NOP.
Тактовая частота процессора известна из его характеристик. Тактовая частота микроконтроллера также известна из его характеристик, но ещё зависит от частоты времязадающей цепи в обвязке микроконтроллера.
Количество тактов, которое занимает выполнение команды NOP, зависит от процессора (микроконтроллера) и берётся из документации на процессор.
Для примера и для упрощения представим, что команда NOP выполняется за 2 такта, а тактовая частота процессора 1 МГц.
Что такое Герц (Гц)? Это количество колебаний в секунду (курсы по электротехнике и электронике ищи здесь).
1 МГц = 1000000 Гц
То есть каждую секунду в процессоре выполняется миллион тактов (в нашем примере). Если в нашем примере команда NOP выполняется за 2 такта, то получается, что за одну секунду процессор может выполнить таких команд:
1000000 / 2 = 500000
Следовательно, одна такая команда будет выполнена за:
1 / 500000 секунды = 0,002 мс = 2 мкс
То есть одна инструкция NOP в нашем примере задержит выполнение программы на 2 микросекунды. Если же нам потребуется задержать программу, например, на 10 мкс, то нам надо будет вызвать команду NOP пять раз подряд:
NOP NOP NOP NOP NOP
При желании можно вызвать инструкции NOP в цикле, но тогда ещё придётся учитывать время на выполнение команды цикла.
А теперь о происхождении мнемоники NOP. Всё, как всегда, просто. Это сокращение словосочетания “Nо OPeration“, что, как вы понимаете, переводится с английского как “нет операции” или “никакая операция”. То есть это отсутствие операции, программа ничего не делает.
Подписаться на Дзен-канал
Вступить в группу "Основы программирования" Подписаться на рассылки по программированию |
Первые шаги в программирование
Главный вопрос начинающего программиста – с чего начать? Вроде бы есть желание, но иногда «не знаешь, как начать думать, чтобы до такого додуматься». У человека, который никогда не имел дело с информационными технологиями, даже простые вопросы могут вызвать большие трудности и отнять много времени на решение. Подробнее... |