Команды передач данных
Очень часто возникает задача сравнения двух операндов. При этом необходимо определить, какой из операндов больше или меньше, но сами операнды нужно сохранить. Для этого в МП есть команда сравнения двух операндов СМР. Сравнение операндов осуществляется путем вычитания второго операнда из первого. При этом формируются все признаки результата операции, но сам результат нигде не сохраняется. Эта… Читать ещё >
Команды передач данных (реферат, курсовая, диплом, контрольная)
Во всех компьютерах необходимы команды, предназначенные просто для пересылок данных, адресов и непосредственных операндов в регистры или ячейки памяти. В МП Intel 8086 имеется пять базовых команд для выполнения таких действий:
МО V — переслать;
LEA — загрузить {load) эффективный (внутрисегментный) адрес;
LDS и LES — загрузить адрес в сегментные регистры DS и ES соответственно;
XCHG — обменять {exchange).
MOV — наиболее универсальная команда, предназначенная для пересылки информации между регистрами МП, регистрами и ячейками памяти, загрузки непосредственного операнда в регистр или ячейку памяти. Для краткого символического описания сути выполняемых командами МП действий введем следующие обозначения:
(…) — содержимое регистра или ячейки памяти;
<—заменить старое содержимое новым.
Приведем несколько примеров команды MOV с использованием разных режимов адресации:
• MOV АХ, SI (АХ) <- (SI)
в регистр АХ заносится содержимое регистра 57;
• MOV ALPHA, CL {ALPHA) «- {CL)
в ячейку ALPHA заносится содержимое регистра CL, при этом сама ячейка должна быть объявлена как однобайтная;
• MOVВЕТА+5, 9835Я (BETA+5) <- 9835Я в двухбайтную ячейку, отстоящую от ячейки BETA на 5 байтов, заносится шестнадцатеричное число 9835, т. е. 1 001 100 000 110 101;
• MOVDX, [ВР] [?/]+30 {ОХ) <- {[BP] [S7]+30)
в регистр DX заносится содержимое двухбайтной ячейки, внутрисегментный адрес которой вычисляется сложением содержимого регистров BP, SI и смещения 30.
Команды LEA, LDS и LES обеспечивают загрузку адресов из памяти. Команда LEA загружает внутрисегментный адрес в любой регистр МП, этот адрес в ассемблере называется эффективным. Адрес ячейки памяти может быть указан всеми косвенными способами адресации, причем если в командах MOV, LDS, LES при этом будет выбрано содержимое ячейки, то в этой команде будет загружен именно адрес. Команды LDS и LES аналогичны, но первая загружает из памяти регистр DS, а вторая — ES. Обе команды кроме сегментных регистров загружают также дополнительно еще один внутренний регистр МП (несегментный), указанный в качестве операнда в команде. Типичный вид команд:
LEA SI, COL [ВХ] {SI) <- COL [BX]
LDS DI, TABLE [BX {DI) <- ( TABLE [BX])
{DS) <- {TABLE [BX]+ 2).
Команда XCHG осуществляет обмен содержимым двух операндов, т. е. первый операнд помещается на место второго, а второй — на место первого:
XCIIG BX, [BP] [5/]+68 {ВХ) о {[ВР] [57]+68).
Арифметические команды. К арифметическим операциям, выполняемым МП Intel 8086, относятся сложение, вычитание, умножение и деление. Однако набор арифметических команд МП гораздо больше. Так как разрядность регистров МП составляет 16, диапазон чисел, представленных таким числом двоичных разрядов, ограничен и составляет всего ±32 768. Для расширения диапазона представляемых чисел двухбайтные слова могут сцепляться в четырехбайтные, шестибайтные и т. д. Поэтому наряду с командами, обеспечивающими сложение и вычитание обычных 16-разрядных чисел, в МП есть команды для выполнения арифметических операций с учетом переноса или заема, образовавшегося при обработке предыдущего двухбайтного слова цепочки.
Команды сложения и вычитания без учета и с учетом переноса (заема) имеют следующий вид:
ADD opt, ор2 — сложение без учета переноса;
SUB opt, ор2 — вычитание без учета заема;
ADC opt, ор2 — сложение с учетом переноса;
SB В opt, ор2 — вычитание с учетом заема.
Под «opt» и «ор2» понимают первый и второй операнды, один из которых — содержимое регистра, а другой может быть задан всеми возможными режимами адресации данных.
Кроме команд, реализующих обычные операции сложения и вычитания двух операндов в МП, как и во многих других, имеются команды сложения (инкремент) и вычитания (декремент) операнда с единицей: INC opt — инкремент; DEC opt — декремент.
В этих командах только один операнд (другой определен операцией, это — единица), а результат операции помещается на прежнее место операнда. В качестве операнда может выступать содержимое регистра МП или ячейки ОЗУ:
INC АХ (АХ) <-(ЛХ)+1.
DEC [ВХ] [Щ+45 ([ВХ] [DI+45) <;
([ВХ] [Щ+45) — 1.
Очень часто возникает задача сравнения двух операндов. При этом необходимо определить, какой из операндов больше или меньше, но сами операнды нужно сохранить. Для этого в МП есть команда сравнения двух операндов СМР. Сравнение операндов осуществляется путем вычитания второго операнда из первого. При этом формируются все признаки результата операции, но сам результат нигде не сохраняется. Эта команда схожа с командой SUB, но отличается от нее тем, что результат операции не запоминается.
В двоичной арифметике, как и в любой другой, разрядность произведения больше разрядности сомножителей. Если в качестве сомножителей выступают однобайтные операнды, то произведение будет двухбайтным, если операнды двухбайтные, то произведение — четырехбайтное. В качестве одного из операндов всегда выступает содержимое регистра АХ, или его младшей половины ЛЬ, и в команде он не обозначается. Другой операнд может быть содержимым регистра или ячейки ОЗУ. Если в команде указан однобайтный операнд, то он умножается на содержимое регистра AL, а двухбайтное произведение размещается в регистре АХ. Если же операнд двухбайтный, то он умножается на содержимое всего регистра АХ, для размещения произведения требуется еще один регистр. Старшая половина произведения помещается в регистр DX, а младшая — в АХ.
Операция деления является обратной умножению. Здесь также указывается только один операнд — делитель, а делимое всегда размещается либо в регистрах DX, АХ, либо только в регистре АХ. Частное всегда помещается в регистр АХ (AL).
Другая особенность двоичной арифметики — в работе с двоичными числами со знаком и без знака. Если число со знаком, его функцию выполняет старший разряд, при этом «О» соответствует положительному числу, а «1» — отрицательному. Поэтому операции умножения и деления с учетом знака чисел и без учета знака также отличаются друг от друга, и команды МП, выполняющие операции с учетом и без учета знака операндов, разные. Приведем команды умножения и деления беззнаковых чисел с кратким символическим пояснением:
MUL GAMMA (DX) (АХ) <- (АХ)х (GAMMA)
(при условии, что GAMMA — двухбайтная ячейка);
DIV СН (AL) <�г- (АХ):(СН)
DIV [57] (АХ) <- (DX, AX):([SI]).
(при условии, что ячейка, адрес которой содержится в 57, — двухбайтная).
Беззнаковые команды умножения и деления используются при обработке чисел с разрядностью, кратной двум байтам, составленных из цепочек. Мнемоника команд, обеспечивающих обработку чисел с учетом знака, отличается наличием буквы «/» в обозначении: IMUL opi и IDIV ор.
Наконец, еще одной особенностью арифметики МП является возможность представления двоично-десятичных чисел. В таких числах четыре двоичных разряда объединяются в тетраду и соответствуют одной десятичной цифре. Двухбайтное двоичное число может соответствовать четырехразрядному десятичному числу. Такая форма представления чисел и называется двоично-десятичной. Так, например, десятичное число 958010 запишется в двоично-десятичном виде как 1 001 010 110 000 000. Операции над двоично-десятичными числами выполняются в два этапа. Сначала осуществляется операция над операндами, как обычными двоичными числами, а затем осуществляется коррекция результата с помощью специальных команд коррекции.