
- •Алгебра логики, алгебра Буля. Основные аксиомы.
- •Законы алгебры Буля. Дистрибутивный, коммутативный, ассоциативный.
- •Законы алгебры Буля. Поглощения, двойного отрицания, исключения.
- •Законы алгебры Буля. Де Моргана, идемпотентности.
- •Условное графическое обозначение логических элементов (стандарты).
- •Способы минимизации логических функций. Правило составления карты Карно.
- •Карта Карно для:
- •Для каждого контура выделяем области:
- •Способы минимизации логических функций. Правило составления диаграммы Вейча.
- •Комбинационная схема. Функция дешифратора.
- •Комбинационная схема. Функция шифратора.
- •Комбинационная схема. Функция мультиплексора.
- •Комбинационная схема. Функция демультиплексора.
- •Триггеры. Типы триггеров. Классификация Триггеров.
- •Регистры. Счетчики. Разновидность.
- •Архитектура Микроконтроллера. Структура типовой эвм.
- •Тактовая частота микроконтроллера. Изменения тактовой частоты.
- •Регистры общего назначения (рон) в микроконтроллерах.
- •Регистр признаков. Распиновка битов.
- •Регистры специального назначения. Регистр Программный счетчик.
- •Регистры специального назначения. Регистр указатель Стека.
- •Регистры специального назначения. Таймеры.
- •Регистры специального назначения. Ацп и цап.
- •Виды памяти в микроконтроллерах.
- •Преобразование последовательного кода в параллельный.
- •Преобразование параллельного кода в последовательный.
- •Язык Ассемблера. Синтаксис. Мнемокод.
- •Арифметические команды. Принцип работы.
- •Imul операнд_1[,операнд_2,операнд_3].
- •Логические команды. Принцип работы.
- •Команды вызова подпрограммы, особенности.
- •Команды переходов в программе, особенности.
- •Доказать следующие законы: дистрибутивный, поглощения.
- •1) Доказательство дистрибутивного закона
- •Доказательство закона поглощения
- •Доказать следующие законы: идемпотентности, двойного отрицания.
- •Доказательство закона идемпотентности
- •Доказательство закона двойного отрицания
- •Доказать следующий законы: исключения, коммутативный.
- •Минимизировать произвольную логическую функцию с помощью диаграмм Вейча. Каскадное подключение дешифраторов, увеличение разряда дешифратора на n.
- •Каскадное подключение демультиплексора, увеличение разряда демультиплексора на n.
- •Реализовать rs триггер на элементах или-не.
- •Реализовать rs триггер на элементах и-не.
- •Основные команды по работе с триггерами общего назначения. Основные команды по работе с триггером признаков. Назначение регистра pc. И принцип работы с ним.
- •Назначения регистра sp. И принцип работы с ним.
- •Назначения регистра watchdog. И принцип работы с ним.
- •Работа с Flash-памятью микроконтроллера.
- •Работа с eeprom памятью микроконтроллера. (https://cxem.Net/mc/book.Php )
Арифметические команды. Принцип работы.
add операнд_1, операнд_2 — команда сложения с принципом действия: операнд_1 = операнд_1 + операнд_2
Операнды должны иметь одинаковый размер. Результат помещается на место первого операнда. Возможные сочетания операндов для этой команды аналогичны команде MOV.
Примеры:
add ax,5 ;AX = AX + 5
add dx,cx ;DX = DX + CX
add dx,cl ;Ошибка: разный размер операндов
xadd назначение, источник — обмен местами и сложение.
Команда позволяет выполнить последовательно два действия:
• обменять значения назначение и источник;
• поместить на место операнда назначение сумму:
назначение = назначение + источник.
inc операнд — операция инкремента, то есть увеличения значения операнда на 1: операнд = операнд +1
inc ax ;AX = AX + 1
sub операнд_1, операнд_2 — команда вычитания; ее принцип действия: операнд_1 = операнд_1 – операнд_2
Операнды должны иметь одинаковый размер. Результат помещается на место первого операнда. Возможные сочетания операндов для этой команды аналогичны команде MOV.
На самом деле вычитание в процессоре реализовано с помощью сложения. Процессор меняет знак второго операнда на противоположный, а затем складывает два числа.
Примеры:
sub ax,13 ;AX = AX - 13
sub ax,bx ;AX = AX + BX
sub bx,cl ;Ошибка: разный размер операндов.
sbb операнд_1, операнд_2 — команда вычитания с учетом заема (флага cf): операнд_1 = операнд_1 – операнд_2 – значение_cf. Флаг cf выполняет роль индикатора заема 1 из старшего разряда при вычитании чисел.
dec операнд — операция декремента, то есть уменьшения значения операнда на 1;
dec ax ;AX = AX - 1
neg операнд — отрицание с дополнением до двух. Команда выполняет инвертирование значения операнд.
операнд = 0 – операнд, то есть вычитает операнд из нуля.
Команду neg операнд можно применять:
• для смены знака;
• для выполнения вычитания из константы.
Логика работы команды:
<Операнд> = – < Операнд >
В качестве декремента допустимы регистры и память: reg, mem.
Примеры:
neg ax ;AX = -AX
mul сомножитель_1 – умножение чисел без знака.
В команде указан всего лишь один операнд-сомножитель. Второй операнд — сомножитель_2 задан неявно. Его местоположение фиксировано и зависит от размера сомножителей. Так как в общем случае результат умножения больше, чем любой из его сомножителей, то его размер и местоположение должны быть тоже определены однозначно.
Размер операнда |
Множитель |
Результат |
1 байт |
AL |
AX |
2 байта |
AX |
DX:AX |
4 байта |
EAX |
EDX:EAX |
Примеры:
mul bl ;AX = AL * BL
mul ax ;DX:AX = AX * AX
Если старшая часть результата равна нулю, то флаги CF и ОF будут иметь нулевое значение. В этом случае старшую часть результата можно отбросить.
Для умножения чисел со знаком предназначена команда:
Imul операнд_1[,операнд_2,операнд_3].
Эта команда выполняется так же, как и команда mul. Отличительной особенностью команды imul является только формирование знака.
С одним операндом — форма, аналогичная команде MUL. В качестве операнда указывается множитель. Местоположение другого множителя и результата определяется по таблице.
С двумя операндами — указываются два множителя. Результат записывается на место первого множителя. Старшая часть результата в этом случае игнорируется. Кстати, эта форма команды не работает с операндами размером 1 байт.
С тремя операндами — указывается положение результата, первого и второго множителя. Второй множитель должен быть непосредственным значением. Результат имеет такой же размер, как первый множитель, старшая часть результата игнорируется. Это форма тоже не работает с однобайтными множителями.
Примеры:
imul cl ;AX = AL * CL
imul bx,ax ;BX = BX * AX
imul cx,-5 ;CX = CX * (-5)
imul dx,bx,134h ;DX = BX * 134h
C = O = 0, если произведение помещается в младшей половине результата, иначе C = O = 1. Для второй и третьей формы команды C = O = 1 означает, что произошло переполнение.
Для деления чисел без знака предназначена команда: div делитель
Делитель может находиться в памяти или в регистре и иметь размер 8, 16 или 32 бит. Местонахождение делимого фиксировано и так же, как в команде умножения, зависит от размера операндов. Результатом команды деления являются значения частного и остатка.
Размер операнда (делителя) |
Делимое
|
Частное |
Остаток |
1 байт |
AX |
AL |
AH |
2 байта |
DX:AX |
AX |
DX |
4 байта |
EDX:EAX |
EAX |
EDX |
При выполнении команды DIV может возникнуть прерывание (в данном курсе прерывания мы рассматривать не будем поэтому старайтесь избегать таких случаев):
если делитель равен нулю;
если частное не помещается в отведённую под него разрядную сетку (например, если при делении слова на байт частное больше 255).
Примеры:
div cl ;AL = AX / CL, остаток в AH
div di ;AX = DX:AX / DI, остаток в DX
11)NOP – ничего не делающая команда.
12)Сложение и вычитание с переносом. В системе команд процессоров x86 имеются специальные команды сложения и вычитания с учетом флага переноса (CF). Для сложения с учётом переноса предназначена команда ADC, а для вычитания — SBC. В общем, эти команды работают почти так же, как ADD и SUB, единственное отличие в том, что к младшему разряду первого операнда прибавляется или вычитается дополнительно значение флага C.
Логика работы команд:
ADC: <Приемник> = <Приемник> + <Источник> + С
SBC: <Приемник> = <Приемник> - <Источник> + С
Эти команды позволяют выполнять сложение и вычитание многобайтных целых чисел, длина которых больше, чем разрядность регистров процессора (в нашем случае 16 бит). Принцип программирования таких операций очень прост — длинные числа складываются (вычитаются) по частям. Младшие разряды складываются (вычитаются) с помощью обычных команд ADD и SUB, а затем последовательно складываются(вычитаются) более старшие части с помощью команд ADC и SBB. Так как эти команды учитывают перенос из старшего разряда, то мы можем быть уверены, что ни один бит не потеряется. Этот способ похож на сложение(вычитание) десятичных чисел в столбик. На рисунке ниже показано отличие операции ADC от ADD (CF - C Flag)