Команды передачи данных
Пути пересылки байт, слов или двойных слов из памяти в регистр, из регистра в память и из регистра в регистр. Команды пересылки данных и работы со стеком. Принципы целочисленной арифметики. Состояние флагов и результата умножения после команды сравнения.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 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+) |
|
IMULreg16/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