- •Архитектура эвм
- •Введение
- •Структура мпс
- •Основные понятия в архитектуре мпс
- •Архитектура фон Неймана
- •Гарвардская архитектура
- •Параллельная архитектура
- •Конвейерная архитектура
- •Суперскалярная архитектура
- •Архитектуры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
Ассемблер
Введение
Ассемблер преобразовывает (транслирует) исходные файлы ассемблера в объектные файлы в машинном коде. Эти файлы находятся в общем формате объектного файла (COFF). Исходные файлы могут содержать следующие инструкции ассемблера:
Директивы Ассемблера.
Макро директивы.
Команды ассемблера.
Формат инструкций исходника
Компилятор работает с исходными файлами, содержащими инструкции, метки и директивы. Инструкции и директивы, как правило, имеют один или несколько операндов.
Строка кода не должна быть длиннее 120 символов.
Строка ассемблерного кода завершается символом Enter. Строка содержит поля, разделенные пробелами. Строка может иметь одну из 4 форм:
[метка:] директива [операнды] [Комментарий]
[метка:] инструкция [операнды] [Комментарий]
Комментарий
Пустая строка
Позиции, указанные в квадратных скобках, необязательны.
Ассемблер не различает регистр символов.
Любая строка может начинаться с метки, которая является набором символов, заканчивающимся двоеточием. Метки используются для указания места, в которое передаётся управление при переходах, а также для задания имён переменных.
Операнды разделяются запятыми (без пробелов).
Текст после точки с запятой (;) и до конца строки – это комментерий. Он игнорируется компилятором. Комментарий имеет следующую форму:
; [Текст]
Компилятор не требует, чтобы метки, директивы, комментарии или инструкции находились в определённой колонке строки.
Примеры:
label: .EQU var1=100 ; Устанавливает var1=100 (это помеченная директива).
.EQU var2=200 ; Устанавливает var2=200 (это директива).
; Строка с одним только комментарием
Команды ассемблера
Операнды в командах могут быть таких видов:
Rd: Результирующий (и исходный) регистр в регистровом файле
Rr: Исходный регистр в регистровом файле
b: Константа (3 бита), может быть константное выражение
s: Константа (3 бита), может быть константное выражение
P: Константа (5-6 бит), может быть константное выражение
K6; Константа (6 бит), может быть константное выражение
K8: Константа (8 бит), может быть константное выражение
k: Константа (размер зависит от инструкции), может быть константное выражение
q: Константа (6 бит), может быть константное выражение
Rdl:═ R24, R26, R28, R30. Для инструкций ADIW и SBIW
X,Y,Z: Регистры косвенной адресации (X=R27:R26, Y=R29:R28, Z=R31:R30)
Используемые обозначения
Символика |
Назначение |
Комментарий |
SREG |
Регистр состояния |
Адрес $3F |
C |
Флаг переноса |
Разряд 0 в регистре SREG |
Z |
Флаг нулевого результата |
Разряд 1 в регистре SREG |
N |
Флаг отрицательного результата |
Разряд 2 в регистре SREG |
V |
Флаг переполнения |
Разряд 3 в регистре SREG |
S |
Флаг знака |
Разряд 4 в регистре SREG |
II |
Флаг половинного переноса |
Разряд 5 в регистре SREG |
T |
Флаг копирования |
Разряд 6 в регистре SREG |
I |
Флаг разрешения прерываний |
Разряд 7 в регистре SREG |
Rd |
Регистр назначения |
|
Rr |
Регистр передающий |
|
R |
Регистр результата |
|
Kn |
n-битная константа |
|
X, Y, Z |
Указатели при косвенной адресации |
X = R27:R26 Y = R29:R28 Z = R31:R30 |
Rdl |
Младший байт регистровой пары |
Пара Rdh:Rdl |
Rdh |
Старший байт регистровой пары |
Пара Rdh:Rdl |
P |
Адрес порта ввода/вывода |
|
q |
Смещение при косвенной адресации |
|
Стек |
Область памяти для хранения адреса возврата или промежуточного значения |
|
SP |
Указатель стека |
|
X |
Обозначает разряды, устанавливаемые ассемблером в 0. |
|
Команды условного перехода c учетом знака
Условие
Команда
Пояснение
Rd ≥ Rr ?
brge
Переход, если Rd ≥Rr (S=0)
Rd = Rr ?
breq
Переход, если Rd = Rr (Z=1)
Rd < Rr ?
brlt
Переход, если Rd < Rr (S=1)
Команды прямого опроса флагов
Условие
Команда
Пояснение
C ?
brcs
Переход по переносу (C = 1)
C ?
brcc
Переход, если переноса нет (C = 0)
Z ?
breq
Переход по нулю (Z = 1)
Z ?
brne
Переход по не нулю (Z = 0)
N ?
brmi
Переход по минусу (N = 1)
N ?
brpl
Переход по плюсу(N = 0)
V ?
brvs
Переход по переполнению (V = 1)
V ?
brvc
Переход, если переполнения нет (V = 0)
Арифметические и логические команды
Мнемоника
Описание
Действие
Циклы
Примеч.
ADD Rd,Rr
Сложить
Rd < Rd+Rr
1
ADDI Rd,K
Сложить
с константой
Rd < Rd+K
1
ADС Rd,Rr
Сложить с переносом
Rd < Rd+Rr+С
1
ADСI Rd,Rr
Сложить константу
с переносом
Rd < Rd+K+С
1
ADW Rdl,Rr
Сложить слово
с константой
Rdh,l < Rdh,l+K
2
Rdl - парный
SUB Rd,Rr
Вычесть
Rd < Rd-Rr
1
SUBI Rd,K
Вычесть константу
Rd <- Rd-K
1
SBС Rd,Rr
Вычесть с переносом
Rd < Rd-Rr-С
1
SBСI Rd,Rr
Вычесть константу
с переносом
Rd < Rd-K-С
1
SBW Rdl,Rr
Вычесть слово
с константой
Rdh,l <- Rdh,l-K
2
Rdl - парный
AND Rd,Rr
Логическое И
Rd < Rd AND Rr
1
ANDI Rd,K
Логическое И
с константой
Rd < Rd AND K
1
OR Rd,Rr
Логическое ИЛИ
Rd < Rd OR Rr
1
ORI Rd,K
Логическое ИЛИ
с константой
Rd < Rd OR K
1
EOR Rd,Rr
Исключающее ИЛИ
Rd < Rd XOR Rr
1
COM Rd
Дополнение до 1
Rd < $FF-Rd
1
NEG Rd
Дополнение до 2
Rd < $00-Rd
1
SBR Rd,K
Установить биты
Rd < Rd OR K
1
CBR Rd,K
Сбросить биты
Rd < Rd AND K
1
INC Rd
Увеличить на 1
Rd < Rd+1
1
DEC Rd
Уменьшить на 1
Rd < Rd-1
1
TST Rd
Проверить на 0
или 1
Rd < Rd AND Rd
1
CLR Rd
Очистить
Rd < Rd XOR Rd
1
Все 0
ER Rd
Установить
Rd < $FF
1
Все 1
Команды ветвления
Мнемоника
Описание
Действие
Флаги
Циклы
RJMP k
Относительный переход
PC < PC+k+1
Нет
2
LJMP k
Переход по адресу (Z)
PC < Z
Нет
2
RCALL k
Относительный вызов подпрограммы
PC < PC+k+1
Нет
3
ICALL
Вызов подпрограммы по адресу (Z)
PC < Z
Нет
3
RET
Выход
из подпрограммы
PC < STACK
Нет
4
RETI
Выход из прерывания
PC < STACK
I
4
CPSE Rd,Rr
Сравнить, пропуск
при равно
If(Rd=Rr) PC<PC+2 или 3
Z,N,V,C,H
1/2
CP Rd,Rr
Сравнить
Rd-Rr
Z,N,V,C,H
1
CPC Rd,Rr
Сравнить
с прерыванием
Rd-Rr-C
Z,N,V,C,H
1
CPI Rd,K
Сравнить с константой
Rd-C
Z,N,V,C,H
1
SBRC Rr,b
Пропуск, если в Rr
бит b сброшен
If(Rr(b)=0) PC<PC+2 или 3
Нет
1/2
SBRS Rr,b
Пропуск, если в Rr
бит b установлен
If(Rr(b)=1) PC<PC+2 или 3
Нет
1/2
SBIC P,b
Пропуск, если в регистре ввода/вывода P бит b сброшен
If(P(b)=0) PC<PC+2 или 3
Нет
1/2
SBIS P,b
Пропуск, если в регистре ввода/вывода P бит b установлен
If(P(b)=1) PC<PC+2 или 3
Нет
1/2
BRBS s,k
Переход, если в SREG установлен флаг s
If(SREG(s)=1) PC<PC+1+k
Нет
1/2
BRBS s,k
Переход, если в SREG сброшен флаг s
If(SREG(s)=0) PC<PC+1+k
Нет
1/2
BREQ k
Переход, если равно
If(Z=1) PC<PC+1+k
Нет
1/2
BRNE k
Переход, если не равно
If(Z=0) PC<PC+1+k
Нет
1/2
BRCS k
Переход, если перенос установлен
If(C=1) PC<PC+1+k
Нет
1/2
BRCC k
Переход, если перенос сброшен
If(C=0) PC<PC+1+k
Нет
1/2
BRSH k
Переход, если равно или больше
If(C=0) PC<PC+1+k
Нет
1/2
BRLO k
Переход, если меньше
If(C=1) PC<PC+1+k
Нет
1/2
BRMI k
Переход, если минус
If(N=1) PC<PC+1+k
Нет
1/2
BRPL k
Переход, если плюс
If(N=0) PC<PC+1+k
Нет
1/2
BRGE k
Переход, если больше или равно
If(N XOR V=0) PC<PC+1+k
Нет
1/2
BRLT k
Переход,
если меньше 0
If(N XOR V=1) PC<PC+1+k
Нет
1/2
BRHS k
Переход, если флаг H установлен
If(H=1) PC<PC+1+k
Нет
1/2
BRHC k
Переход, если флаг H сброшен
If(H=0) PC<PC+1+k
Нет
1/2
BRTS k
Переход, если флаг T установлен
If(H=1) PC<PC+1+k
Нет
1/2
BRTC k
Переход, если флаг T сброшен
If(H=0) PC<PC+1+k
Нет
1/2
BRVS k
Переход, если флаг V установлен
If(H=1) PC<PC+1+k
Нет
1/2
BRVC k
Переход, если флаг V сброшен
If(H=0) PC<PC+1+k
Нет
1/2
BRIE k
Переход, если
прерывания азрешены
If(I=1) PC<PC+1+k
Нет
1/2
BRID k
Переход, если
прерывания запрещены
If(I=0) PC<PC+1+k
Нет
1/2
Команды пересылок
Мнемоника
Описание
Действие
Флаги
Циклы
MOV Rd,Rr
Пересылка между регистрами
Rd < Rr
Нет
1
LDI Rd,K
Загрузить константу
Rd < K
Нет
1
LD Rd,X
Загрузить регистр
непосредственно
Rd < (X)
Нет
2
LD Rd,X+
Загрузить регистр непосредственно с постинкрементом
Rd < (X)
X < X+1
Нет
2
LD Rd,-X
Загрузить регистр непосредственно с предварительным декрементом
X < X-1
Rd < (X)
Нет
2
LD Rd,Y
Загрузить регистр
непосредственно
Rd < (Y)
Нет
2
LD Rd,Y+
Загрузить регистр непосредственно с постинкрементом
Rd < (Y)
Y < Y+1
Нет
2
LD Rd,-Y
Загрузить регистр непосредственно с предварительным декрементом
Y < Y-1
Rd < (Y)
Нет
2
LDD Rd,Y+q
Загрузить регистр непосредственно по адресу в Y со смещением q
Rd < (Y+k)
Нет
2
LD Rd,Z
Загрузить регистр
непосредственно
Rd < (Z)
Нет
2
LD Rd,Z+
Загрузить регистр непосредственно с постинкрементом
Rd < (Z)
Z < Z+1
Нет
2
LD Rd,-Z
Загрузить регистр непосредственно с предварительным декрементом
Z < Z-1
Rd < (Z)
Нет
2
LDD Rd,Z+q
Загрузить регистр непосредственно со смещением
Rd < (Z+k)
Нет
2
LDS Rd,k
Загрузить регистр из ОЗУ по адресу (k)
Rd < (k)
Нет
3
ST X,Rr
Сохранить регистр непосредственно по адресу в X
(X) < Rr
Нет
2
ST X+,Rr
Сохранить регистр непосредственно по адресу в X с постинкрементом
(X) < Rr
X < X+1
Нет
2
ST -X,Rr
Сохранить регистр непосредственно по адресу в X с предварительным декрементом
X < X-1
(X) < Rr
Нет
2
STD X+q,Rr
Сохранить регистр непосредственно по адресу в X со смещением q
(X+q) < Rr
Нет
2
ST Y,Rr
Сохранить регистр непосредственно по адресу в Y
(Y) < Rr
Нет
2
ST Y+,Rr
Сохранить регистр непосредственно по адресу в Y с постинкрементом
(Y) < Rr
Y < Y+1
Нет
2
ST -Y,Rr
Сохранить регистр непосредственно по адресу в Y с предварительным декрементом
Y < Y-1
(Y) < Rr
Нет
2
STD Y+q,Rr
Сохранить регистр непосредственно по адресу в Y со смещением q
(Y+q) < Rr
Нет
2
ST Z,Rr
Сохранить регистр непосредственно по адресу в Z
(Z) < Rr
Нет
2
ST Z+,Rr
Сохранить регистр непосредственно по адресу в Z с постинкрементом
(Z) < Rr
Z < Z+1
Нет
2
ST -Z,Rr
Сохранить регистр непосредственно по адресу в Z с предварительным декрементом
Z < Z-1
(Y) < Rr
Нет
2
STS k,Rr
Сохранить регистр в ОЗУ по адресу (k)
(k) < Rr
Нет
3
LPM
Загрузка из памяти программ по адресу в Z
R0 < (Z)
Нет
3
IN Rd,P
Ввод в регистр из порта P
Rd < P
Нет
1
OUT P,Rr
Вывод из регистра в порт P
P < Rr
Нет
1
PUSH Rr
Сохранить регистр в стеке
STACK < Rr
Нет
2
POP Rd
Загрузить регистр из стека
Rd < STACK
Нет
2
Команды работы с битами
Мнемоника |
Описание |
Действие |
Флаги |
Циклы |
SBI P,b |
Установить бит b в регистре ввода/вывода P |
I/O (P,b) < 1 |
Нет |
2 |
CBI P,b |
Сбросить бит b в регистре ввода/вывода P |
I/O (P,b) < 0 |
Нет |
2 |
LSL Rd |
Логический сдвиг влево на 1 бит в регистре |
Rd(n+1) < Rd(n) Rd(0) < 0 |
Z,C,N,V |
1 |
LSR Rd |
Логический сдвиг вправо на 1 бит в регистре |
Rd(n) < Rd(n+1) Rd(7) < 0 |
Z,C,N,V |
1 |
ROL Rd |
Сдвиг влево через С на 1 бит в регистре |
Rd(0) < C Rd(n+1) < Rd(n) C < Rd(7) |
Z,C,N,V |
1 |
ROR Rd |
Сдвиг вправо через С на 1 бит в регистре |
Rd(7) < C Rd(n) < Rd(n+1) C < Rd(0) |
Z,C,N,V |
1 |
LSR Rd |
Логический сдвиг вправо на 1 бит в регистре |
Rd(n) < Rd(n+1) Rd(7) < 0 |
Z,C,N,V |
1 |
SWAP Rd |
Обмен ниблов (полубайт) в регистре |
Rd(3…0) < Rd(7…4) Rd(7…4) < Rd(3…0) |
Нет |
1 |
BSET s |
Установить флаг s |
SREG(s) < 1 |
SREG(s) |
1 |
BCLEAR s |
Сбросить флаг s |
SREG(s) < 0 |
SREG(s) |
1 |
BST Rr,b |
Запомнить бит b регистра в флаге T |
T < Rr(b) |
T |
1 |
BLD Rd,b |
Прочитать бит из T в бит b регистра |
Rd(b)< T |
Нет |
1 |
SEC |
Установить перенос |
C < 1 |
C |
1 |
CLC |
Сбросить перенос |
C < 0 |
C |
1 |
SEN |
Установить флаг N |
N < 1 |
N |
1 |
CLN |
Сбросить флаг N |
N < 0 |
N |
1 |
SEZ |
Установить флаг Z |
Z < 1 |
Z |
1 |
CLZ |
Сбросить флаг Z |
Z < 0 |
Z |
1 |
SES |
Установить флаг S |
S < 1 |
S |
1 |
CLS |
Сбросить флаг S |
S < 0 |
S |
1 |
SEV |
Установить флаг V |
V < 1 |
V |
1 |
CLV |
Сбросить флаг V |
V < 0 |
V |
1 |
SET |
Установить флаг T |
T < 1 |
T |
1 |
CLT |
Сбросить флаг T |
T < 0 |
T |
1 |
SEH |
Установить флаг H |
H < 1 |
H |
1 |
CLH |
Сбросить флаг H |
H < 0 |
H |
1 |
NOP |
Нет операции |
|
Нет |
1 |
SLEEP |
Останов |
|
Нет |
1 |
WDR |
Сброс сторожевого таймера |
|
Нет |
1 |