Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
💸 Как сделать бизнес проще, а карман толще?
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое раписание, но и напоминать клиентам о визитах тоже.
Проблема в том, что средняя цена по рынку за такой сервис — 800 руб/мес или почти 15 000 руб за год. И это минимальный функционал.
Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.⚡️ Для новых пользователей первый месяц бесплатно. А далее 290 руб/мес, это в 3 раза дешевле аналогов. За эту цену доступен весь функционал: напоминание о визитах, чаевые, предоплаты, общение с клиентами, переносы записей и так далее. ✅ Уйма гибких настроек, которые помогут вам зарабатывать больше и забыть про чувство «что-то мне нужно было сделать». Сомневаетесь? нажмите на текст, запустите чат-бота и убедитесь во всем сами! МакрокомандыСтр 1 из 2Следующая ⇒
Директивы Ассемблера I8080 В операторах Ассемблерных программ часто используются мнемоники, отсутствующие в системе команд микропроцессора. Следовательно, они не могут породить команд объектной программы и их естественно назвать псевдокомандами. Псевдокоманды являются указаниями программе-Ассемблеру о выполнении определенных действий в процессе ассемблирования, поэтому их чаще называют директивами Ассемблера. Директивы определяют порядок ассемблирования, размещают в памяти информацию, присваивают численные значения символическим наименованиям, резервируют память и выполняют другие функции. Директивы подчиняются стандартному формату операторов Ассемблера, но содержимое их полей имеет некоторые особенности, например, в поле метки директив MACRO, EQU и SET должно обязательно находиться символическое наименование, которое не имеет заключительного двоеточия. В остальных директивах в поле метки может быть необязательная метка, аналогичная меткам машинных команд. Метка директивы относится к ячейке памяти, которая следует сразу же за последней ячейкой предшествующей машинной команды. Операнды директив необязательны. Директива ORG.Директива ORG (начало) имеет следующий формат:
Значением выражения директивы ORG является допустимый 16-битный адрес, определяющий ячейку памяти, в которую будет загружаться первый байт следующей команды или байт данных. До новой директивы ORG команды и данные размещаются в смежных ячейках памяти. Если в самом начале программы директива ORG отсутствует, то по умолчанию подразумевается наличие директивы ORG с нулевым операндом. При необходимости в программе может быть несколько директив ORG:
Директива ORG может выполнять функцию резервирования памяти, например, в следующем фрагменте она резервирует 20 байт:
Директива END. Формат директивы END выглядит следующим образом:
Эта директива информирует программу-Ассемблер о достижении физического конца входной программы. Разумеется, в каждой программе может быть только одна директива END, находящаяся в последней строке. Директива EQU. Директива EQU (приравнять, присвоить) прямого присвоения имеет следующий формат:
При выполнении директивы EQU программа-ассемблер присваивает значение выражения символическому наименованию, находящемуся в поле метки. Когда наименование встречается в поле операнда, программа-ассемблер подставляет вместо него присвоенное значение:
В командах ANI, CPI, MVI вместо MASK будет фигурировать код 00001111. Если по каким-либо причинам впрограмме нужно изменить значение MASK, для этого достаточно модифицировать операнд одной директив EQU и выполнить повторное ассемблирование программы. Заметим, что каждое символическое наименование может появиться в поле метки только одной директивы. При программировании следует сгруппировать все директивы EQU в начале или конце программы.
Директива SET. Директива SET (установить) имеет такой же формат и, в общем, выполняет такое же действие, что и директива EQU. Однако в отличие от директивы EQU значение символического наименования допускается изменять с помощью новой директивы SET:
Директивы IF и ENDIF. Директивы условного ассемблирования IF (если) и ENDIF (конец если) применяются в Ассемблерных программах следующим образом:
В процессе ассемблирования вычисляется значение выражения из поля операнда директивы IF. Если оно равно нулю, операторы между директивами IF и ENDIF игнорируются и не включаются в объектную программу. Когда же значение выражения отличается от нуля, операторы программы ассемблируются так, как будто директив IF и ENDIF нет.
Директива DB. Директива DB (определить байт) относится к группе директив определения, которые применяются для инициализации данных и резервирования памяти. Формат директивы DB имеет следующий вид:
Операнд директивы DB может быть последовательностью выражений, разделенных запятыми и имеющих 8-битные значения, либо цепочкой символов, заключенных в апострофы. При выполнении директивы DB значения выражений или коды символов запоминаются в смежных ячейках (байтах) памяти, начинающихся после ячейки предыдущей команды. Приведем примеры использования директивы DB:
Директива DW. Директива DW (определить слово – 2 байта) также относится к директивам определения и имеет такой же формат, как и директива DB. Однако здесь списком является последовательность выражений, имеющих 16-битные значения. При выполнении директивы DW вычисляется значение первого выражения и его младшие 8 бит запоминаются по текущему адресу, а старшие 8 бит запоминаются по адресу на единицу больше предыдущего. Затем вычисляется значение второго выражения, процедура запоминания повторяется для следующих ячеек памяти и т. д. Приведем примеры с директивой DW.
Директива DS. Директива DS (определить память) имеет следующий формат:
Вычисленное значение выражения из поля операнда определяет число ячеек (байт) памяти, резервируемых для запоминания данных. Никакие значения в этих ячейках не запоминаются, в частности, нельзя считать, что эти ячейки содержат нули. Адрес следующего оператора равен сумме адреса оператора, находящегося перед директивой DS и значения выражения директивы DS. Примеры использования директивы DS:
Макрокоманды При программировании возникают ситуации, когда одно и то же действие возможно с небольшими модификациями, описываемое группой команд, необходимо выполнять в программе несколько раз. Для сокращения длины входной программы и ускорения программирования в Ассемблерах такую группу команд допускается определить 1 раз как большую команду – макрокоманду – с уникальной мнемоникой, не входящей в систему команд микропроцессора. После определения макрокоманды в начале программы ее мнемонику можно использовать сколько угодно раз так, как будто она включена в систему команд микропроцессора. Всякий раз программа-ассемблер заменяет эту мнемонику той последовательностью команд, которая фигурирует в определении макрокоманды. Таким образом, введение макрокоманд придает Ассемблеру некоторые черты языков высокого уровня. Рассмотрим сначала общие принципы использования макрокоманд на простых примерах. Пусть в прикладной программе несколько раз потребовалось передавать содержимое регистров (D, Е) в указатель стека SP. Одной командой осуществить такую передачу невозможно из-за отсутствия соответствующей команды в системе команд микропроцессора. Необходимая передача реализуется командами XCHG, SPHL. Они не модифицируют больше ни одного внутреннего регистра микропроцессора и не изменяют значений флажков. Определим приведенную последовательность команд как макрокоманду с мнемоникой SPDE:
Отметим, что определяемая мнемоника SPDE фигурирует в поле метки, a MACRO и ENDM являются специальными директивами Ассемблера. После определения макрокоманды SPDE ее можно использовать как обычную команду, помещая в поле мнемоники всякий раз, когда возникает необходимость выполнения передачи SP< =(D, E). Определим далее макрокоманду SHV, которая сдвигает содержимое аккумулятора вправо с записью в освобождающиеся биты нулей, считая, что число сдвигов содержится в регистре D:
В следующем фрагменте содержимое ячейки с адресом ITEM сдвигается вправо на 3 бита:
При выполнении данного фрагмента модифицируются значение флажка С (в команде RRC) и содержимое регистра D, являющегося счетчиком сдвигов. Можно расширить возможности макрокоманды SHV, если в определении ее не указывать ни конкретный регистр-счетчик, ни число сдвигов, а задавать их при каждом обращении к макрокоманде или вызове макрокоманды. Такая возможность достигается путем введения макрокоманд с формальными параметрами. Макрокоманда SHV с двумя параметрами (регистр-счетчик REG, число сдвигов VOL) определяется следующим образом:
Теперь при обращении к SHV в разных местах прикладной программы можно использовать в качестве счетчика любой свободный внутренний регистр и задавать варьируемое число сдвигов. Например, для сдвига содержимого ячейки ITEM на 5 бит с регистром-счетчиком L следует записать:
Еще один пример обращения к SHV для сдвига содержимого ячейки VALUE на 2 бита с регистром-счетчиком Е:
|