Команда NOP


Как выучить английский Как выучить английский

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

Лирическое вступление

Недавно один из подписчиков моего канала просто завалил мои видео по ассемблеру гневными комментариями. Ну всё то ему не нравится: и звук плохой, и о своём сайте то я говорю слишком много, то видео слишком короткое, то слишком длинное. И моя манера говорить ему тоже не нравится. И даже видео в плейлисте отсортированы не так, как ему хочется. Ну блин всё не так.

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

Что тут сказать - всегда найдутся люди, которые критикуют всех и вся, и обливают дерьмом людей с удовольствием и даже с садистским наслаждением. Такие люди сами обычно мало что умеют. Но критиковать других очень любят.

Я обычно не обращаю на подобные вещи внимания. Но в этот раз обратил. Дело в том, что одно замечание этого товарища было всё-таки правильным. Далее скажу, какое, но сначала расставлю точки над i. Итак:

  1. Я не учитель. Я просто человек, который делится опытом и даёт советы. Нужен кому этот опыт - берите. Не нужен - идите мимо.
  2. Это мой канал и мои правила. Я не собираюсь ни под кого подстраиваться. Я буду делать видео так, как считаю нужным и тогда, когда считаю нужным.
  3. Я делаю это для себя. Потому что мне это нравится. Если бы мне это не нравилось, я бы не тратил на это время. Если это нравится кому-то ещё - хорошо. Всегда приятно, когда твоя работа кому-то интересна. Ну а если нет, то решение всё тоже - просто отписывайтесь.

А теперь о справедливом замечании. Поскольку на своём канале я в основном говорю о программировании, то я часто употребляю слово “синтаксис”. И так уж сложилось исторически, что я привык произносить его так:

синтАксис

то есть с ударением на втором слоге. На самом деле правильно говорить так:

сИнтаксис

то есть с ударением на первом слоге.

Ну что же, ошибку я признаю, и теперь буду стараться говорить правильно...

А теперь об инструкции

Команда NOP в Ассемблере ничего не делает. Синтаксис:

NOP

Состояние флагов не изменяется.

NOP - это однобайтовая команда, которая ничего не выполняет, а только занимает место и время. Машинный код команды NOP фактически соответствует команде

XCHG AL, AL

о которой я ещё не рассказывал, но если кратко, то она меняет местами два операнда.

Зачем нужна команда NOP

Возникает закономерный вопрос - для чего нужна команда NOP, которая ничего не делает, а только занимает место в программе и отнимает время у процессора?

И, тем не менее, такая команда есть практически во всех ассемблерах, включая ассемблеры для микроконтроллеров.

Эта команда, в основном, используется для выполнения небольшой задержки в программе. Если говорить о микроконтроллерах, то такая задержка может потребоваться, например, для подавления “дребезга контактов”.

Как рассчитать время задержки командой NOP

Но что делать, если нужно выполнить задержку не абы как, а на определённое время? Как узнать, на какое время команда NOP задержит выполнение программы?

Приблизительно это можно рассчитать. Для этого потребуется знать два параметра:

  1. Тактовую частоту процессора.
  2. Количество тактов, которое требуется на выполнение команды 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“, что, как вы понимаете, переводится с английского как “нет операции” или “никакая операция”. То есть это отсутствие операции, программа ничего не делает.



Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика