Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Широтно-импульсная модуляцияСодержание книги
Поиск на нашем сайте
Из всех счётчиков контроллера Atmega8 только таймер счётчик T/C2 имеет режим широтно-импульсной модуляции (ШИМ). Структурная схема T/C2 в режиме ШИМ приведена на рис. 2.4.1.
Режим Быстрой ШИМ таймера счётчика T/C2 обеспечивает высокочастотное генерирование ШИМ-сигнала. Этот режим отличается от режима ШИМ с фазовой коррекцией тем, что имеет пилообразное изменение значения регистра TCNT2 с левосторонним наклоном (рис. 2.4.2). Режим с фазовой коррекцией имеет двустороннее пилообразное изменение значения регистра TCNT2. Режим быстрой ШИМ генерирует прямоугольные импульсы, период которых определяется временем заполнения счётного регистра TCNT2 от 0 до 255 тактовыми сигналами, которые проходят через предделитель частоты. Длительность импульсов определяется значением в регистре совпадения OCR2. Скважность определяется отношением периода к длительности. 8-битный счётный регистр TCNT2 таймера-счётчика T/C2 доступен по чтению и по записи. Однако запись в этот регистр блокируется в течение следующего такта после совпадения со значением регистра OCR2, так как в это время происходит запрос внутреннего прерывания по сигналу TOV2, по которому формируется возрастающий фронт ШИМ-импульса. Содержимое 8-битного регистра совпадения OCR2 (OutPut Compare Register 2) непрерывно сравнивается со значением счётчика TCNT2. При совпадении формируется ниспадающий фронт импульса на выходе совпадения OC2 микроконтроллера. Описание битов регистра управления TCCR2 приведено на рис. 2.4.3. Бит FOC2 в режиме ШИМ не используется, поэтому должен быть равен нулю. Описание битов WGM (Waveform Generation mode) генерации формы импульсов приведено в табл. 2.4.1. Таблица 2.4.1
Для генерации неинвертированных импульсов в быстром режиме ШИМ необходимо записать в биты COM (Compare Output Mode) следующие значения: COM21 1, COM20 0, для инвертированных импульсов: COM21 1, COM20 1. Описание битов CS (Clock Select) выбора коэффициента предделителя частоты тактовых импульсов приведено в табл. 2.4.2. Таблица 2.4.2
Период одного ШИМ-импульса можно вычислить по формуле: T = 256*N / f такт, где N – один из коэффициентов предделителя 8, 32, 64, 128, 256, 1024. Пример 2.4.1. Рассмотрим задачу управления электродвигателем с использованием режима быстрой ШИМ на основе T/C2. На рис. 2.4.4 изображена схема подключения кнопок SW1, SW2 и двигателя постоянного тока к контроллеру. Двигатель управляется с линии PB3 (OC2), которая в режиме ШИМ является выходом ШИМ-импульсов. При включении контроллера двигатель начинает вращаться со средней скоростью. Кнопки SW1 и SW2 подключены к линиям внешних прерываний контроллера INT0 и INT1 соответственно. Кнопка SW1 предназначения для плавного уменьшения частоты вращения двигателя, SW2 – для увеличения. Однократное нажатие кнопки SW1 уменьшает на 4 длительность импульса, открывающего транзистор, а нажатие SW2 – увеличивает на 4. На листинге 2.4.1 приведена программа управления двигателем. Таймер T/C2 инициализируется с помощью установки битов регситра TCCR2: v 1 << WGM21 | 1 << WGM20 – режим Быстрой ШИМ; v 1 << COM21 | 0 << COM20 – импульсы ШИМ неинвертированы; v 0 << CS22 | 0 << CS21 | 1 << CS20 – без предделения частоты. Листинг 2.4.1. .INCLUDE "m8def.inc"
;======================================================== ; MACRO ;======================================================== .MACRO outi ldi rTemp, @1 out @0, rTemp .ENDM
;======================================================== ; INTERRUPTS VECTOR ;======================================================== .ORG 0x00 rjmp RESET .ORG INT0addr rjmp INT_0 .ORG INT1addr rjmp INT_1 .ORG OC2addr rjmp ERROR .ORG OVF2addr rjmp ERROR .ORG ICP1addr rjmp ERROR .ORG OC1Aaddr rjmp ERROR .ORG OC1Baddr rjmp ERROR .ORG OVF1addr rjmp ERROR .ORG OVF0addr rjmp ERROR .ORG SPIaddr rjmp ERROR .ORG URXCaddr rjmp ERROR .ORG UDREaddr rjmp ERROR .ORG UTXCaddr rjmp ERROR .ORG ADCCaddr rjmp ERROR .ORG ERDYaddr rjmp ERROR .ORG ACIaddr rjmp ERROR .ORG TWIaddr rjmp ERROR .ORG SPMRaddr rjmp ERROR
.ORG INT_VECTORS_SIZE ERROR: rjmp ERROR; ловушка
;======================================================== ; DEFs ;======================================================== .DEF rTemp = R16
;======================================================== ; INTERRUPTS ;========================================================
INT_0:; Прерывание с кнопки подключенной к PD2(INT0)
; Здесь должна быть антидребезговая задержка примерно 500 микросекунд ; и сброс флага прерывания, но т.к. в симуляции дребезга нет, то учитывать ; его не будем
in rTemp,OCR2; читаем текущее значение OCR2 subi rTemp,4; уменьшаем на 4 длительность импульса, out OCR2,rTemp; тем самым уменьшая скважность ШИМ reti
INT_1:; прерывание с кнопки подключенной к PD3(INT1)
;Здесь также нужна антидребезговая задержка и сброс флага прерывания ; в GIFR
in rTemp,OCR2; длительность импульса увеличиваем на 4 subi rTemp,-4; инструкции addi нет, приходится вычитать ; отрицательное значение out OCR2, rTemp reti
;======================================================== ; MAIN ;======================================================== RESET: cli; маскируем все прерывания outi SPL, low(RAMEND); инициализируем указатель стека outi SPH, high(RAMEND)
outi PORTD, (1 << PORTD2 | 1 << PORTD3); подтяжка ~100k ; к питанию outi DDRD, 0x00; все пины порта D на вход outi DDRB, 0xFF; все пины порта B на выход
; Настройка таймера/счетчика2 в режим Быстрой ШИМ с ; неинвертированным выходом и без делителя частоты
outi TCCR2,(1 << WGM21 | 1 << WGM20 | 1 << COM21 | 1 << CS20) outi OCR2,0x80; устанавливаем длит-ть импульса (скважность = 50%)
outi MCUCR,(1 << ISC11 | 1 << ISC01); настройка прерываний по ; спаду уровня на ножках INT0, INT1 outi GICR,(1 << INT0 | 1 << INT1); включаем прерывания ; INT0 и INT1
sei; включаем все прерывания
MAIN_LOOP: rjmp MAIN_LOOP; зацикливаемся в ожидании прерывания Скомпилируйте программу и выполните её пошагово до цикла ожидания прерываний. Убедитесь, что регистры контроллера содержат необходимые значения (рис. 2.4.5). Обратите внимание, что регистр сравнения OCR2 не содержит число 0x80, которое записывалось в него макросом outi OCR2,0x80. Дело в том, что операции записи в этот регистр вступают в силу только после прерывания, вызванного переполнением счётчика TCNT2, а до этого «замораживаются». Так сделано для того, чтобы изменение значения OCR2, произведённое в текущий период ШИМ-импульса, вступало в силу в начале следующего периода. Поэтому в течение первого периода можно увидеть только увеличение значения регистра TCNT2 от 0 до 255 (0xFF), так как значение OCR2 = 0 и формирование ШИМ-импульса не происходит. Только при переполнении регистра TCNT2 он приобретёт нулевое значение, совпадающее со значением в OCR2, возникнет прерывание, которое модифицирует регистр OCR2 значением 0x80. На линии PINB3 при этом будет оставаться нулевое значение. Если не задействовать кнопки SW1 и SW2, то при дальнейшем автовыполнении (рис. 2.4.6) на линии PINB3 в течение второго, третьего и последующих импульсов можно наблюдать ШИМ со скважностью 0,5. Такая скважность обусловлена тем, что значение OCR2 = 0x80 составляет половину максимального значения регистра TCNT2.
На рисунке 2.4.7 показана диаграмма изменения значений TCNT2 и линии PINB3. Как видно из рисунка половину периода составляет ширина импульса. Вплоть до значения TCNT2 < 0x80 значение PINB3 = 0, а начиная со значения TCNT2 = 0x80 и выше бит PINB3=1. По переполнению TCNT2 и переходу его в ноль, линия PINB3=0. Такая ШИМ со скважностью 0,5 будет продолжаться до тех пока не будет нажата и отпущена одна из кнопок SW1 или SW2. Для того, чтобы наблюдать увеличение скважности ШИМ надо во время паузы щелчком мышки установить бит PIND2 в единицу, выполнить хотя бы один шаг программы, чтобы AVR Studio зарегистрировал “нажатие SW1”. После этого сбросить бит PIND2 в ноль и выполнить один шаг. При этом AVR Studio на линии PIND2 зарегистрирует спадающий фронт импульса (кнопка SW1 отпущена) и будет вызвано прерывание INT_0. Оно уменьшит значение OCR2 на 4, уменьшая тем самым ширину импульса. Нажатие и отжатие кнопки SW2 (PIND3) будет увеличивать ширину импульса на 4 с помощью прерывания INT_1. Таким образом, мощность, пропускаемая транзистором на обмотку электродвигателя будет регулироваться малыми дискретами, создавая впечатление плавного управления частотой вращения. Задание 2.4.1. Разработать программу для инверсной ШИМ с величиной изменения OCR2, равной 0x30, для увеличения и уменьшения скважности. Задание 2.4.2. Разработать электрическую схему и программу для включения, выключения и управления частотой вращения электродвигателя постоянного тока с использованием трёх кнопок (вкл/выкл, увеличение, уменьшение), опрашиваемых программно. Задание 2.4.3. Разработать электрическую схему и программу для плавного программного уменьшения до нуля яркости свечения лампы переменного тока с использованием динистора. Подсказка: Значение OCR2 должно плавно уменьшаться от 255 до 0 в течение нескольких секунд. Приложение А. Таблица ASCII-кодов
Таблица А.1. Коды основной таблицы ASCII-символов
Таблица А.2. Коды дополнительной таблицы ASCII-символов (Россия)
Приложение Б. Система команд процессоров Intel семейства IA-32 В этом приложении кратко описаны основные команды процессоров Intel семейства IA-32, используемые в реальном режиме адресации. В описании каждой команды приведены флаги, состояние которых изменяется после выполнения команды. Состояния флагов обозначаются символами: 1 – флаг устанавливается; 0 – флаг сбрасывается ? – состояние флага не определено; * – состояние флага изменяется по специально оговорённым правилам. Таблица Б.1. Условные обозначения операндов
Операнды команды имеют следующие обозначения: мнемокод операнд-приёмник, операнд-источник или мнемокод dest, source
AAA – Коррекция после сложения ASCII-чисел. Если значение в AL больше 9, то к нему прибавляется число 6, а значение регистра AH увеличивается на единицу. Формат команды: AAA
AAD – Коррекция перед делением ASCII-чисел. Преобразовывает неупакованные двоично-десятичные числа, находящиеся в регистрах AH и AL в двоичное число перед выполнением команды DIV. Формат команды: AAD
AAM – Коррекция после умножения ASCII-чисел. Корректирует результат в регистре AX после умножения двух неупакованных двоично-десятичных чисел. Формат команды: AAM
AAS – Коррекция после вычитания ASCII-чисел. Если значение в AL больше 9, то из него вычитается число 6, а значение регистра AH уменьшается на единицу. Формат команды: AAS
ADC – Сложение с учётом переноса. Складывает два операнда и прибавляет к результату значение флага переноса. Размеры операндов должны быть одинаковы. Формат команды: ADC reg, reg ADC mem, reg ADC reg, mem ADC reg, imm ADC mem, imm
ADD – Сложение. Складывает два операнда. Размеры операндов должны быть одинаковы. Формат команды: ADD reg, reg ADD mem, reg ADD reg, mem ADD reg, imm ADD mem, imm
AND – Логическое побитовое И. Результат помещается в операнд-приёмник. Формат команды: AND reg, reg AND mem, reg AND reg, mem AND reg, imm AND mem, imm
BOUND – Проверка границ массива. Значение индекса, размещённого в reg32, должно быть не меньше нижней граница массива, находящейся по адресу mem64, и не больше верхней границы массива, находящейся по адресу mem64 + 4. Если индекс выходит за границы диапазона, то вызывается прерывание 5. Формат команды: BOUND reg32, mem64
BSF, BSR – Сканирование битов. Сканируются биты операнда-источника, пока не будет найден первый единичный бит. Если такой бит найден, флаг нуля ZF сбрасывается, а в регистр-приёмник помещается индекс единичного бита. Иначе флаг ZF устанавливается. BSF сканирует от младшего к старшему биту, BSR – в обратном направлении. Формат команды: BSF reg16, r/m16 BSF reg32, r/m32
BSWAP – Обмен байтов. Реверсирует порядок следования байтов указанном регистре (переставляет нулевой и третий, первый и второй). Формат команды: BSWAP reg32
BT, BTC, BTR, BTS – Тестирование битов. Копирует бит операнда-приёника, номер которого задан в операнде-источнике, во флаг переноса CF, а затем в зависимости от команды, инвертирует, сбрасывает или устанавливает этот бит в операнде-приёмнике. Команда BTC инвертирует, BTR – сбрасывает, BTS – устанавливает. Формат команды: BT r/m16, imm8 BT r/m32, imm8 BT r/m16, r16 BT r/m32, r32
CALL – Вызов процедуры. Помещает в стек адрес следующей команды и передаёт управление по адресу, указанному в операнде. При вызове ближней процедуры (в том же сегменте кода), в стек помещается только смещение следующей команды. При вызове дальней процедуры – сегмент и смещение следующей команды. Формат команды: CALL nearlabel CALL farlabel CALL mem16 CALL mem32 CALL reg
CWB – Преобразовать байт в слово. Расширяет знаковый разряд регистра AL сквозь весь регистр AH. Формат команды: CWB
CDQ – Преобразовать двойное слово в учетверённое. Расширяет знаковый разряд регистра EAX в EDX. Формат команды: CDQ
CLC – Сброс флага переноса. Формат команды: CLC
CLD – Сброс флага направления. Формат команды: CLD
CLI – Сброс флага прерывания. Формат команды: CLI
CMC – Сброс флага переноса. Формат команды: CMC
CMP – Сравнить. Сравнивает операнды путём неявной операции вычитания операнда-источника из операнда-приёмника. Формат команды: CMP reg, reg CMP mem, reg CMP reg, mem CMP reg, imm CMP mem, imm
CMPS, CMPSB, CMPSW, CMPSD – Сравнить две строки. Сравнивает две строки в памяти, адреса которых заданы в регистрах DS:ESI и ES:EDI путём неявного вычитания источника из приёмника. CMPS сравнивает явно заданные операнды, CMPSB – сравнивает байты, CMPSW – сравнивает слова, CMPSD – сравнивает двойные слова. Значения регистров ESI и EDI автоматически увеличиваются на 1, 2 или 4, если флаг направления (DF) установлен, и уменьшаются – если сброшен. Величина увеличения/уменьшения определяется размером операндов. Формат команды: CMPS mem8, mem8 CMPS mem16, mem16 CMPS mem32, mem32 CMPSB CMPSW CMPSD
CMPXCHG – Сравнить и обменять. Сравнивает операнд-приёмник с содержимым аккумулятора. Если они равны, операнд-источник копируется в операнд-приёмник, иначе – операнд-приёмник копируется в аккумулятор. Формат команды: CMPXCHGreg, reg CMPXCHGmem, reg
CWD – Преобразовать слово в двойное слово. Расширяет знаковый разряд регистра AX в DX. Формат команды: CWD
DAA – Десятичная коррекция после сложения. Преобразовывает двоичное число, находящееся в AL и полученное в результате выполнения команд ADD и ADC в упакованный десятичный формат. В результате сумма будет представлена в регистре AL двумя двоично-десятичными цифрами. Формат команды: DAA
DAS – Десятичная коррекция после вычитания. Преобразовывает двоичное число, находящееся в AL и полученное в результате выполнения команд SUB и SBB в упакованный десятичный формат. Формат команды: DAS
DEC – Декремент. Вычитает единицу из указанного операнда. Формат команды: DEC reg DEC mem
DIV – Беззнаковое целочисленное деление. Деление операнда, находящегося в регистрах AX или DX:AX или EDX:EAX, на соответственно 8-, 16-, 32-разрядное беззнаковое целое число, находящееся в одном из регистров или в памяти. При использовании 8-разрядного делителя, делимое находится в AX, частное – в AL, остаток – в AH. При использовании 16-разрядного делителя, делимое находится в DX:AX, частное – в AX, остаток – в DX. При использовании 32-разрядного делителя, делимое находится в EDX:EAX, частное – в EAX, остаток – в EDX. Формат команды: DIV reg DIV mem
IDIV –Целочисленное деление со знаком. Деление операнда, находящегося в регистрах AX или DX:AX или EDX:EAX, на соответственно 8-, 16-, 32-разрядное целое число со знаком, находящееся в одном из регистров или в памяти. При использовании 8-разрядного делителя, делимое находится в AX, частное – в AL, остаток – в AH. При использовании 16-разрядного делителя, делимое находится в DX:AX, частное – в AX, остаток – в DX. При использовании 32-разрядного делителя, делимое находится в EDX:EAX, частное – в EAX, остаток – в EDX. Как правило, команде IDIV предшествует команда CWB или CWD, с помощью которой знак делимого расширяется влево на нужное число разрядов. Формат команды: IDIV reg IDIV mem
IMUL –Целочисленное умножение со знаком. Умножение целого числа со знаком, находящегося в аккумуляторе. При использовании 8-разрядного множителя, множимое находится в AL, произведение – в AX. При использовании 16-разрядного множителя, множимое находится в AX, произведение – в DX:AX. При использовании 32-разрядного множителя, множимое находится в EAX, произведение – в EDX:EAX. Как правило, команде IDIV предшествует команда CWB или CWD, с помощью которой знак делимого расширяется влево на нужное число разрядов. Если значение старшей половины произведения не является расширением знакового разряда из младшей половины произведения, то устанавливаются флаги OF, CF. Формат команды: IMUL r/m8 IMUL r/m16 IMUL r/m32 IMUL r16, r/m16 IMUL r16, imm8 IMUL r16, imm16 IMUL r32, r/m32 IMUL r32, imm8 IMUL r32, imm32 IMUL r16, r/m16, imm8 IMUL r16, r/m16, imm16 IMUL r32, r/m32, imm8 IMUL r32, r/m32, imm32
IN – Ввести данные из порта. Вводит данные из порта и помещает в аккумулятор. Номер порта задаётся в виде 8-разрядной константы (00h‑0FFh), либо 16-разрядного адреса (0000h‑0FFFFh), загруженного в регистр DX. Формат команды: IN accum, imm IN accum, DX
INC – Инкремент. Прибавляет единицу к указанному операнду. Формат команды: INC reg INC mem
INS, INSB, INSW, INSD – Ввести строку из порта. Вводит из порта поток байтов, слов или двойных слов и сохраняет их в памяти по адресу, указанному в регистровой паре ES:EDI. Номер порта задаётся в регистре DX. После ввода данных значение EDI автоматически изменяется в зависимости от флага направления на 1, 2 или 4 байта. Величина изменения определяется из названия команды: INSB – на 1 байт, INSW – на 2 байта, INSD– на 4 байта. Перед любой из описываемых команд можно использовать префикс повторения REP. Формат команды: INS dest, DX REP INSB dest, DX REP INSW dest, DX REP INSD dest, DX
INT – Вызов прерывания. Генерирует программное прерывание. Перед вызовом процедуры обработки прерывания флаги IF и TF сбрасываются, а в стек помещаются текущие значения флагов и адрес возврата: содержимое регистров CS и IP. Формат команды: INT imm INT 3; для отладки
INTO – Прерывание при переполнении. Генерирует внутреннее прерывание процессора номер 4 в случае, если установлен флаг переполнения OF. Формат команды: INTO
IRET, IRETD – Возврат из прерывания. Завершает процедуру обработки прерывания путём извлечения из стека и восстановления регистра флагов и адреса возврата. Команды IRET и IRETD применяются при 16- и 32-разрядном программировании соответственно. Формат команды: IRET
Jусловие – Условный переход. Переход на метку. Принцип формирования элемента "условие" команды условного перехода показан в нижеуказанной таблице Б.2. Таблица Б.2. Принцип формирования элемента "условие" команды условного перехода.
Мнемоники команды условного перехода приведены в таблице Б.3. Таблица Б.3. Мнемоники условного перехода
Формат команды: Jусловие метка
JCXZ, JECXZ – Переход если регистр CX или ECX равен нулю. Переход к короткой метке. Формат команды: JCXZ shortlabel JECXZ shortlabel
JMP – Безусловный переход по метке. Переход к короткой метке. Формат команды: JMP shortlabel JMP nearlabel JMP farlabel JMP reg16 JMP reg32 JMP mem16 JMP mem32
LAHF – Загрузить флаги в регистр AH. Загружает в AH младший байт регистра флагов. Формат команды: LAHF
LDS, LES, LFS, LGS, LSS – Загрузить дальний указатель. Загружает содержимое памяти одновременно в сегментный регистр (DS, ES, FS, GS или SS) и в указанный в первом операнде регистр общего назначения. Формат команды: LDS reg, mem LES reg, mem LFS reg, mem LGS reg, mem LSS reg, mem
LEA – Загрузить текущий адрес. Вычисляет 32-разрядный текущий адрес операнда и загружает его в РОН. Команда очень похожа на команду mov…offset, за исключением того, что команда LEA вычисляет адрес во время выполнения программы, а не во время её компиляции. Формат команды: LEA reg, mem
LODS, LODSB, LODSW, LODSD – Загрузить строковые данные в аккумулятор. Загружает в аккумулятор содержимое байта, слова или двойного слова, адресуемого через регистр DS:ESI. При использовании LODS необходимо явно указать операнд-источник в памяти. Содержимое регистра ESI автоматически увеличивается/уменьшается на 1,2 или 4, в зависимости от флага направления DF. Формат команды: LODS mem LODSB LODSW LODSD
LOOP – Организовать цикл. Уменьшает счётчик цикла ECX на единицу и, если ECX больше нуля, передаёт управление по указанной короткой метке, иначе – передаёт управление следующей команде. Формат команды: LOOP shortlabel
LOOPE, LOOPZ – Организовать цикл, если ZF=1. Уменьшает счётчик цикла ECX на единицу и, если ECX больше нуля и флаг нуля ZF=1, то передаёт управление по указанной короткой метке, иначе – передаёт управление следующей команде. Формат команды: LOOPE shortlabel LOOPZ shortlabel
LOOPNE, LOOPNZ – Организовать цикл, если ZF=0. Уменьшает счётчик цикла ECX на единицу и, если ECX больше нуля и флаг нуля ZF=0, то передаёт управление по указанной короткой метке, иначе – передаёт управление следующей команде. Формат команды: LOOPNE shortlabel LOOPNZ shortlabel
MOV – Переслать. Копирует байт, слово или двойное слово из операнда-источника в операнд-приёмник. Формат команды: MOV reg, reg MOV mem, reg MOV reg, mem MOV reg, imm MOV mem, imm MOV reg16, segreg MOV segreg, reg16 MOV mem16, segreg MOV segreg, mem16
MOVS, MOVSB, MOVSW, MOVSD – Переслать строку. Копирует байт, слово или двойное слово из памяти, адресуемой регистровой парой DS:ESI, в память, адресуемую регистровой парой ES:EDI. В команде MOVS должны быть указаны оба операнда. Содержимое регистров автоматически изменяется на 1, 2 или 4 в зависимости от типа команды. Если DF=1, то ESI и EDI уменьшаются, иначе – увеличиваются. Формат команды: MOVS dest, source MOVS ES:dest, segreg:source MOVSB MOVSW MOVSD
MOVSX – Переслать и дополнить знаком. Копирует байт или слово в больший по размеру регистр. При этом оставшиеся неопределёнными биты регистра-приёмника заполняются значением знакового бита операнда-источника. Формат команды: MOVSX reg16, reg8 MOVSX reg16, mem8 MOVSX reg32, reg8 MOVSX reg32, mem8 MOVSX reg32, reg16 MOVSX reg32, mem16
MOVSZ – Переслать и дополнить нулями. Копирует байт или слово в больший по размеру регистр. При этом оставшиеся неопределёнными биты регистра-приёмника заполняются нулями. Формат команды: MOVSZ reg16, reg8 MOVSZ reg16, mem8 MOVSZ reg32, reg8 MOVSZ reg32, mem8 MOVSZ reg32, reg16 MOVSZ reg32, mem16
MUL – Целочисленное умножение без знака. Умножает операнд, указанный в команде на содержимое аккумулятора. При 8-разрядном умножении произведение помещается в AX, при 16-разрядном – в DX:AX, при 32-разрядном – в EDX:EAX. Формат команды: MUL reg MUL mem
NEG – Инверсия знака. Изменяет знак числа на противоположный, вычисляя его двоичный дополнительный код. Формат команды: NEG reg NEG mem
NOP – Нет операции. Эта команда не выполняет никаких действий и используется внутри цикла для организации временных задержек, а также для выравнивания последующих за ней команд на заданную границу (слова, двойного слова и т.п). Формат команды: NOP
NOT – Логическое отрицание. Побитная инверсия. Формат команды: NOT reg NOT mem
OR – Логическое ИЛИ. Формат команды: OR reg, reg OR mem, reg OR reg, mem OR reg, imm OR mem, imm
OUT – Вывести данные в порт. Выводит байт, слово или двойное слово из аккумулятора в порт. Первый операнд определяет номер порта, который задаётся в виде 8-разрядной константы (00h-0FFh), либо 16-разрядного адреса (0000h-0FFFFh), загруженного в регистр DX. Формат команды: OUT imm, accum OUT DX, accum
OUTS, OUTSB, OUTSW, OUTSD – Вывести строку в порт. Выводит поток байтов, слов или двойных слов из памяти, адрес которой указан в регистровой паре ES:EDI, в порт. Номер порта указывается в регистре DX. После вывода данных EDI автоматически изменяется согласно флагу направления и размеру используемых операндов. Перед командой может использоваться префикс повторения REP. Формат команды: OUTS dest, DX REP OUTSB dest, DX REP OUTSW dest, DX REP OUTSD dest, DX
POP – Вытолкнуть данные из стека. Копирует содерж
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-06-29; просмотров: 624; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 52.15.72.229 (0.01 с.) |