![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
STD – Установить флаг направления.Содержание книги
Поиск на нашем сайте
STD – Установить флаг прерывания.
STOS, STOSB, STOSW, STOSD – Сохранить строковые данные из аккумулятора. Сохраняет содержимое аккумулятора в памяти, адресуемой через регистры ES:EDI. При использовании команды STOS надо явно указать операнд в памяти. Команда STOSB сохраняет байт из регистра AL в памяти, STOSW – слово из регистра AX, STOSD – двойное слово из регистра EAX. Содержимое регистра EDI изменяется автоматически, в соответствии с флагом направления и размером операнда.
STOS ES:dest STOS dest STOSB STOSW STOSD
SUB – Вычитание. Вычитает операнд-источник из операнда-приёмника. Размеры операндов должны быть одинаковы. Результат сохраняется в операнде приёмнике.
SUB reg, reg SUB mem, reg SUB reg, mem SUB reg, imm SUB mem, imm
TEST – Тестировать операнды. Выполняет поразрядное логическое И операндов и в зависимости от полученного результата устанавливает флаги. Результат не сохраняется.
TEST reg, reg TEST mem, reg TEST reg, mem TEST reg, imm TEST mem, imm
WAIT – Ожидание сопроцессора. Приостанавливает работу центрального процессора до момента завершения выполнения команды сопроцессором.
XADD – Сложение с обменом. Прибавляет операнд-источник к операнду-приёмнику. Одновременно с этим исходное значение операнда-приёмника меняется местами с операндом-источником. Вследствие этого сумма размещается в операнде-источнике.
XADD reg, reg XADD mem, reg
XCHG – Обмен. Меняет местами значения двух операндов.
XCHG reg, reg XCHG mem, reg XCHG reg, mem
XLAT, XLATB – Перекодировка байта. Индекс, содержащийся в регистре AL, заменяется байтом из таблицы перекодировки. Заменяющий байт в таблице расположен по указанному индексу. Адрес начала таблицы берётся из DS:EBX. Вместо команды XLAT можно использовать команду XLATB. Для замены сегмента можно явно указать операнд.
XLAT XLATB XLAT segreg:mem XLAT mem
XOR – Исключающее ИЛИ. Меняет местами значения двух операндов.
XOR reg, reg XOR mem, reg XOR reg, mem XOR reg, imm XOR mem, imm
Приложение В. Краткий перечень команд обработки чисел с плавающей точкой процессоров Intel семейства IA-32 Все команды начинаются с буквы F, что является отличительным признаком команд FPU. Если команда заканчивается на букву P, то при выполнении команды из стека выталкивается вершина, после чего результат помещается в новую вершину стека. Если команда заканчивается на букву R, то операнды меняются местами при выполнении команды. Комбинация букв PR означает комбинацию описанных действий.
Используемые обозначения: memreal – память вещественного типа. memint – память целочисленного типа. reg – регистр стека FPU. Обмен данных Загрузка. Все операнды автоматически конвертируются в вещественный тип. FLD reg/memreal – загрузить в вершину стека указанный вещественный операнд из регистра стека или памяти. Если регистр-источник пуст, то на вершине стека окажется тихое NaN, что может вызвать исключительную ситуацию. Регистр-источник должен содержать число или ноль: fld st(3) – загрузить содержимое указанного регистра st(3). fld X – загрузить число X из памяти fld X[esi] – загрузить элемент массива X из памяти. fld [X+esi] – загрузить элемент массива X из памяти. fld X[ebx+edi] – загрузить элемент массива X из памяти. FILD reg/memint; загрузить в вершину стека указанный целочисленный операнд. Примеры аналогичны примерам для команды fld. Сохранение. Все операнды автоматически конвертируются в тип приёмника. FST reg/memreal – сохранить/вытолкнуть вершину стека: fst st(6) – сохранить вершину стека в регистре st(6). fst X[esi] – сохранить вершину стека в памяти. fstp st(3) – вытолкнуть вершину стека в регистр st(3). fstp X[esi] – вытолкнуть вершину стека в память. FIST memint – сохранить/вытолкнуть вершину стека: fist X – сохранить вершину стека в память. fistp X – вытолкнуть вершину стека в память. Обмен. FXCH reg – обмен значениями регистра st и указанного регистра. Если регистр не указан, то обмен st и st(1). Константы. FLD1 – загрузить в вершину стека вещественное число 1.0. FLDZ – загрузить в вершину стека вещественное число 0.0. FLDPI – загрузить в вершину стека число p. FLDL2E – загрузить в вершину стека log2(e). FLDL2T – загрузить в вершину стека log2(10). FLDLG2 – загрузить в вершину стека log10(2). FLDLN2 – загрузить в вершину стека loge(2). Арифметика Сложение. FADD [dest,src] – сложить источник и получатель. Сумма записывается в получатель. Если указаны два регистра, то один из них должен быть st. Если один из операндов расположен в памяти, то сумма размешается в st. Операнды в памяти могут быть real4, real8 или 16-, 32-битные целые числа. Если операнды не указаны, то складываются st и st(1), после происходит выталкивание из стека, сумма размещается в новой вершине стека. Для FADDP источник должен быть в st.
fadd st,st(2) – st = st + st(2). fadd st(2),st – st(2) = st(2) + st. fadd – st=st(1)+st. fadd memreal – st = st + memreal. fiadd memint – st = st + memint. FADDP [dest,src] – сложить и вытолкнуть. Сумма в st. faddp – st=st+st(1). faddp st(6),st – st = st(6) + st. Вычитание. FSUB [dest,src] – вычесть источник из приёмника и разность записать в приёмник. Если указаны два регистра, то один из них должен быть st. Если один из операндов расположен в памяти, то разность размешается в st. Операнды в памяти могут быть real4, real8 или 16-, 32-битные целые числа. Если операнды не указаны, то st вычитается из st(1), после происходит выталкивание из стека, разность размещается в новой вершине стека. Для FSUBP источник должен быть в st. fsub st,st(2) – st = st – st(2). fsub st(2),st – st(2) = st(2) – st. fsub – st = st(1) – st. fsubp st(6),st – st(6) = st(6) – st. fsub memreal – st = st – memreal. fisub memint – st = st – memint FSUBR [dest,src] – реверсное вычитание: приёмник вычитается из источника и разность располагается в приёмнике. fsubr st,st(2) – st = st(2) – st. fsubr st(2),st – st(2) = st – st(2). fsubr – st = st – st(1). fsubrp st(6),st – st(6) = st – st(6). fsubr memreal – st = memreal – st. fisubr memint – st = memint – st. Умножение. FMUL [dest,src] – умножение источника и приёмника. Произведение записать в приёмник. Остальные спецификации аналогичны сложению. fmul st,st(2) – st = st × st(2). fmul st(2),st – st(2) = st(2) × st. fmul – st = st(1) × st. fmulp st(6),st – st(6) = st(6) × st. fmul memreal – st = st × memreal. fimul memint – st = st × memint. Деление. FDIV [dest,src] – деление приёмника на источник. Частное располагается в приёмнике. Остальные спецификации аналогичны вычитанию. fdiv st,st(2) – st = st / st(2). fdiv st(5),st – st(2) = st(2) / st. fdiv – st=st(1)/st. fdivp st(6),st – st(6) = st(6) / st. fdiv memreal – st = st / memreal. fidiv memint – st = st / memint. FDIVR [dest,src] – реверсное деление: источника делится на приёмник и частное располагается в приёмнике. fdivr st,st(2) – st = st(2) / st. fdivr st(5),st – st(2) = st / st(2). fdivr – st = st / st(1). fdivrp st(6),st – st(6) = st / st(6). fdivr memreal – st = memreal / st. fidivr memint – st = memint / st. Другие арифметические функции. FABS – st = |st| (абсолютное значение). FCHS – st = -st (реверс знака). FRNDINT – округление st до целого. FSQRT – квадратный корень st. FSCALE – st=st×2^st(1). FPREM – вычисляет остаток от деления st на st(1) и помещает его в st. Трансцендентные функции FSIN – st = sin(st), угол в радианах. FCOS – st = cos(st), угол в радианах. FSINCOS – st(1) = sin(st), st = cos(st), угол в радианах. FPATAN – st = arctan(st(1) / st). FPTAN – Y / X = tan(st), |st| < 263. Результаты: st = X, st(1)=Y. FYL2X – st = st(1) × log2(st). FYL2XP1 – st = st(1) × log2(st + 1). F2XM1 – st = (2^st) – 1. Ограничение -1.0 £ st £ +1.0. Сравнение FCOM [reg/memreal] – сравнение содержимого st с операндом-источником, находящимся в указанном регистре или в памяти и модификация флагов C3, C2 и C0 регистра состояния FPU. Операция сравнения осуществляется путём вычитания операнда-источника из регистра st без изменения операндов. Операнды в памяти могут быть real4, real8 или 16-, 32-битные целые числа. Если операнды явно не указаны, то сравнивается st с st(1). Если один из операндов NAN, то вызывается исключение. fcom st(2) – st – st(2). fcom – st – st(1). fcomp – st – st(1). fcompp – st – st(1), выталкиваются оба операнда. fcom memreal – st – memreal. ficom memint – st – memint. Расположение флагов в регистре SW рассмотрено в главе 2 учебного пособия. Значения флагов указаны в таблице:
FTST – сравнение содержимого st с константой +0.0.
FXAM – загрузка состояния st во флаги C3, C2, C1 и C0 регистра SW. Значения флагов указаны в справке masm32 в разделе описания команд FPU. FSTSW AX/mem16 – сохранение содержимого регистра состояния SW в память или регистр AX. Общие FINIT – инициализация FPU. FCLEX – очистка флагов исключительных ситуаций. Приложение Г. Справка по Ассемблеру для Atmel AVR Исходные коды Компилятор работает с исходными файлами, содержащими инструкции, метки и директивы. Инструкции и директивы, как правило, имеют один или несколько операндов. Строка кода не должна быть длиннее 120 символов. Любая строка может начинаться с метки, которая является набором символов, заканчивающимся двоеточием. Метки используются для указания места, в которое передаётся управление при переходах, а также для задания имён переменных. Входная строка может иметь одну из четырёх форм: [метка:] директива [операнды] [Комментарий] [метка:] инструкция [операнды] [Комментарий] Комментарий Пустая строка Комментарий имеет следующую форму: ; [Текст] Позиции в квадратных скобках необязательны. Текст после точки с запятой (;) и до конца строки игнорируется компилятором. Метки, инструкции и директивы более детально описываются ниже. Примеры: label: .EQU var1=100; Устанавливает var1 равным 100 (это директива) .EQU var2=200; Устанавливает var2 равным 200 test: rjmp test; Бесконечный цикл (это инструкция) ; Строка с одним комментарием ; Ещё одна строка с комментарием Компилятор не требует, чтобы метки, директивы, комментарии или инструкции находились в определённой колонке строки. Ассемблер не различает регистр символов. Операнды могут быть таких видов: 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) Инструкции процессоров AVR
Арифметические и логические инструкции
Инструкции ветвления
* Для операций доступа к данным количество циклов указано при условии доступа к внутренней памяти данных, и не корректно при работе с внешним ОЗУ. Для инструкций CALL, ICALL, EICALL, RCALL, RET и RETI, необходимо добавить три цикла плюс по два цикла для каждого ожидания в контроллерах с PC меньшим 16 бит (128KB памяти программ). Для устройств с памятью программ свыше 128KB, добавьте пять циклов плюс по три цикла на каждое ожидание.
Инструкции передачи данных
* Для операций доступа к данным количество циклов указано при условии доступа к внутренней памяти данных, и не корректно при работе с внешним ОЗУ. Для инструкций LD, ST, LDD, STD, LDS, STS, PUSH и POP, необходимо добавить один цикл плюс по одному циклу для каждого ожидания. Инструкции работы с битами
Директивы ассемблера Компилятор поддерживает ряд директив. Директивы не транслируются непосредственно в код. Вместо этого они используются для указания положения в программной памяти, определения макросов, инициализации памяти и т.д. Список директив приведён в следующей таблице.
Выражения Компилятор позволяет использовать в программе выражения, которые могут состоять из операндов, знаков операций и функций. Все выражения являются 32-битными. Операнды Могут быть использованы следующие операнды: · Метки, определённые пользователем (дают значение своего положения). · Переменные, определённые директивой SET · Константы, определённые директивой EQU · Числа, заданные в формате: o Десятичном (принят по умолчанию): 10, 255 o Шестнадцатеричном (два варианта записи): 0x0a, $0a, 0xff, $ff o Двоичном: 0b00001010, 0b11111111 o Восьмеричном (начинаются с нуля): 010, 077 · PC - текущее значение программного счётчика (Programm Counter) Операции Компилятор поддерживает ряд операций, которые перечислены в таблице (чем выше положение в таблице, тем выше приоритет операции). Выражения могут заключаться в круглые скобки, такие выражения вычисляются перед выражениями за скобками.
Библиографический список 1. Голубцов М.С., Кириченкова А.В. Микроконтроллеры AVR: от простого к сложному. Изд. 2-е, испр. и доп. – М.:СОЛОН-Пресс, 2005. 304 с. 2. Ирвин Кип. Язык ассемблера для процессоров Intel, 4-е издание.: Пер с англ. – М.: Издательский дом “Вильямс”, 2005. – 912 с.: ил. – Парал. тит. англ. Интернет-ссылки http://www.intel.com http://www.atmel.com http://easyelectronics.ru/ http://we.easyelectronics.ru/ http://embedders.org/ http://electronix.ru/ http://controllersystems.com/ http://www.eevblog.com/ http://chipenable.ru/ http://eugenemcu.ru/ http://embedded.su/ http://ziblog.ru/ http://bsvi.ru/
Микропроцессоры Практикум
Составители: проф. кафедры ВТ и АСУ В.Н. Марков, М.В. Шатохин
Кубанский государственный технологический университет 350072. Краснодар, ул. Московская, 2, кор. А. Кафедра вычислительной техники и АСУ
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-06-29; просмотров: 406; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.94.199 (0.011 с.) |