- •Архитектура эвм
- •Введение
- •Структура мпс
- •Основные понятия в архитектуре мпс
- •Архитектура фон Неймана
- •Гарвардская архитектура
- •Параллельная архитектура
- •Конвейерная архитектура
- •Суперскалярная архитектура
- •АрхитектурыCisc
- •Архитектуры risc
- •Архитектуры misc
- •Ассемблеры
- •Программа Ассемблер
- •Язык Ассемблер
- •Основы 32-битного программирования в Windows
- •Api функции
- •Сообщения Windows
- •Версии ассемблеров
- •Среды разработки
- •Представление данных в эвм
- •Системы счисления и преобразования между ними
- •Форматы представления чисел
- •Форматы представления двоичных чисел
- •Формат с плавающей точкой
- •Типы адресаций операндов
- •Интерфейсы
- •Последовательный интерфейс rs-232c
- •Интерфейс параллельного порта
- •Инфракрасный интерфейс
- •Интерфейс Bluetooth
- •Интерфейс usb
- •Интерфейс ieee 1394 - FireWire
- •Сопроцессоры
- •Система прерываний и исключений
- •Интерфейс jtag
- •Символы и строки
- •Архитектура cisc от Intel
- •Введение
- •Микроархитектура Intel
- •Микроархитектура р6
- •Микроархитектура NetBurst
- •Микроархитектура Pentium 4
- •Микроархитектура Intel Pentium Mobile
- •Микроархитектура Intel Core
- •Микроархитектура Intel Core Duo
- •Микроархитектура Intel Nehalem
- •Адресация памяти в ia_32
- •Наборырегистров
- •Целочисленныйпроцессор
- •Регистры общего назначения (рон)
- •Регистры флагов eflags
- •Регистр указателя команд
- •Сегментные регистры
- •Управляющие регистры
- •Системные адресные регистры
- •Прямой и обратный порядок следования байтов
- •Виды адресации операндов в памяти
- •Цикл выполнения команды
- •Распределение адресного простраства
- •Образ программы в памяти.
- •Математический сопроцессор
- •Xmm технология
- •Система команд
- •Формат команды
- •Классификация команд
- •Целочисленный процессор
- •Команды общего назначения
- •Команды ввода-вывода
- •Инструкции работы со стеком
- •Арифметико-логические инструкции
- •Цепочечные операции
- •Команды управления
- •Команды поддержки языков высокого уровня
- •Команды прерываний
- •Команды синхронизации процессора
- •Команды обработки цепочки бит
- •Команды управления защитой
- •Команды обмена с управляющими регистрами
- •Команды идентификации и управления архитектурой
- •Управление кэшированием
- •Команды управления кэшированием
- •Сопроцессор с плавающей точкой
- •Классификация команд
- •Команды управления сопроцессором
- •Команды передачи данных
- •Команды сравнения данных
- •Арифметические команды
- •Трансцендентные функции
- •Целочисленное mmx расширение
- •Синтаксис ммх-команд
- •Классификация команд
- •Инициализация
- •Передача данных
- •Упаковка данных
- •Распаковка данных
- •Арифметика
- •Сравнения
- •Дополнительные команды
- •XmMрасширение с плавающей точкой
- •Типы данных
- •Передача данных
- •Арифметика
- •Сравнения
- •Преобразования
- •Управление состоянием
- •Распаковка данных
- •Управление кэшированием
- •Дополнительные команды
- •Цикл трансляции, компоновки и выполнения
- •Ассемблер cisc
- •Введение
- •Средства программирования и отладки
- •Описание masm
- •Структура программы на ассемблере
- •Типы данных
- •Макросредства
- •Директивы
- •Архитектура risc
- •Система команд
- •Архитектура misc
- •Архитектура vliw
- •Архитектура вычислительных систем со сверхдлинными командами
- •Архитектура ia-64
- •Многоядерные архитектуры
- •Микроконтроллер avr от Atmel
- •Архитектура avr от Atmel
- •Ассемблер
- •Команды ассемблера
- •Директивы ассемблера
- •Выражения
- •Микроконтроллеры c28x
- •Архитектура c28x
- •Архитектура f28x
- •Инструментальные средства разработки по
- •Ассемблер
- •Команды ассемблера
- •Формат объектного файла
- •Директивы ассемблера
- •Макроязык и макрокоманды
- •Компоновщик
- •Архиватор
- •Абсолютный листер
- •Листер перекрестных ссылок
- •Утилита 16-ричного преобразования
- •Архитектура VelociTi
- •Структура и состав цсп с6x
- •Средства разработки цсп с6x
- •Ассемблер цсп с6x
- •Команды ассемблера
- •Выражения
- •Листинги
- •Листинги программ
- •Директивы ассемблера
- •Макроязык и макрокоманды
- •Компоновщик
- •Утилиты
- •Поддержка в matlab
- •Введение
- •Встроенные платы для цсп ‘c6x
Целочисленный процессор
Команды общего назначения
Команда
Описание
MOV приемник, источник
MOVe operand – пересылка операнда.
Пересылка данных в приемник из источника.
Адресаты - регистр, память или непосредственный операнд.
MOVS приемник, источник
MOVSB
MOVSW
MOVSD
MOVe String Byte/Word/Double worf– пересылкастрок,содержащих:
Байты
Слова
Двойные слова
MOVSХ приемник, источник
MOVe and Sign eXtension – пересылка со знаковым расширением.
Преобразование элемента со знаком меньшей размерности в эквивалентные элементы со знаком большей размерности.
MOVZХ приемник, источник
MOVe and Zero eXtension – пересылка с нулевым знаковым расширением.
Преобразование элемента без знака меньшей размерности в эквивалентные элементы без знака большей размерности.
XCHG операнд_1, операнд_2
eXCHanGe – обмен.
Обмен данными между операндами. Это регистры или память. Команда "память - память" в микропроцессоре Intel не предусмотрена.
BSWAP reg32
Byte SWAP - перестановка байтов.
Перестановка байт из порядка "младший - старший" в порядок "старший - младший". Разряды 7-0 обмениваются с разрядами 31-24, а разряды 15-8 с разрядами 23-16.
XLAT адрес_таблицы_байтов
transLATe byte from table – загрузка из таблицы.
Загрузить в регистр AL байт из таблицы в сегменте данных, на начало которой указывает EBX (ВХ), при этом начальное значение AL играет роль смещения.
LEA приемник, источник
Load Effective Address - загрузка эффективного адреса.
Получить эффективный адрес (смещение) источника.
LDS приемник, источник
Load pointer into DS - загрузить указатель сегмента в регистр DS из памяти.
Загрузить пару DS:reg из памяти (m). Вначале идет слово (или двойное слово) в регистр (reg), а в DS - последующее слово.
LES приемник, источник
Аналогично предыдущему, но для пары ES:reg.
LFS приемник, источник
Аналогично предыдущему, но для пары FS:reg.
LGS приемник, источник
Аналогично предыдущему, но для пары GS:reg.
LSS приемник, источник
Аналогично предыдущему, но для пары SS:reg.
SETcc операнд
byteSETonconditon– установка байта по условию.
Проверяет условие, заданное модификатором "cc". Если оно выполняется, то первый бит байта устанавливается в 1, в противном случае в 0. Модификаторы – по флагам.
Команды ввода-вывода
Команда
Описание
IN аккумулятор, номер порта
INput operand from port – ввести операнд из порта
Ввод в аккумулятор из порта ввода-вывода. Порт адресуется непосредственно или через регистр DX.
OUTномер порта,аккумулятор
OUT operand to port – вывести операнд в порта
Вывод из аккумулятор в порта ввода-вывода. Порт адресуется непосредственно или через регистр DX.
INSB
INSW
INSD
INput String Byte/Word/Double word operands – ввод изпортаэлементов:
Байта
Слова
Двойного слова.
Вводит данные из порта, адрес которого находится в регистре DX, в ячейку памяти, определяемой регистрами ES:[EDI/DI].
OUTSB
OUTSW
[OUTSD
OUT String Byte/Word/Double word operands – выводвпортэлементов:
Байта
Слова
Двойного слова.
Выводит данные из ячейки памяти, определяемой регистрами DS:[ESI/SI], в выходной порт, адрес которого находится в регистре DX.
Инструкции работы со стеком
Команда
Описание
PUSH источник
PUSH operand onto stack – поместить в стек.
Поместить в стек слово или двойное слово. Поскольку при включении в стек слова нарушается выравнивание стека по границам двойных слов, рекомендуется в любом случае помещать в стек двойное слово.
PUSH const
Поместить в стек непосредственный 32-битный операнд.
PUSHA
PUSH All general registers onto stack – поместить в стек все регистры общего назначения.
Поместить в стек регистры EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP.
POP пприемник
POP operand from the stack – извлечь операнд из стека.
Извлечь из стека слово или двойное слово.
POPА
POP All general registers onto stack – извлечь изстека все регистры общего назначения.
Извлечье из стека данные в регистры EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP.
PUSHF
PUSH Flags register onto stack
Помещение в стек регистра флагов.
POPF
POP Flags register from the stack
Извлечь из стека данные в регистр флагов.
Арифметико-логические инструкции
Целочисленная арифметика
Команда |
Описание |
ADD приемник, источник |
ADDition – сложение. Сложение двух операндов. Один из операндов – приемник. Первый операнд может быть регистром или ячейкой памяти, второй - регистром, ячейкой памяти, константой. Невозможно только, когда оба операнда являются ячейками памяти. |
XADD приемник, источник |
eXchange and ADD –обмен двух значений и суммирование. Данная операция производит в начале обмен операндами, а затем выполняет операцию ADD. |
ADC приемник, источник |
ADdition with Carry. Сложение с учетом флага переноса - в младший бит добавляется бит (флаг) переноса. |
INC операнд |
INCrement operand by 1. Увеличить операнд на 1. |
SUB операнд1, операнд2 |
SUBtract. Вычитание двух операндов. Остальное аналогично сложению (команда ADD). |
SBB операнд1, операнд2 |
SuBtract with Borrow. Вычитание с учетом предыдущего вычитания (бита заема). Из младшего бита вычитается бит (флаг) переноса. |
DEC r/m |
DECrement operand by 1. Уменьшить операнд на 1. |
CMP операнд1, операнд2 |
CoMPare operands – сравнение операндов. Вычитание без изменения операндов (сравнение). |
CMPXCHG приемник, источник |
CoMPare and eXCHanGe – сравнение и обмен.. Сравнение с обменом. Источник – всегда аккумулятор. Если значения в операнде-получателе и аккумуляторе равны, операнд-получатель заменяется операндом-источником, исходное значение операнда-получателя загружается в аккумулятор. |
CMPXCHG8B приемник, источник |
CoMPare and eXCHanGe 8 Byte – сравнение и обмен.. Сравнение с обменом 8 байтов. Источник – всегда аккумулятор. Если значения в операнде-получателе и аккумуляторе равны, операнд-получатель заменяется операндом-источником, исходное значение операнда-получателя загружается в аккумулятор. |
NEG источник |
NEGate operand. Изменение знака операнда. |
ААА |
Ascii Adjust after Addition - ASCII-коррекцияпослесложения. Алгоритм:
|
AAS |
Ascii Adjust after Substraction - ASCII-коррекция после вычитания. Алгоритм работы:
|
ААМ |
Ascii Adjust after Multiply - ASCII-коррекция после умножения. Алгоритм работы:
|
AAD |
Ascii Adjust before Division - ASCII-коррекция перед делением. Алгоритм работы:
|
DAA |
Decimal Adjust for Addition - десятичная коррекция после сложения. Алгоритм работы. команда работает только с регистром AL и анализирует наличие следующих ситуаций:
Если имеет место одна из этих двух ситуаций, то регистр al корректируется следующим образом:
|
DAS |
Decimal Adjust for Subtraction - десятичная коррекция после вычитания. Команда работает только с регистром AL и анализирует наличие следующих ситуаций:
Если имеет место одна из этих ситуаций, то регистр al корректируется следующим образом:
|
MUL множитель |
MULtiplay - умножение целых чисел без знака. Команда выполняет умножение двух операндов без учета знаков. Алгоритм зависит от формата операнда команды и требует явного указания местоположения только одного сомножителя, который может быть расположен в памяти или в регистре. Местоположение второго сомножителя фиксировано и зависит от размера первого сомножителя:
Результат умножения помещается также в фиксированное место, определяемое размером сомножителей:
|
IMUL множ IMUL множ1, множ2 IMUL резул, множ1, множ2 |
Integer MULtiplay - умножение целых чисел со знаком. Алгоритм работы команды зависит от используемой формы команды. Форма команды с одним операндом требует явного указания местоположения только одного сомножителя, который может быть расположен в ячейке памяти или регистре. Местоположение второго сомножителя фиксировано и зависит от размера первого сомножителя:
Результат умножения для команды с одним операндом также помещается в строго определенное место, определяемое размером сомножителей:
Команды с двумя и тремя операндами однозначно определяют расположение результата и сомножителей следующим образом:
|
DIV делитель |
DIVide unsigned - деление целых чисел без знака. Для команды необходимо задание двух операндов — делимого и делителя. Делимое задается неявно и размер его зависит от размера делителя, который указывается в команде. Алгоритм работы:
|
IDIV делитель |
Integer DIVide - деление целых чисел со знаком. Для команды необходимо задание двух операндов — делимого и делителя. Делимое задается неявно, и размер его зависит от размера делителя, местонахождение которого указывается в команде. Алгоритм работы:
|
CBW |
Convert Byte to Word - преобразование байта в слово Команда использует только регистры al и ax: Алгоритм работы - анализ знакового бита регистра al:
|
CWD |
Convert Word to Double word - преобразование слова в двойное слово. Команда использует только регистры al и ax. Алгоритм работы -анализ знакового бита регистра al:
|
CWDE |
Convert Word to Double word Extended - преобразование слова в двойное слово с расширением. Ккоманда использует только регистры ax и eax. Алгоритм работы - анализ знакового бита регистра ax:
|
CDQ |
Convert Double word to Quad word Преобразование двойного слова (EAX) в учетверенное слово (EDX:EAX). Алгоритм работы: копирование значения старшего бита регистра eax на все биты регистра edx. |
Логические операции
Команда |
Описание |
ANDприемник, источник |
logical AND – логическое И. Побитовая логическая "И". В приемнике бит устанавливается в 1, если отличны от нуля одноименные биты и в источнике, и в приемнике.. |
TESTприемник, источник |
TEST операнд. Аналогична "AND", но не меняет биты приемника. Используется для проверки ненулевых бит. |
OR приемник, источник |
logical OR – логическое включающее ИЛИ. Побитовая логическая "ИЛИ". В приемнике бит устанавливается в 1, если отличны от нуля одноименные биты или в источнике, или в приемнике.. |
XOR приемник,источник |
logical eXclusive OR – логическое исключающее ИЛИ. Побитовая логическая "иселючающее ИЛИ". В приемнике бит устанавливается в 1, если одноименные биты в источнике и приемнике различны.. |
NOTисточник |
NOT operand – логическое НЕ. Переключение всех бит (инверсия).. |
Сдвиговые операции
Команда |
Описание |
RCL/RCR dest,src |
Циклический сдвиг влево/вправо через бит переноса CF. Src может быть либо CL, либо непосредственный операнд. |
ROL/ROR dest,src |
Аналогично командам RCL/RCR, но по другому, работает с флагом CF. Флаг не участвует в цикле, но в него попадает бит, перешедший с начала на конец или наоборот. |
SAL/SAR dest,src |
Сдвиг влево/право. Называется еще арифметическим сдвигом. При сдвиге вправо дублируется старший бит. При сдвиге влево младший бит заполняется нулем. Ушедший бит помещается в CF. |
SHL/SHR dest,src |
Логический сдвиг влево/вправо. Сдвиг вправо отличается от SAR тем, что и старший бит заполняется нулем. |
SHLD/SHRD dest,src,count |
Трехоперандные команды сдвига влево/вправо. Первым операндом, как обычно, может быть либо регистр, либо ячейка памяти, вторым операндом должен быть регистр общего назначения, третьим - регистр CL или непосредственный операнд. Суть операции заключается в том, что dest и src в начале объединяются, а потом производится сдвиг на количество бит count. Результат снова помещается вdest. |