4890

Команды пересылки данных

Реферат

Информатика, кибернетика и программирование

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

Русский

2012-11-28

61.5 KB

4 чел.

Команды пересылки данных

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

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

Приведем несколько примеров использования этой команды.

MOV AX, val   ;пересылка из памяти в регистр

MOV val, AX  ;и наоборот

MOV DS, AX  ;пересылка между 16-разрядными регистрами

MOV BL, AL  ;пересылка между 8-разрядными регистрами

MOV CL, -25  ;пересылка константы в регистр

MOV val, 234h  ;или в память

В команде MOV исключаются следующие сочетания операндов:

  1.  Нельзя осуществить непосредственную пересылку данных из одной ячейки памяти в другую. Чтобы выполнить такую пересылку, данные источника необходимо загрузить в регистр общего назначения, а затем переслать содержимое этого регистра в приемник. Например, если val1 и val2 две переменные, то для пересылки значения из одной переменной в другую можно воспользоваться командами:

MOV AX, val1

MOV val2, AX

  1.  Нельзя загрузить непосредственно адресуемый операнд в регистр сегмента.
  2.  Нельзя непосредственно переслать значение одного регистра сегмента в другой. Подобные пересылки модно делать через регистр общего назначения. Например, чтобы регистр DS указывал на тот же сегмент, что и регистр ES, можно воспользоваться командами

MOV AX, ES

MOV DS, AX

  1.  Нельзя использовать регистр CS в качестве приемника в команде MOV.

Команда обмена XCHG позволяет обменять между собой значения двух регистров или регистра и ячейки памяти. Нельзя выполнить обмен значений регистров сегмента. Приведем несколько примеров использования этой команды:

XCHG AX, val   ;обмен значения регистра и ячейки памяти

XCHG val, AX  ;и наоборот

XCHG BX, AX  ;обмен между 16-разрядными регистрами

XCHG BL, AL  ;обмен между 8-разрядными регистрами

Арифметические команды

Арифметические команды могут обрабатывать четыре типа чисел – беззнаковые двоичные, знаковые двоичные, беззнаковые упакованные десятичные и беззнаковые неупакованные десятичные. Двоичные числа могут быть 8- и 16-разрядными. Десятичные упакованные числа содержат в байте две цифры, неупакованные – одну.

Беззнаковые 8-разрядные двоичные числа могут иметь значение от 0 до 255. Для представления беззнаковых чисел в диапазоне от 0 до 65 535 используются 16 разрядов. Над беззнаковыми двоичными числами могут выполняться операции сложения, вычитания, умножения и деления.

Знаковые двоичные числа (целые) также могут быть 8- и 16-разрядными. Самый старший (самый левый) бит знакового числа интерпретируется как знак этого числа: 0 – положительное число, 1 – отрицательное. Отрицательные числа представляются в стандартном двоичном дополнительном коде. Так как старший бит знакового числа используется для обозначения знака, диапазон представления 8-разрядных знаковых чисел от -128 до +127. 16-разрядное целое число представляется в диапазоне от -32 768 до +32 767. Нуль представляется положительным числом. Для знаковых чисел могут выполняться операции сложения, вычитания, умножения и деления.

Рассмотрим арифметические команды языка ассемблера.

Сложение

ADD (операнд назначения),(операнд-источник)

Сумма двух операндов, которые могут быть байтами или словами, помещается в операнд назначения. Размеры операндов должны быть одинаковыми, и только один операнд может быть операндом памяти. Регистр сегмента не может быть операндом назначения. Оба операнда могут быть знаковыми или беззнаковыми числами. Команда ADD изменяет значение флагов AF, CF, OF, PF, SF и ZF.

Пример.

mov BX, 1FFEh

mov CX, 3

add BX, CX    ; ВХ=2001h

ADC (операнд назначения),(операнд-источник)

Команда ADC (суммирование с учетом разряда переноса) суммирует операнды, которые могут быть байтами или словами, и добавляет 1, если установлен разряд переноса; результат помещается в операнд назначения. Оба операнда могут быть знаковыми или беззнаковыми числами. Команда ADD изменяет значение флагов AF, CF, OF, PF, SF и ZF. Так как команда ADC учитывает значение разряда переноса от предыдущей операции, это может быть использовано для организации суммирования чисел произвольной разрядности.

Пример 1.

mov AX, 1125h

adc AX, 2C25  ; AX=3D48h, если CF=1

Пример 2.

В сегменте данных:

numlow DW 0FFFh  ;Младшая часть 2-го слагаемого

numhigh DW 0005h  ;Старшая часть 2-го слагаемого

    ;Число 5FFFh=393215

В сегменте кодов:

mov  AX, 0005h  ;Младшая часть 1-го слагаемого

mov  BX, 0002h  ;Старшая часть 2-го слагаемого

    ;Число 20005h=131077

add  AX, numlow  ;Сложение младших частей, CF=1

adc  BX, numhigh  ;Сложение старших частей

;с переносом

;BX:AX=0008:0004h 

;Число 80004

h=524292

INC (операнд назначения)

Команда INC (инкремент) добавляет единицу к операнду назначения. Операнд может быть байтом или словом и трактуется как беззнаковое двоичное число. Команда INC изменяет значение флагов AF, OF, PF, SF и ZF; значение флага CF эта команда не изменяет. Не допускается использовать в качестве операнда непосредственное значение.

Вычитание

SUB (операнд назначения),(операнд-источник)

Содержимое операнда-источника вычитается из содержимого операнда назначения, и результат помещается в операнд назначения. Операнды могут быть знаковыми или беззнаковыми, двоичными или десятичными (см. команды AAS и DAS), однобайтовыми или двухбайтовыми числами. Команда SUB изменяет значение флагов AF, CF, OF, PF, SF и ZF.

SBB (операнд назначения),(операнд-источник)

Команда SBB (вычитание с учетом заема) вычитает содержимое операнда-источника из содержимого операнда назначения, затем вычитает из результата 1, если был установлен флаг переноса CF. Результат помещается на место операнда назначения.

Операнды могут быть знаковыми или беззнаковыми, двоичными или десятичными (см. команды AAS и DAS), однобайтовыми или двухбайтовыми числами. Команда SBB изменяет значение флагов AF, CF, OF, PF, SF и ZF. Команда SBB может быть использована для организации вычитания многобайтовых чисел.

DEC (операнд назначения)

Команда DEC (декремент) вычитает единицу из операнда назначения, который может быть одно- или двухбайтовым. Команда DEC изменяет содержимое флагов AF, OF, PF, SF и ZF. Содержимое флага CF при этом не изменяется.

NEG (операнд назначения)

Команда NEG (инверсия) вычитает операнд назначения, который может быть байтом или словом из 0 и помещает результат в операнд назначения. Такая форма двоичного дополнения числа пригодна для инверсии знака целых чисел. Если операнд нулевой, его знак не меняется. Попытка применить команду NEG к байтовому числу -128 или к двухбайтовому числу -32 768 не приводит к изменению значения операнда, но устанавливает флаг OF. Команда NEG воздействует на флаги AF, CF, OF, PF, SF и ZF. Флаг CF всегда установлен за исключением случая, когда операнд равен нулю, когда этот флаг сброшен. Не допускается использовать в качестве операнда непосредственное значение.

CMP (операнд назначения),(операнд-источник)

Команда СМР (сравнение) вычитает операнд-источник из операнда назначения, не изменяя при этом значения операндов. Операнды могут быть байтовыми или двухбайтовыми числами. Хотя значения операндов не изменяются, значения флагов обновляются, что может быть учтено в последующих командах условного перехода. Команда CMP воздействует на флаги AF, CF, OF, PF, SF и ZF. При совпадении значений операндов взводится флаг ZF. Флаг переноса взводится, если операнд назначения меньше операнда-источника.

Умножение

MUL (операнд-источник)

Команда MUL (умножение) выполняет беззнаковое умножение операнда-источника и содержимого аккумулятора. Если операнд-источник однобайтовый, осуществляется умножение на содержимое регистра AL, а двухбайтовый результат возвращается в регистры AH и AL. Если операнд-источник двухбайтовый, осуществляется умножение на содержимое регистра AX, а четырехбайтовый результат возвращается в пару регистров DX и AX.

Операнды рассматриваются как беззнаковые двоичные числа. Если старшая половина результата (регистр AH при однобайтовом умножении и DX при двухбайтовом умножении) взводятся флаги CF и OF, в противном случае эти флаги сбрасываются.

Если после выполнения умножения взведены флаги CF и OF, это говорит о наличии значащих цифр результата в регистре AH или DX. Содержимое флагов AF, PF, SF и ZF после выполнения команды умножения неопределено.

Пример 1.

mov AL, 5 ; первый сомножитель

mov BL, 3 ; второй сомножитель

mul BL ;AX=000Fh

Пример 2.

mov AX, 255 ; первый сомножитель

mov BX, 255 ; второй сомножитель

mul BX  ; DX=0001h,AX=0000h

   ; число 65536

IMUL (операнд-источник)

Команда IMUL (целочисленное умножение) выполняет знаковое умножение операнда-источника и содержимого аккумулятора. Если операнд-источник однобайтовый, осуществляется умножение на содержимое регистра AL, а двухбайтовый результат возвращается в регистрах AH и AL. Если операнд-источник двухбайтовый, осуществляется умножение на содержимое регистра AX, а четырехбайтовый результат возвращается в паре регистров DX и AX. Операнды рассматриваются как беззнаковые двоичные числа. Если старшая половина результата (регистр AH при однобайтовом умножении и DX при двухбайтовом умножении) взводятся флаги CF и OF, в противном случае эти флаги сбрасываются. Если после выполнения умножения взведены флаги CF и OF, это говорит о наличии значащих цифр результата в регистре AH или DX. Содержимое флагов AF, PF, SF и ZF после выполнения команды целочисленного умножения неопределено.

Пример 1.

mov AL, 5 ; первый сомножитель

mov BL, 3 ; второй сомножитель

mul BL ;AX=000Fh

Пример 2.

mov AL, -3 ; первый сомножитель

mov BL, 5  ; второй сомножитель

mul BL  ; AX=FFF1h

   ; число 65536

Деление

DIV (операнд-источник)

Команда DIV (деление) выполняет беззнаковое деление содержимого аккумулятора (и его расширения) на операнд-источник. Если операнд-источник однобайтовый, осуществляется деление двухбайтового делимого, расположенного в регистрах AH и AL. Однобайтовое частное получается в регистре AL, а однобайтовый остаток – в регистре AH. Если операнд-источник двухбайтовый, осуществляется деление четырехбайтового делимого, расположенного в регистрах DX и AX. Двухбайтовое частное при этом получается в регистре AX, а двухбайтовый остаток – в регистре DX. Если значение частного превышает разрядность аккумулятора (0FFh для однобайтового деления и 0FFFFh – для двухбайтового) или выполняется попытка деления на нуль, генерируется прерывание типа 0, а частное и остаток остаются неопределенными. Содержимое флагов AF, CF, OF, PF, SF и ZF после выполнения команды DIV неопределено.

Пример 1.

mov AX, 506 ;Делимое

mov BL, 50 ;Делитель

div BL  ;AL=0Ah (частное)

  ;AH=06h (остаток)

Пример 2.

mov DX, 1  ;Старшая часть делимого 65537

mov AX, 1  ;Младшая часть делимого 65537

mov CX, 256 ;Делитель

div CX  ;AX=0100h (частное)

  ;DX=0001h (остаток)

IDIV (операнд-источник)

Команда IDIV (целочисленное деление) выполняет знаковое деление содержимого аккумулятора (и его расширения) на операнд-источник. Если операнд-источник однобайтовый, осуществляется деление двухбайтового делимого, расположенного в регистрах AH и AL. Однобайтовое частное получается в регистре AL, а однобайтовый остаток - в регистре AH. Для байтового целочисленного деления положительное частное не может быть больше значения +127 (7Fh), а отрицательное не может быть меньше -127 (81h). Если операнд-источник двухбайтовый, осуществляется деление четырехбайтового делимого, расположенного в регистрах DX и AX. Двухбайтовое частное при этом получается в регистре AX, а двухбайтовый остаток - в регистре DX. Для двухбайтового целочисленного деления положительное частное не может быть больше значения +32767 (7FFFh), а отрицательное не может быть меньше значения -32767 (8001h). Если частное положительное и превышает максимум или отрицательное и меньше минимума, генерируется прерывание типа 0, а частное и остаток остаются неопределенными. Частным случаем такого события является попытка деления на нуль. Содержимое флагов AF, CF, OF, PF, SF и ZF после выполнения команды IDIV неопределено.

Пример.

mov AX, -506 ;AX=FE06h Делимое

mov BL, 50 ;Делитель

idiv BL  ;AL=F6h=-10 (частное)

  ;AH=FAh=-6 (остаток)

CBW

Команда CBW (преобразование байта в слово) расширяет знак байта в регистре AL на весь регистр АХ. Команда CBW не воздействует на флаги. Команда CBW может быть использована для получения двухбайтового делимого из однобайтового перед выполнением команды деления.

Пример.

mov AL, 5  

cbw   ;AX=0005h

mov AL, -2 ;AL=FEh=-2

cbw   ;AX=FFFEh=-2

CWD

Команда CWD (преобразование слова в двойное слово) расширяет знак слова в регистре AХ на пару регистров АХ и DX. Команда CWD не воздействует на флаги. Команда CWD может быть использована для получения четырехбайтового делимого из двухбайтового перед выполнением команды деления.

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

  •  CF (флаг переноса): Если в результате сложения осуществляется перенос из старшего бита, флаг переноса взводится; в противном случае флаг переноса сбрасывается. При вычитании флаг переноса взводится, если осуществляется заем в старший бит результата; при отсутствии заема флаг сбрасывается. Следует иметь в виду, что при возникновении знакового переноса CF = OF (флаг переполнения). Флаг переноса CF может использоваться для индикации беззнакового переполнения. Команды ADC (сложение с учетом разряда переноса) и SBB (вычитание с учетом разряда переноса) учитывают значение флага переноса, что позволяет реализовывать многобайтовые (например, 32- и 64-битовые) операции.
  •  AF (флаг дополнительного переноса): Если в результате сложения осуществляется перенос из младшего полубайта в старший, флаг дополнительного переноса взводится; в противном случае флаг сбрасывается. При вычитании флаг дополнительного переноса взводится, если осуществляется заем из старшего полубайта в младший; при отсутствии заема флаг сбрасывается. Флаг дополнительного переноса используется при десятичной коррекции операций.
  •  SF (флаг знака): После арифметических и логических операций флаг знака принимает значение старшего (7 или 15) бита результата. Для знаковых двоичных чисел флаг знака принимает значение 0 при положительном результате и 1 при отрицательном (если только не возникло переполнение). Команда условного перехода, выполняемая после операции со знаковыми числами, может использоваться для ветвления программы в зависимости от знака результата.
  •  ZF (флаг нуля): Если в результате арифметической или логической операции получается нулевой результат, флаг нуля взводится; в противном случае флаг нуля сбрасывается. Команда условного перехода могут использоваться для ветвления программы в зависимости от равенства или неравенства нулю результата предыдущей операции.
  •  PF (флаг четности): Если младшие 8 бит результата арифметической или логической операции содержат четное число единичных битов, флаг четности взводится; в противном случае флаг четности сбрасывается. Флаг четности может использоваться для проверки правильности принятого кода при передаче данных по линиям связи.
  •  OF (флаг переполнения): Если в результате операции получается очень большое положительное число или очень маленькое отрицательное, которое не помещается в операнд назначения, флаг переполнения взводится; в противном случае флаг переполнения сбрасывается. Флаг переполнения индицирует знаковое арифметическое переполнение. Состояние этого флага может быть проверено командой условного перехода или командой INTO (прерывание по переполнению). Флаг переполнение может игнорироваться при выполнении операций с беззнаковыми числами.


 

А также другие работы, которые могут Вас заинтересовать

47839. Система бухгалтерского учета 101 KB
  В соответствии с Федеральным законом О бухгалтерском учете N 129ФЗ от 21 ноября 1996 года бухгалтерский учет представляет собой упорядоченную систему сбора регистрации и обобщения информации в денежном выражении об имуществе обязательствах организации и их движении путем сплошного непрерывного и документального учета всех хозяйственных операций. В соответствии с действующим Законом О бухгалтерском учете бухгалтерский учет ведут все организации находящиеся на территории РФ а также филиалы и представительства иностранных организаций....
47840. Економічна сутність і методи вимірювання продуктивності 110.5 KB
  Економічна сутність і методи вимірювання продуктивності Сутність і значення продуктивності праці Розрізняють поняття продуктивність і продуктивність праці. Продуктивність –- це ефективність використання ресурсів праці капіталу землі матеріалів енергії інформації – під час виробництва різних товарів і надання послуг. Тому для визначення ефективності виробництва найчастіше використовують показник продуктивності праці хоча це не означає що тільки праця є джерелом продуктивності. Продуктивність праці відбиває ступінь ефективності...
47842. Лекции по электробезопасности 247.5 KB
  Длительность протекания тока (ожоги тканей тела, нагрев внутренних органов, изменение состава крови, нарушение функций центральной нервной системы, вероятность совпадения времени протекания электрического тока с фазой Т кардиоцикла)
47843. Философия. Основы философского учения 948.5 KB
  Мировоззрение его структура и основные типы Мировоззрение это система обобщенных взглядов на мир на место в нем человека и его отношение к этому миру а также основанные на этих взглядах убеждения чувства и идеалы определяющие жизненную позицию человека принципы его поведения и ценностные ориентации. Убеждения не особый вид знаний а их состояние качественная характеристика Мировоззрение включает настроения чувства переживиния составляющие его эмоциональнопсихологическую сторону и оказывающие существенное влияние на...
47844. Финансы. Учебное пособие 519 KB
  В учебном пособии представлен первый раздел Финансы где рассматриваются основные вопросы сущность и функции финансов финансовая политика финансовая система и ее звенья управление финансами организация финансового контроля. Особое внимание уделяется изучению государственных и местных финансов: бюджетное устройство РФ государственный кредит и внебюджетные фонды. Финансы выступают неотъемлемой частью рыночных отношений и одновременно важным инструментом реализации финансовой политики государства. Целью учебного...
47845. Финансы железнодорожного транспорта 95 KB
  Сущность финансов железнодорожного транспорта Централизация управления финансами на железнодорожном транспорте ВВЕДЕНИЕ Транспортный комплекс состоит из большого количества взаимосвязанных отраслей и представляет собой особую транспортную отрасль производства обладающую общностью законов развития однородностью производственных процессов и назначением создаваемой продукции. Поэтому стратегия развития транспорта должна строиться с учетом неразрывности двух его функций: как поставщика услуг необходимых для развития экономики так и...
47846. ЗАКОН ХАРДИ-ВАЙНБЕРГА 622 KB
  ЧАСТОТА ГЕНА А и а рассматриваемые аллели N количество диплоидных особей 2N – количество генов D – количество особей с доминантными аллелями АА Н количество гетерозиготных особей Аа R – количество рецессивных особей аа D H R = N D H R структура популяции D H R доля или частота гена доля или частота гена а СЛУЧАЙНОЕ СКРЕЩИВАНИЕ структура популяции частота скрещиваний УСТАНОВЛЕНИЕ РАВНОВЕСИЯ формула теоретической популяции ; экспериментальная популяция
47847. Аспекты информатизации в цивилизации 817.5 KB
  Дробные числа переводятся аналогично но деление на группы проводится двигаясь вправо от десятичной точки и записывая недостающие нули являющиеся значащими. На каждом шаге деления получают цифры числа в системе S начиная с младшей. Отдельно для целой и дробной части числа в произвольной системе счисления.