рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Команды двойного сдвига

Команды двойного сдвига - Лекция, раздел Программирование, СИСТЕМНОЕ ПРОГРАММИРОВАНИЕ Команды Shld, Shrd Введены В Систему Команд Микропроцессора 80386. Предназнач...

Команды SHLD, SHRD введены в систему команд микропроцессора 80386. Предназначены для сдвигов двух 16-битных или двух 32-битных операндов. Форматы команд:

SHLD, SHRD reg/ mem 16, reg, imn

SHLD, SHRD reg/ mem 32, reg, imn, где

imn - непосредственное значение, которое определяет число сдвигов.

Внутри процессора два первых операнда объединяются в промежуточном регистре двойной длины, код которого сдвигается. После сдвига результат в приемнике, а источник не изменяется.

2.5.3.5.Команды работы с двоичными цепочками

Команды работы с двоичными цепочками введены в систему команд микропроцессора 80386 включают две группы :

1) Команда поиска бита ВТ выбирает бит в двоичной цепочке и передает его значение в CF. BTC- поиск и инвертирование бита в цепочке, BTS- поиск и установка бита, BTR- поиск и сброс бита. Форматы команд этой группы одинаковые, поэтому приведены только для команды BT:

BT приемник (двоичная цепочка), источник (номер бита в цепочке)

BT

2) Команды сканирования битов

BSF- вперед BSR- назад } предназначены для поиска в слове или двойном слове позиции первого единичного бита

Формат команд :

BSF,BSR приемник, источник

BSF,BSR

Приемник- номер первого единичного разряда.

Источник- битовая цепочка.

Результат исполнения команды фиксирует флаг ZF: ZF=0, если есть 1, и ZF=1, если источник равен 0 ( в этом случае приемник не определен).

2.5.4.Команды передачи управления.

2.5.4.1.Команды безусловной передачи управления.

К командам настоящей группы относятся команды переходов, вызовов (процедур) и возвратов (из процедур). Переходы загружают значение в указатель команды IP, нарушая тем самым последовательное выполнение команд. Вызовы выполняют то же самое, но в начале они запоминают текущее значение содержимого указателя IP в стеке, так что при возврате можно было возобновить выполнение программы с этой точки.

Переходы, вызовы и возвраты бывают двух видов - внутрисегментные и межсегментные. Первые из них передают управление внутри текущего сегмента кода, вторые - в произвольный сегмент кода (изменяя содержимое регистра CS), который становится текущим сегментом кода. Межсегментный вызов сохраняет в стеке текущее содержимое регистров CS и IP. Межсегментный возврат соответственно восстанавливает из стека содержимое регистров CS и IP. В случае внутрисегментного вызова и возврата в стеке сохраняется и восстанавливается только указатель команды IP. Отметим, что все вызовы одной и той же процедуры должны быть либо внутрисегментными либо межсегментными, так как при возврате из процедуры должно извлекаться из стека столько байт, сколько было включено в стек при вызове.

Команда CALL осуществляет вызов (межсегментный и внутрисегментный) а команда RET соответствующий ей возврат. Для того чтобы сообщить ассемблеру, какие типы вызовов и возвратов генерировать для процедуры, последнюю ограничивают операторами PROC и ENDP.

Например:

UPCOUNT PROC NEAR (FAR)

ADD CX, 1

RET

UPCOUNT ENDP

Так как процедура объявлена как NEAR, то вызов и возврат будут внутрисегментными, если бы мы объявили её как FAR, то вызов и возврат были бы межсегментными, и команда CALL загрузила бы в стек сначала содержимое регистра CS, а затем IP.

Команда JMP осуществляет внутрисегментные и межсегментные переходы. Для того чтобы указать, какой пе­реход осуществить, необходимо указать тип метки перехода (NEAR или FAR). При внутрисегментном переходе команда JMP занимает 3 байта, а при межсегментном - 5 байт. Существует разновидность команды JMP для корот­ких внутрисегментных переходов (-128 +127 байт от адреса команды JMP). Она занимает в памяти 2 байта. Для определения такой команды следует указать, что её операнд имеет тип SHORT. Например, JMP SHORT LABEL1.

До сих пор мы рассматривали только прямые переходы и вызовы. Однако команды JMP и CALL могут осуще­ствлять и косвенный переход или вызов через регистр или ячейку памяти. Если для косвенной передачи управления используется регистр, то в нём должно быть смещение процедуры или метки перехода относительно регистра CS (регистра кодов). Если для косвенной передачи управления используется ячейка памяти, то микропроцессор 8086 (80286) по умолчанию будет считать, что она содержится в сегменте DS (если не указан префикс смены сегмента или не используется регистр BP для адресации ячейки); если используется BP - то микропроцессор будет считать, что ячейка памяти находится в сегменте стека и адресуется регистром SS.

Примеры команд безусловной передачи управления приведены в таблицах 2.12 и 2.13.

Таблица 2.12. Примеры внутрисегментых команд передачи управления.

Внутрисегментные
Прямые Косвенные
JMP LABEL JMP MEMLOC
CALL LABEL JMP BX
RET CALL WORD PTR MEMLOC
RET 6 CALL CX
  CALL WORD PRT ES: MEMLOC
Таблица 2.13. Примеры межсегментных команд передачи управления.
Прямые Косвенные
JMP LABEL JMP DWORD PTR MEMLOC
CALL LABEL JMP DWORD PTR [BP]
RET JMP DWORD PTR CS:[BX]
RET 6 CALL MEMLOC
  CALL DWORD PTR SS: MEMLOC

 

Тип перехода или вызова при косвенных передачах через ячейку памяти определяется по типу объявленной переменной (WORD или DWORD) или явно в команде посредством операции WORD PTR или DWORD PTR. Возврат не может быть косвенным, так как управление всегда возвращается в место вызова, однако существует разновидность возврата, которая после восстановления значений содержимого регистра IP, прибавляет к значению указателя стека константу, содержащуюся в команде как непосредственный операнд. В результате из стека извлекаются и уничтожаются дополнительные элементы (то есть, например, параметры, переданные процедуре). Удобнее, чем чистить стек командой INC SP после возврата из процедуры, так как при многократных вызовах процедуры это надо будет делать каждый раз.

2.5.4.2. Команды условных переходов.

Команды условных переходов вместе с командой CMP реализуют передачу управления в зависимости от отношения между двумя числами. Сначала процессор выполняет команду сравнения и устанавливает по результату флаги, а затем выполняет команду условного перехода, которая проверяет флаги и производит переход, если числа удовлетворяют заданному отношению. Числа могут проверяться на равенство или требуется узнать, какое из них больше или меньше. Какое число больше 11111111 или 00000000? Если число без знака, то первое = 255, а второе = 0 и первое больше второго. Если число со знаком, то первое = (-1) и меньше второго. Следовательно, отношения “меньше” или “больше” зависят от того, знаковые или беззнаковые числа. Поэтому целесообразно ввести новые термины, позволяющие различать эти два случая. При сравнении знаковых чисел пользуемся терминами “больше” и “меньше”, а при сравнении беззнаковых чисел терминами “выше” и “ниже” (так как беззнаковые числа обычно используются для сравнения адресов). Каждое из условий можно определить по состояниям флагов, поэтому в микропроцессоре есть команды, ориентированные на проверку отношений и команды, ориентированные на проверку состояния флагов. Перечень команд условных переходов приведен в таблице 2.14.

Таблица 2.14. Перечень команд условных переходов.

Команда Описание Состояние флагов
JE / JZ Перейти, если равно / если ноль ZF = 1
JNE / JNZ Перейти, если не равно / если не ноль ZF = 0
JL / JNGE Перейти, если меньше / если не больше и не равно SF ¹ OF
JNL / JGE Перейти, если не меньше / если больше или равно SF = OF
JG / JNLE Перейти, если больше / если не меньше и не равно ZF = 0 & SF = OF
JNG / JLE Перейти, если не больше / если меньше или равно ZF = 1 & SF ¹ OF
JB / JNAE Перейти, если ниже / если не выше и не равно CF = 1
JNB / JAE Перейти, если не ниже / если выше или равно CF = 0
JA / JNBE Перейти, если выше / если не ниже и не равно CF = 0 & ZF = 0
JNA / JBE Перейти, если не выше / если выше или равно CF = 1 & ZF = 1
JC / JNC Перейти, если есть перенос / если переноса нет CF = 1 / CF = 0
JS / JNS Перейти, если есть знак / если нет знака SF = 1 / SF = 0
JO / JNO Перейти, если переполнение / если не переполнение OF = 1 / OF = 0
JP / JNE Перейти, если есть паритет / если паритет четный PF = 1
JNP / JPO Перейти, если паритета нет / если паритет нечетный PF = 0
JCXZ Перейти, если CX = 0 CX = 0
JECXZ Перейти, если ECX = 0 CX = 0

 

Команды условного перехода могут использоваться не только с командой CMP, но и с любой другой командой, воздействующей на флаги. Каждая из команд условного перехода в 80286 состоит из 8-битного кода операции и 8-бит, определяющих место перехода (то есть имеет размер 2 байта). 8 бит определяют относительное смещение места перехода и команды условного перехода, то есть в диапазоне -128 +127 байт от команды. “Близкий” или “далёкий” условный переход всегда можно сделать при помощи двух команд: “короткого” условного перехода и “близкого” или “далёкого” безусловного перехода. В микропроцессоре 80386 команды условного перехода могут быть с типом NEAR.

– Конец работы –

Эта тема принадлежит разделу:

СИСТЕМНОЕ ПРОГРАММИРОВАНИЕ

СИСТЕМНОЕ ПРОГРАММИРОВАНИЕ КУРС ЛЕКЦИЙ ДЛЯ СТУДЕНТОВ ЗАОЧНОГО ФАКУЛЬТЕТА... САМАРА... УДК...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Команды двойного сдвига

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Указатели
Указатели применяются для обращения к некоторым объектам в памяти, например адресам процедур или адресам меток. Близкий (NEAR) внутрисегментный указатель - это 16-битное или 32-битное смещение (в з

Адресация памяти
Микропроцессор делит адресное пространство на произвольное количество сегментов, каждый из которых содержит не более 64 Кб. Адрес первого байта сегмента всегда кратен 16 байтам и называется адресом

Команды PUSH и POP .
PUSH - передает слово из источника в стек, а команда POP осуществляет противоположное действие: передает слово из стека в приемник. Регистр SP содержит смещение последнего включенного в стек слова

Адресные команды (пересылки адреса)
В микропроцессоре существуют три основные команды пересылки адреса: LEA, LDS, LES. LEA - загрузить смещение в регистр. Форматы команды: LEA

Флажковые команды (команды пересылки флагов).
Команды этого класса обеспечивают доступ к флагам процессора. Команды LAHF (загрузить флаги в AH) и SAHF (запомнить AH во флагах). LAHF передает 5 флагов SF, ZF, AF, PF и CF в определенные

Команды вычитания.
Команды вычитания SUB, SBB, DEC аналогичны командам ADD, ADC, INC, только производят операцию вычитания, а не сложения. Команда CMP аналогична команде SUB, но результат не запоминается в п

Команды умножения и деления.
Умножение двух однобайтовых чисел может дать произведение длиной в слово. Аналогично умножение двух слов может дать результат длиной в двойное слово, а умножение двух двойных слов может дать резуль

Команды расширения знака.
CBW преобразует байт в регистре AL в слово в регистре АХ путем расширения знакового бита AL во все биты регистра AH. Команда CWD преобразует слово в регистре АХ в двойное слово , расположенное в па

Команды циклических сдвигов.
Команды циклических сдвигов позволяют переставить биты в числе. ROL - циклический сдвиг влево и ROR - циклический сдвиг вправо, обеспечивают циклический сдвиг. При этом выдвигающийся бит подаётся в

Команды SetCondition
SETCC СС - код условия совпадает с кодами условий в командах JCC условного перехода Формат команд: SETCC reg/ mem 8- если условияСС уд

Команды пересылки цепочки.
Формат общей команды: MOVS цепочка-приёмник, цепочка-источник Дополнительные команды: MOVSB MOVSW MOVSD В команде MOVS операнды нужны только для того, ч

Команды сканирования цепочек.
Команды сканирования цепочек позволяют осуществить поиск заданного значения в цепочке, находящейся в дополнительном сегменте. Смещение адреса первого элемента цепочки должно быть помещено в регистр

Команды загрузки.
Команда LODS пересылает операнд цепочка-источник, адресованный регистром SI из сегмента данных в регистр AL (AX или EAX) а затем изменяет регистр SI так, чтобы он указывал на следующий элемент цепо

Команды ввода и вывода цепочек.
Обеспечивают считывание данных из входного устройства в последовательные ячейки памяти и запись данных из последовательных ячеек в выходное устройство. Они упрощают передачи больших блоков данных м

Замена сегмента.
Можно ли изменить адресацию регистра SI (ESI) с сегмента данных на дополнительный сегмент? Можно, если использовать префикс замены сегмента, например: LEA SI, ES : H1; копирует байт из стр

Команды управления флагами.
Микропроцессор имеет команды для установки и сброса флага переноса (STC, CLC), флага направления (STD, CLD) и флага прерывания (STI, CLI). Есть также команда инвертирования флага переноса (CMC). Пе

Команды синхронизации.
Одним из средств синхронизации процессора с внешними устройствами являются прерывания, но в его архитектуре реализованы ещё две формы синхронизации: первая относится к использованию сопроцессора, в

Команды прерываний.
Средства прерывания работы процессора внешними устройствами освобождают его от периодической проверки необходимости обслуживания устройств (циклического опроса). Микропроцессор имеет два входа, по

Структура программы
Программа на языке ассемблера состоит из строк, имеющих следующий вид: Метка команда/директива операнды; комментарий. Все поля необязательны. Метка может быть любой комбинацией бу

Модели памяти
Модели памяти задаются директивой .MODEL. model модель, язык, модификатор, где модель – одно из следующих слов: TINY – код, данные и стек размещаются в одном и том же сегменте раз

Процедуры
Процедуройв ассемблере является всё то, что в других языках называют подпрограммами, функциями, процедурами и т.д. Ассемблер не накладывает на процедуры никаких ограничений- на люб

АРХИТЕКТУРА И СИСТЕМА КОМАНД АРИФМЕТИЧЕСКОГО СОПРОЦЕССОРА
Арифметический сопроцессор предназначен для вычислений над числами с плавающей точкой и может работать только в паре с основным процессором. Применение сопроцессора в задачах, использующих сложные

Целые числа
Целые двоичные числа могут быть представлены в трех различных форматах: 1. Целое слово - 16 бит (DW); 2. Короткое целое слово - 32 бита (DD); 3. Длинное целое слово - 64

Вещественные числа
Вещественные числа могут быть представлены тремя различными форматами: 1. Короткое вещественное (одинарная точность) -32 бита (DD); 1 бит 8

Диапазоны вещественных чисел в х87.
Внутреннее представление нормализованных чисел: Min число < 0   Max число < 0 знак поряд

Особые случаи вещественной арифметики
При реализации операций с вещественными числами возникают внутренние прерывания сопроцессора, называемыми особыми случаями сопроцессора (ОС). Если результат арифметической операции меньше минимальн

Случай неточного результата.
В качестве специального значения используется приближенное значение числа с плавающей точкой. Существуют четыре режима округления:

Численное антипереполнение.
Принято соглашение, что для денормализованного числа поле порядка 00..00 считается равным 00...01, но старший бит мантиссы равен 0 (а не 1). Для одинарной точности смещение равно 127, следовательно

Денормализованный операнд.
Для денормализованных операндов выполняются следующие правила формирования результатов операций: Результат равен 0, если он слишком мал для представления денормализованным числом (например

Деление на ноль.
Бесконечность - число, имеющее в поле порядка все единицы, а в поле мантиссы - все нули . Единица в старшем разряде хранится явно в расширенном формате. Так как поле знака может быть равным единице

Численное переполнение.
Численное переполнение наступает тогда, когда результат превышает наибольшее конечное число в формате приемника. Переполнение опасно, так как знак может оказаться неверным, а результат будет не бес

Численные регистры (регистровый стек).
Предназначен для выполнения вычислительных операций. Регистровый стек состоит из восьми регистров по 80 бит каждый, в которых представлены вещественные числа в расширенном формате. Адресация числен

Регистр управления (cw)
Предназначен для управления работой сопроцессора. Имеет размер – 16 бит. 15 13 11-10 9-8 7 6

Регистр состояния.

Регистр тэгов (признаков).
ТэгR7 ТэгR6

Указатели особого случая.
Предназначены для процедур обработки особых случаев. Они имеют два формата в зависимости от работы 80287 в реальном или защищенном режиме. Реальный режим

Команды передачи данных.
ТИП КОМАНДЫ МНЕМОНИКА И ФОРМАТ ОПЕРАНД/ДЕЙСТВИЕ КОМАНДЫ ЗАГРУЗКИ В СТЕК FLD REG/MEM Вещественно

Арифметические команды
Для безоперандных арифметических команд операндами по умолчанию являются регистры ST(0), ST(1). Для однооперандных арифметических команд - один из операндов - это вершина стека ST(0). Для

Дополнительные арифметические команды
МНЕМОКОД ОПИСАНИЕ FSQRT Извлечение квадратного корня FSCALE Масштабирование на степе

Команды сравнений
МНЕМОНИКА ОПИСАНИЕ FCOM операнд/(без операндов) Сравнение FICOM операнд Целочисленно

Трансцендентные команды
МНЕМОНИКА ОПИСАНИЕ FPTAN Частичный tg FPATAN Частичный arctg

Административные команды
Эта группа команд обеспечивает управление режимом работы сопроцессора. Для программиста особенно интересны команды работы с регистрами управления и состояния. МНЕ

Совместная работа двух процессоров в системе.
Выборку команд из общей очереди команд осуществляет центральный процессор. Если выбранная команда оказывается командой центрального процессора, он выполняет ее обычным образом, сопроцессор такие ко

Синхронизация по командам.
Если сопроцессор занят выполнением команды, а центральный процессор выбирает для выполнения следующую команду - опять команду сопроцессора, то центральный процессор не должен ее передавать сопроцес

Синхронизация по данным.
Если сопроцессорная команда записывает операнд в ячейку памяти, а следующая команда центрального процессора использует этот операнд в дальнейших вычислениях, ЦП должен ожидать завершения операции с

Контрольная работа №1
Реализовать ввод элементов массива с контролем допустимых кодов символов и диапазона значений элементов массива. Вывести элементы полученных массивов на экран. Вариант 1 Из исходн

Контрольная работа №2
Ввести с клавиатуры границы интервала значений аргумента функции, перевести их в формат вещественного числа, рассчитать шаг и вычислить значение функции в заданном интервале. Вывести на экран графи

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги