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 (прерывание по переполнению). Флаг переполнение может игнорироваться при выполнении операций с беззнаковыми числами.


 

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

69645. Исследование малой рекламы как продвижение ресторанных услуг калининграда 784 KB
  Изучить теоретический материал по специальным дисциплинам: маркетингу и рекламной деятельности ресторана, сервисному обслуживанию ресторана, обобщить теоретический материал, ознакомиться с деятельностью рекламных агентств полного цикла, исследовать рекламную деятельность предприятий общественного питания...
69646. Творчий проект: Таця 7.59 MB
  Перші підноси були величезними - розміром зі стіл, називалися «скатертними» і призначалися для багатьох страв. Потім їх розміри поступово зменшилися. Якщо ж шлях від кухні до їдальні порівняно довгий, необхідно використати підноси з прорізами або ручками.
69647. Виготовлення настінного календаря 576 KB
  Розробка технічного завдання Призначення виробу. Настінний календар призначений для повсякденного використання в побуті та на робочих місцях. Основними вимогами повинні бути практичність та естетичний вигляд.
69648. ОБРЯДОВИЙ РУШНИК 342 KB
  Експлуатаційні показники застосування виробу виду роботи на практиці виходячи призначення виробу цей рушник використовується при обряді хрещення а також функція оберегу. Вплив виробу на якість і ефективність реалізації ним експлуатаційних показників рушник є оберегом для дитини...
69649. Виготовлення іграшкової машинки 1.4 MB
  Розробка технічного завдання Призначення виробу. Цей виріб призначено для дітей віком від 6 до 10 років, Вимоги до матеріалів. Матеріали повинні бути екологічно чисті та нешкідливі для дітей. Ще Машинку треба зробити так щоб дитина ненароком не проковтнула яку не будь деталь...
69650. Розробка творчого проекту на виготовлення декоративної тарелі 5.49 MB
  Призначення проектованого виробу: У наш час декоративні тарелі можна використовувати як посуд для святкового столу що слугує для подання печива цукерок солодощів горіхів різноманітних фруктів а також для підношення на весіллі чарок з напоями медом вином хлібасолі тощо.
69653. Гідравліка 123.5 KB
  Знайти: Абсолютний тиск Р1 перед входом в насос якщо подача насоса Q довжина трубопроводу l1 його діаметр d1 Надлишковий тиск в бензосховищі P=const.; Потрібний напор насоса якщо манометричний тиск в трійнику рівний P2 довжина трубопроводу l2 його діаметр d2...