Команды передачи данных

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

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 29.11.2010
Размер файла 21,3 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

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

Команда MOV передает байт, слово или двойное слово из источника в приемник. В поле операндов приемник находится на первом месте, источник - на втором.

Команда XCHG осуществляет обмен байт, слов или двойных слов. Различий между приемником и источником нет.

Команда XLAT заменяет значение в регистре AL на байт из таблицы, адресуемой регистром (Е)BX, причем индексом таблицы служит содержимое регистра AL. Эта команда удобна для преобразования из одного кода в другой.

Команда LEA обеспечивает вычисление эффективного адреса ЕА ячейки памяти в соответствии с указанным способом адресации и загрузку ЕА (а не содержимого адресуемой ячейки памяти!) в указанный общий регистр.

Команды LDS, LES... загружают четыре (или шесть) смежных байта из памяти в адресуемый регистр (16 или 32 бита) и в соответствующий сегментный регистр (16 бит). Слово (двойное слово) операнда источника из ячейки памяти, адресуемой в соответствии с указанным методом адресации, передается в выбранный регистр, а следующее слово - в регистр DS (команда LDS), в регистр ES (команда LES) и т.д.

В таблицах приняты следующие обозначения:

· src - операнд-источник;

· dest - операнд-назначение (операнд-приемник);

· reg - 8/16/32-х битовый регистр;

· reg16/32 - 16/32-х битовый регистр;

· reg16 - только 16-ти битовый регистр;

· reg32 - только 32-х битовый регистр;

· mem - 8/16/32-х битовая ячейка памяти, адресуемая регистрами процессора;

· r/m - 8/16/32-х битовый регистр или ячейка памяти, адресуемая регистрами процессора;

· r/m/i - 8/16/32-х битовый регистр, ячейка памяти, адресуемая регистрами процессора или непосредственный операнд;

· addr - 16/32-х битовый адрес;

· immed - непосредственный операнд.

Таблица 1 - Команды пересылки данных

MOV dest, src

Пересылка (копирование) данных из регистра, памяти или непосредственного операнда в регистр или память

XCHG r/m, reg

Обмен данными (взаимный) между регистрами или регистром и памятью

BSWAP reg32

Перестановка байтов в регистре из порядка младший-старший в порядок старший-младший (486+)

MOVSXB reg, r/m

Копирование байта с расширением до слова или двойного слова, заполняя старшие биты знаком (386+)

MOVSXW reg, r/m

Копирование слова с расширением до двойного слова, заполняя старшие биты знаком (386+)

MOVZXB reg, r/m

Копирование байта с расширением до слова или двойного слова, заполняя старшие биты нулем (386+)

MOVZXB reg, r/m

Копирование слова с расширением до двойного слова, заполняя старшие биты нулем (386+)

XLAT

Трансляция (перекодирование) содержимого AL в значение из таблицы трансляции, адресуемой в (Е)BX: AL < [(E)BX+AL]

LEA reg16/32, mem

Загрузка эффективного адреса в регистр

LDS reg16/32, mem

Загрузка в регистр (двойного) слова из памяти, а в

DS - следующего 16-ти битового слова

LES reg16/32, mem

Загрузка в регистр (двойного) слова из памяти, а в

ES - следующего 16-ти битового слова

LFS reg16/32, mem

Загрузка в регистр (двойного) слова из памяти, а в

FS - следующего 16-ти битового слова

LGS reg16/32, mem

Загрузка в регистр (двойного) слова из памяти, а в

GS - следующего 16-ти битового слова

LSS reg16/32, mem

Загрузка в регистр (двойного) слова из памяти, а в

SS - следующего 16-ти битового слова

IN AL(AX), port8

Ввод в AL (или AX,EAX) из порта с адресом port8

IN AL(AX), DX

Ввод в AL (или AX,EAX) из порта с адресом, хранящимся в DX

OUT port8, AL(AX)

Вывод из AL (или AX,EAX) в порт с адресом port8

OUT DX, AL(AX)

Вывод из AL (или AX,EAX) в порт с адресом, хранящимся в DX

Таблица 2 - Команды работы со стеком

PUSH r/m

Помещение (двойного) слова из регистра или памяти в стек

PUSH immed

Помещение непосредственного операнда в стек (286+)

PUSHA (D)

Помещение в стек регистров AX,CX,DX,BX,SP,BP,SI,DI (286+) или их 32-х битовых расширений (386+)

POP r/m

Извлечение (двойного) слова данных из стека в регистр или память

POPA (D)

Извлечение данных из стека в регистры DI,SI, BP,SP,BX,DX,CX,AX (286+) или их 32-х битовых расширений (386+)

PUSHF (D)

Помещение в стек регистра флагов FLAGS (EFLAGS)

POPF (D)

Извлечение данных из стека в регистр флагов FLAGS (EFLAGS)

Команда PUSH передает слово (или двойное слово) из источника в стек, а команда POP осуществляет противоположное действие - передает (двойное) слово из стека в приемник. Стек - это область памяти, в которой размещается текущий сегмент стека. Регистр (Е)SP содержит смещение последнего включенного в стек слова; оно (смещение) называется ВЕРШИНОЙ СТЕКА. По мере включения в стек новых слов они располагаются по меньшим адресам памяти; говорят, что стек растет в направлении уменьшения адресов.

Команда PUSH начинается с уменьшения (декремента) содержимого регистра (Е)SP на 2 (или 4), т.е. адресует следующее свободное слово (или двойное слово) в стеке; после чего передается (двойное) слово из источника.

Команда POP передает слово (или двойное слово) из стека в приемник и завершается увеличением (инкрементом) содержимого (Е)SP на 2 (или на 4).

Команда PUSHA (D) включает в стек регистры в таком порядке: (E)AX, (E)CX, (E)DX, (E)BX, (E)SP, (E)BP, (E)SI, (E)DI. Включаемым значением регистра (E)SP является то его значение, которое было в нем до выполнения команды PUSHA (D). При выполнении команды PUSHA (D) происходит декремент содержимого регистра (E)SP на 2 (или на 4) при включении в стек каждого регистра.

Извлечение из стека, реализуемое командой POPA (D), вызовет инкремент содержимого регистра (E)SP на ту же величину, поэтому команде POPA (D) не требуется запомненное в стеке содержимое регистра (E)SP.

Таблица 3 - Команды целочисленной арифметики

ADD r/m, r/m/i

Сложение двух операндов: r/m < (r/m + r/m/i)

XADD r/m, reg

Обмен и сложение (486+)

ADC r/m, r/m/i

Сложение двух операндов с учетом переноса от предыдущей операции: r/m < (r/m + r/m/i + CF)

INC r/m

Увеличение на 1: r/m < (r/m + 1)

SUB r/m, r/m/i

Вычитание: r/m < (r/m - r/m/i)

SBB r/m, r/m/i

Вычитание с заемом: r/m < (r/m - r/m/i - CF)

DEC r/m

Уменьшение на 1: r/m < (r/m - 1)

CMP r/m, r/m/i

Сравнение - вычитание без сохранения результата (только установка флагов)

CMPXCHG r/m, reg

Сравнение и обмен данными (486+)

CMPXCHG8B

Сравнение и обмен 8 байт (PENTIUM+)

NEG r/m

Изменение знака операнда (преобразование в дополни-тельном коде): r/m < (0 - r/m)

MUL r/m

Умножение AL/AX/EAX на беззнаковое целое значение из r/m

IMUL r/m

Умножение AL/AX/EAX на целое знаковое значение из r/m

IMUL reg16/32, r/m

Знаковое умножение reg16/32 на r/m (помещение результата без расширения разрядности в reg16/32) (16 бит - 286+; 32 бита - 386+)

IMUL

reg16/32, r/m,

immed

Знаковое умножение r/m на 16/32-х битовый непосредственный операнд и помещение результата без расширения разрядности в reg16/32 (16 бит - 286+; 32 бита - 386+)

DIV r/m

Деление расширенного аккумулятора на беззнаковое число из r/m

IDIV r/m

Знаковое деление расширенного аккумулятора на знаковое целое из r/m

CBW

Знаковое расширение байта в аккумуляторе (AL) до слова: AH < заполняется битом AL[7]

CWD

Преобразование слова в двойное слово (расширение знака AX в DX) DX < заполняется битом AX[15]

CWDE

EAX [1631] < заполняется битом AX [15]

CDQ

Преобразование двойного слова в - счетверенное:

EDX < заполняется битом EAX [31]

DAA

Коррекция AL после BCD-сложения

DAS

Коррекция AL после BCD-вычитания

AAA

Коррекция AL после ASCII-сложения

AAS

Коррекция AL после ASCII-вычитания

AAM

Коррекция AL после ASCII-умножения

AAD

Коррекция AL,AH перед ASCII-делением

Различие между знаковыми и беззнаковыми числами при выполнении арифметических операций заключается в интерпретации двоичных наборов. Беззнаковые числа - это обычные двоичные числа (все биты значащие), а знаковые числа представлены в дополнительном коде.

Операции сложения и вычитания одинаковы для обоих типов чисел. Единственное отличие заключается в механизме обнаружения выхода за диапазон. Команды сложения и вычитания устанавливают флаг CF, если результат, интерпретируемый как беззнаковое число, оказывается вне диапазона; они же устанавливают флаг OF, если результат, интерпретируемый как знаковое число, выходит за диапазон.

Команда XADD - обмена и сложения - обменивает операнды и складывает их. Поэтому на месте операнда-источника остается операнд-получатель, а на месте операнда-получателя формируется сумма.

Команда NEG изменяет знак операнда в дополнительном коде.

Команда СМР (сравнение) аналогична команде вычитания, но результат нигде не запоминается. Эта команда выставляет флаги, по которым можно определить отношение между двумя операндами: равенство, больше или меньше (см. табл. 6). После команды СМР обычно используется команда условного перехода.

Команда CMPXCHG - сравнение и обмена - воспринимает 3 операнда: операнд-источник в регистре, операнд-получатель в памяти и аккумулятор AL/AX/EAX. Если значения в операнде-получателе и аккумуляторе равны, операнд-получатель заменяется операндом-источником. В противном случае исходное значение операнда-получателя загружается в аккумулятор. Флаги отражают результат, полученный при вычитании операнда-получателя из аккумулятора.

Таблица 4 - Состояние флагов после команды сравнения

Отношение

Знаковые числа

Беззнаковые числа

(dest) > (src)

(ZF=0) & (SF=OF)

(CF=0) & (ZF=0)

(dest) => (src)

SF = OF

CF = 0

(dest) = (src)

ZF = 1

ZF = 1

(dest) <= (src)

(ZF=1) & (SF<>OF)

(CF=1) & (ZF=1)

(dest) < (src)

SF <> OF

CF = 1

Команды умножения могут иметь: одно-, двух- или трехадресную форму.

В одноадресных командах MUL и IMUL один из сомножителей по умолчанию размещается в аккумуляторе (см. табл. 5), а второй сомножитель указан в команде. Результат умножения в два раза длиннее операндов.

байт регистр память пересылка

Таблица 5 - Размещение первого множителя и результата умножения

Разрядность операндов

Множитель

Результат

Старшая часть

Младшая часть

8

AL

AH

AL

16

AX

DX

AX

32

EAX

EDX

EAX

При двухадресной форме (IMUL reg16/32,r/m) или трехадресной форме (IMUL reg16/32, r/m, immed) команд умножения со знаком - результат размещается в регистре-приемнике. В этом случае старшие 16 (или 32) разряда произведения при умножении 16-ти (или 32-х) разрядных операндов теряются. Такие команды удобно применять для вычисления адресов элементов массивов.

Команды деления DIV и IDIV имеют только одноадресную форму, причем разрядность делимого (см. табл. 6) должна вдвое превышать разрядность делителя, указанного в команде.

Для подготовки операнда-делимого двойной длины используются команды расширения аккумулятора знаковыми битами. При выполнении команд - CBW / CWDE (преобразование байта в слово / преобразование слова в двойное слово с расширением в аккумуляторе) - расширенный операнд остается в аккумуляторе. Команды - CWD / CDQ (преобразование слова в двойное слово / преобразование двойного слова в счетверенное слово) - расширяют аккумулятор AX или EAX в регистры DX или EDX соответственно, куда заносится старшая половина (расширенный знак) операнда.

Система команд процессоров х86 позволяет выполнять арифметические действия над числами, представленными в ДВОИЧНО-ДЕСЯТИЧНОМ УПАКОВАННОМ ФОРМАТЕ (BCD код) или в коде ASCII, используемом при обмене информацией и при вводе с клавиатуры. Для этих чисел допустимы значения от 0 до 9 в младшей тетраде.

Команда DAA - ДЕСЯТИЧНОЙ КОРРЕКЦИИ АККУМУЛЯТОРА ПОСЛЕ СЛОЖЕНИЯ BCD-чисел выполняет действия над содержимым AL следующим образом:

· если содержимое младшей тетрады AL больше 9 или установлен флаг AF = 1, то к содержимому AL добавляется 6 ;

· если после этого содержимое старшей тетрады AL стало больше 9 или установлен флаг CF, то число 6 добавляется к старшей тетраде AL.

Аналогичным образом выполняются действия над содержимым AL командой DAS - ДЕСЯТИЧНАЯ КОРРЕКЦИЯ ПОСЛЕ ВЫЧИТАНИЯ BCD-чисел:

· если младшая тетрада больше 9 или установлен флаг AF = 1, то из AL вычитается число 6;

· если после этого старшая тетрада больше 9 или установлен флаг CF = 1, то число 6 вычитается из старшей тетрады AL.

Перед выполнением арифметических команд над числами в коде ASCII необходимо очистить старшие тетрады этих чисел. Такие числа называются: распакованными (неупакованными).

Команда ААА выполняет коррекцию числа в регистре AL, полученного в результате сложения двух распакованных десятичных операндов. Если содержимое младшей тетрады AL больше 9 или установлен флаг AF = 1, то к содержимому AL добавляется 6; после этого к AH прибавляется 1, очищается старшая тетрада AL, и устанавливаются флаги CF и AF.

Команда AAS выполняет коррекцию числа в регистре AL, полученного в результате вычитания двух распакованных десятичных операндов. Если содержимое младшей тетрады AL больше 9 или установлен флаг AF = 1, то из AL вычитается число 6; после этого из AH вычитается 1, очищается старшая тетрада AL, и устанавливаются флаги CF и AF.

Команда AAM выполняет коррекцию числа в регистре AL, полученного после умножения двух распакованных десятичных операндов. Содержимое AL делится на 10; частное пересылается в АН, а остаток - в AL.

Команда AAD производит коррекцию делимого ДО ВЫПОЛНЕНИЯ команды деления. Для этого содержимое регистра AH умножается на 10 и результат прибавляется к содержимому в AL, старший байт аккумулятора АН очищается. Полученный операнд используется для обычного деления на распакованный делитель.

Логические двухоперандные команды служат для реализации трех булевых функций (результат помещается на место первого операнда):

· AND - поразрядное логическое И;

· OR - поразрядное логическое ИЛИ;

· XOR - поразрядное логическое ИСКЛЮЧАЮЩЕЕ ИЛИ (сумма по модулю 2).

Сюда также относится команда TEST (проверка), которая выполняет поразрядное логическое И, но результат никуда не заносит, а только устанавливаются флаги для выполнения условных переходов.

Команды XOR и SUB позволяют обнулить все биты регистра (регистр должен быть и источником и приемником).

Таблица 6 - Команды логических операций

AND r/m, r/m/i

Побитовое логическое И

TEST r/m, r/m/i

Проверка бит (логическое И без записи результата - установка флагов)

OR r/m, r/m/i

Побитовое логическое ИЛИ

XOR r/m, r/m/i

Побитовое логическое ИСКЛЮЧАЮЩЕЕ ИЛИ

NOT r/m

Побитовая инверсия

Команды сдвигов и циклических сдвигов (табл. 8) выполняют сдвиг 8/16/32-х битового операнда на 1 бит или на произвольное число бит (но не больше длины операнда). Для сдвигов более, чем на один бит, число сдвигов может быть записано предварительно в регистр CL или задано непосредственным операндом в команде (286+). Во всех командах сдвигов последний выдвигаемый бит помещается во флаг CF.

В командах двойного сдвига операндом-приемником (dest) может быть содержимое reg16/32 или mem16/32, операндом-источником (src) - только содержимое РОНа (с разрядностью 16/32). Для сдвигов более, чем на один бит, число сдвигов может быть записано предварительно в регистр CL или задано непосредственным операндом в команде.

Внутри процессора операнды dest и src объединяются в промежуточном регистре двойной длины, содержимое которого логически сдвигается влево или вправо. После сдвига в операнд-приемник (dest) помещаются соответствующие сдвинутые биты промежуточного регистра. Содержимое операнда-источника (src) не изменяется. Можно сказать, что в этих командах сдвигается операнд-приемник (dest) и в его освобождающиеся биты «вдвигается» содержимое операнда-источника (src).

Таблица 7 - Команды сдвигов

Команда

Мнемоника

Выполнение команды

Логический сдвиг влево

Арифметический сдвиг влево

SHL

SAL

Логический сдвиг вправо

SHR

Арифметический сдвиг вправо

SAR

Циклический сдвиг вправо

ROR

Циклический сдвиг влево

ROL

Циклический сдвиг вправо через флаг CF

RCR

Циклический сдвиг влево через флаг CF

RCL

Двойной сдвиг влево (386+)

SHLD

Двойной сдвиг вправо (386+)

SHRD

Размещено на Allbest.ru


Подобные документы

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

    курсовая работа [319,1 K], добавлен 07.08.2013

  • Общее представление о записи данных. Виды регистров и типов данных с плавающей точкой. Модель выполнения программы SIMD. Формат данных в памяти регистра с плавающей точкой. Состояние и управление потоковым разрешением. Поле управления округлением.

    реферат [1,1 M], добавлен 06.01.2011

  • Программное обеспечение - важный компонент функционирования компьютерной деятельности. Изучение принципа работы резидентных программ. Разработка программы по удалению слов из текстового файла без учета регистра. Требования к программе, разработка проекта.

    курсовая работа [404,5 K], добавлен 03.02.2011

  • Схема дешифратора с четырёхразрядной шиной адреса и максимальными шестнадцатью управляемыми выходами. Состояния логических элементов. Добавление функции блокировки. Запись данных в регистр. Изменение адресов регистров RA, RB, регистра дискретных входов.

    курсовая работа [1,5 M], добавлен 14.01.2014

  • Базовая структура процессора. Хранение признаков перехода и состояний. Применение буферного регистра. Алгоритм выполнения команды условного перехода. Увеличение быстродействия процессора. Выполнение микроопераций и вычисление логических условий.

    курсовая работа [777,7 K], добавлен 31.01.2016

  • Модель целочисленного MMX-расширения и особенности работы сопроцессора. Отображение ММХ-регистров на регистры стека сопроцессора. Система команд MMX: команды пересылки, сложения и вычитания, сравнения, логических операций, сдвига, упаковки и распаковки.

    презентация [240,3 K], добавлен 11.12.2013

  • Объем двухпортовой памяти, расположенной на кристалле, для хранения программ и данных в процессорах ADSP-2106x. Метод двойного доступа к памяти. Кэш-команды и конфликты при обращении к данным по шине памяти. Пространство памяти многопроцессорной системы.

    реферат [28,1 K], добавлен 13.11.2009

  • Ядро микроконтроллеров AVR семейства Mega. Временные характеристики ЖК-дисплея. Подключение модуля HD44780. Список управляющих комбинаций битов регистра IR, выполняемые команды. Приём данных по интерфейсу RS 232. Назначение выводов 9-контактного разъема.

    курсовая работа [1,2 M], добавлен 10.01.2015

  • Понятие машинной команды как закодированного по определенным правилам указания микропроцессору на выполнение некоторой операции или действия. Элементы машинных команд (код операции, операнд) и их виды (передачи данных, управления, арифметико-логические).

    презентация [120,6 K], добавлен 14.10.2013

  • Основные команды для работы с файлами. Текстовый редактор vim. Простейшие команды для работы с текстом. Команды для управления процессами. Настройка оболочки и сценариев. Монтирование и демонтирование файловых систем. Базовые регулярные выражения.

    лабораторная работа [2,7 M], добавлен 14.07.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.