- •Архитектура эвм
- •Введение
- •Структура мпс
- •Основные понятия в архитектуре мпс
- •Архитектура фон Неймана
- •Гарвардская архитектура
- •Параллельная архитектура
- •Конвейерная архитектура
- •Суперскалярная архитектура
- •Архитектуры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
Команды ассемблера
Основные команды для работы с целыми числами
Инстр.
Мнемоника
Действие
ZERO
zero (.unit) dst
.unit = .L1, .L2, S1, .S2, .D1, .D2
0 => dst
ADD
ADDU
add (.unit) src1, src2,dst
.unit = .L1, .L2, S1, S2
src1+src2 => dst
ADDK
addk (.unit) cst, dst
.unit = .S1, .S2
cst+dst => dst
SUB
SUBU
sub (.unit) src1, src2, dst
.unit = .L1, .L2, S1, S2
src1=src2 => dst
ABS
abs (.unit) src, dst
.unit = .L1, .L2
abs(src) => dst
B
b (.unit) label
.unit = S1, S2
CMPEQ
cmpeq (.unit) src1, src2, dst
.unit = .L1, .L2
1 => dst
при src1=src2
CMPGT
CMPGTU
cmpgt (.unit) src1, src2, dst
.unit = .L1, .L2
1 => dst
при src1>src2
CMPLT
CMPLTU
cmplt (.unit) src1, src2, dst
.unit = .L1, .L2
1 => dst
при src1<src2
MPY
MPYU
mpy (.unit) src1, src2, dst
.unit = .M1, .M2
src1*src2 => dst
MV
mv (.unit) src, dst
.unit = .L1, .L2, S1, .S2, .D1, .D2
src => dst
MVK
mvk (.unit) cst, dst
.unit = .S1, .S2
cst => dst
NEG
neg (.unit) src, dst
.unit = .L1, .L2, .S1, .S2
=src => dst
NOP
nop
STB
STH
STW
stb (.unit) src, *+baseR[offserR]
.unit = .D1, .D2
src => baseR[offsetR]
LDB
LDH
LDW
ldb (.unit) *+baseR[offserR], dst
.unit = .D1, .D2
baseR[offsetR] => dst
AND
and (.unit) src1, src2, dst
.unit = .L1, .L2, S1, S2
src1 AND src2 => dst
OR
or (.unit) src1, src2, dst
.unit = .L1, .L2, .S1, .S2
src1 OR src2 => dst
XOR
xor (.unit) src1, src2, dst
.unit = .L1, .L2, S1, S2
src1 XOR src2 => dst
NOT
not (.unit) srt, dst
.unit = .L1, .L2, .S1, .S2
SHL
shl (.unit) src2, src1, dst
.unit = .S1, .S2
(src2 на src1 ) => dst
SHR
shr (.unit) src2, src1, dst
.unit = .S1, .S2
(src2 на src1 ) => dst
Основные команды для работы с вещественными числами
Инструкция
Мнемоника
Действие
ABSSP
ABSDP
abssp (.unit) src, dst
.unit = .S1, .S2
absdp(src) => dst
ADDSP
ADDDP
addsp (.unit) src1, src2, dst
.unit = .L1, .L2
src1+src2 => dst
SUBSP
SUBDP
subsp (.unit) src1, src2, dst
.unit = .L1, .L2
src1+src2 => dst
CMPEQSP
CMPEQDP
cmpeqsp (.unit) src1, src2, dst
.unit = .S1, .S2
1 => dst
при src1=src2
CMPGTSP
CMPGTDP
cmpgtsp(.unit) src1, src2, dst
.unit = .S1, .S2
1 => dst
при src1>src2
CMPLTSP
CMPLTDP
cmpltsp (.unit) src1, src2, dst
.unit = .S1, .S2
1 => dst
при src1<src2
MPYSP
MPYDP
mpysp (.unit) src1, src2, dst
.unit = .M1, .M2
src1*src2 => dst
SPINT
spint (.unit) src, dst
.unit = .L1, .L2
src1 => dst
INTSP
intsp (.unit) src, dst
.unit = .L1, .L2
src1 => dst
DPINT
dpint (.unit) src, dst
.unit = .L1, .L2
src1 => dst
INTDP
intdp (.unit) src, dst
.unit = .L1, .L2
src1 => dst
DPSP
dpsp (.unit) src, dst
.unit = .L1, .L2
src1 => dst
SPDP
spdp (.unit) src, dst
.unit = .L1, .L2
src1 => dst
Константы
Ассемблер поддерживает каждую константу внутренне, как 32-разрядное число. Константы – не расширяются по знаку. Например, константа 00FFh равна 00FF (в 16-ричной системе) или 255 (в десятичной)..
Ассемблер поддерживает шесть типов констант:
Двоичное целое число.
Восьмеричное целое число.
Десятичное целое число.
Шестнадцатеричное целое число.
Знак.
Разовая ассемблерная константа.
Двоичная целочисленная константа. Это строка до 32 двоичных символов (0 и 1) с суффиксом B (или b). Если определено меньше 32 цифр, ассемблер выравнивает значение вправо и заполняет неопределенные левые биты нулями. Примеры допустимых двоичных констант:
0100000b Константа, равная 32 (10) или 20 (16)
01b Константа, равная 1 (10) или 1 (16)
Восьмеричная целочисленная константа. Это строка до 11 восьмеричных цифр (0 до 7) с суффиксом Q (или q). Примеры допустимых восьмеричных констант:
10Q Константа, равная 8 (10) или 8 (16).
226q Константа, равная 150 (10) или 96 (16).
Десятичная целочисленная константа. Это строка десятичных цифр (от 0 до 9). Им соответствуют десятичные числа в пределах от -2 147 483 648 до 4 294 967 295. Примеры допустимых десятичных констант:
1000 Константа, равная 1000 (10) или 3E8 (16).
-32768 Константа, равная -32 768 (10) или 8000 (16).
25 Константа, равная 25 (10) или 19 (16).
Шестнадцатеричная целочисленная константа. Это строка до восьми шестнадцатеричных цифр с суффиксом H (или h). Шестнадцатеричные цифры включают десятичные числа, 0-9, и символы A-F или a-f. Шестнадцатеричная константа должна начаться с десятичного числа (0-9). Если определено меньше, чем восемь шестнадцатеричных цифр, ассемблер выравнивает биты вправо. Примеры допустимых шестнадцатеричных констант:
78h Константа, равная 120 (10) или 0078 (16).
0Fh Константа, равная 15 (10) или 000F (16).
Символьная константа. Это – одиночный знак, заключенный в апострофы (одиночные кавычки). Знаки представлены внутренне, как знаки ASCII с 8 битами. Запоминается номер символа по таблице кодировки в двоичной форме. Примеры допустимых символьных констант:
’@‘ Определяет символьную константу, представлен внутренне как 61 (16-ричное 3d).
’C‘ Определяет символьную константу C и представлен внутренне как 43 (16-ричное 2b).
’’ Определяет нулевой символ и представлен внутренне как 00 (16-ричное 00).
Обратите внимание на различие между символьными константами и символьными строками. Символьная константа представляет одиночное значение; строка - последовательность знаков.
Разовые константы ассемблера. Если Вы используете .set директиву, чтобы назначить значение символу, то символ становится константой. Чтобы использовать эту константу в выражениях, значение ее должно быть абсолютным (без знака). Например:
sym .set 3
MVK sym, B1
Вы можете также использовать .set директиву, чтобы назначить символическую константу имени регистра. В этом случае, символ становится синонимом регистра:
sym .set B1
MVK 10, sym
Символьная строка. Это строка кодовых знаков, заключенная в двойные кавычки. Двойные кавычки, которые являются частью символьной строки, представляются двумя последовательными двойными кавычками. Максимальная длина строки изменяется и определена для каждой директивы, которая требует символьную строку. Знаки представляются внутренне, как кодовые знаки ASCII с 8 битами. Примеры допустимых символьных строк:
“sample program” определяет строку sample program с 14 знаками.
“PLAN “”C””” определяет строку PLAN “C” с 8 знаками.
Символьные строки используются для следующих целей:
Имена файлов, как в директиве .copy “имя файла”.
Имена разделов, как в директиве .sect “имя раздела”.
Директивы инициализации данных, как в .byte “символьная строка”.
Операнды директив .string.
Символы. Используются как метки, константы и символы замены. Имя символа - строка до 200 алфавитно-цифровых знаков (A-Z, a-z, 0-9, $, и _). Первый знак в символе не может быть числом, и символы не могут содержать внутренние пробелы. Символы, которые Вы определяете,чувствительны к регистру. Например, ассемблер различает ABC, Abc и abc, как три уникальных символа. Символ допустим только внутри ассемблерной программы.
Метки. Символы, используемые как метки, станут символическими адресами, которые связаны с ячейками памяти в программе. Метки, используемые локально, в пределах файла должны быть уникальны. Мнемонические коды операции и имена директив ассемблера без префикса (.) - допустимые имена меток.
Метки могут также использоваться, как операнды .global, .ref, .def, или .bss директив. Например:
.global label1
label2: MVK label2, B3
MVKH label2, B3
B label1
NOP 5
Локальные метки. Это специальные метки, чьи возможности и сила - временные. Локальная метка может быть определена двумя способами:
$n, где n - десятичная цифра в диапазоне 0-9. Например, $ 4 и $ 1 являются допустимыми локальными метками..
имя?, где имя - любое законное имя символа, как описано выше. Ассемблер заменяет вопросительный знак точкой, сопровождаемой уникальным числом. Когда исходный текст расширен, Вы не будете видеть уникальное число в файле листинга. Ваша метка появляется с вопросительным знаком, как это сделано в исходном определении. Вы не можете объявлять эту метку как глобальную.
Нормальные метки должны быть уникальны (они могут быть объявлены только однажды), и они могут использоваться как константы в поле операнда. Локальные метки, однако, могут быть отменены и определены снова. Локальные метки не могут быть определены директивами.
Символические константы. Символам могут быть присвоены постоянные значения. Используя константы, Вы можете сопоставлять имена с постоянными значениями. Директивы .set и .struct/.tag/.endstruct дают Вам возможность присвоить константам символические имена. Символические константы не могут быть переопределены.
Предопределенные символические константы. Ассемблер имеет несколько предопределенных символов, включая следующие типы:
$, знак доллара, представляет текущее значение счетчик команд раздела (SPC). $ - перемещаемый символ.
Символы регистров, включая A0-A15 и B0-B15.
Регистры управления ЦП, включая следующее:
ACR |
Регистр управления анализа |
ADR |
Регистр данных анализа |
AMR |
Регистр способа адресации |
ARP |
Регистр возврата анализа |
CSR |
Регистр управления состояния |
ICR |
Регистр очистки прерываний |
IER |
Регистр разрешения прерываний |
IFR |
Регистр флагов прерываний |
NRP |
Указатель возврата из немаскируемого прерывания |
IRP |
Указатель возврата из маскируемого прерывания |
ISR |
Указатель таблицы обслуживания прерываний |
ISTP |
Регистр установки прерываний |
PCE1 |
Счетчик команд |
PDATA_O |
Выход программных данных |
STRM_HOLD |
Регистр удержания потока |
TCR |
Регистр управления тестом |
IN (’C67x только) ввода. |
Универсальный регистр |
OUT (’C67x только) |
Универсальный регистр вывода |
Регистры управления в тексте можно вводить либо всеми знаками верхнего регистра, либо всеми – нижнего; например, CSR можно ввести как csr.
Символы замены. Символы могут быть назначены строковым значениям (переменным). Это позволяет Вам заменять символьные строки, приравнивая их символическим именам. Символы, которые представляют строки знаков, называются символами замены. Когда ассемблер сталкивается с символом замены, его строковое значение заменяется именем символа. В отличие от символических констант, символы замены могут быть переопределены. Строка может быть назначена символу замены где-нибудь в пределах программы. Например:
.global _table
.asg ”B14”, PAGEPTR
.asg ”*+B15(4)”, LOCAL1
.asg ”*+B15(8)”, LOCAL2
LDW *+PAGEPTR(_table),A0
NOP 4
STW A0,LOCAL1
Когда Вы используете макрокоманды, символы замены важны, потому что макропараметры - фактически символы замены, которые назначены аргументу макрокоманды. Следующий код показывает, как символы замены используются в макрокоманде:
MAC .macro src1, src2, dst ; макрокоманда умножения/сложения
MPY src1, src2, src2
NOP
ADD src2, dst, dst
. endm
* Вызов макрокоманды MAC
MAC A0,A1,A2