Жанр: Учеба

Ассемблер и программирование для IBM PC

сторінка №35

-----------
О п е р а ц и я: Используется после проверки знаковых данных для
передачи управления по другому адресу. Если флаги SF и OF одинаковы (оба 0
или оба 1), то команда прибавляет к регистру IP значение операнда
(относительное смещение) и выполняет таким образом переход.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: |01111101|--disp--|

JL/JNGE: Переход по "меньше" или "не больше или равно"
--------------------------------------------------------
О п е р а ц и я: Используется после проверки знаковых данных для
передачи управления по другому адресу. Если флаги SF и OF различны, то
команда прибавляет к регистру IP значение операнда (относительное
смещение) и выполняет таким образом переход.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: |01111100|--disp--|

JLE/JNG: Переход по "меньше или равно" или "не больше"
--------------------------------------------------------
О п е р а ц и я: Используется после проверки знаковых данных для
передачи управления по другому адресу. Если флаг ZF равен единице (нулевое
состояние) и флаги SF и OF различны, то команда прибавляет к регистру IP
значение операнда (относительное смещение) и выполняет таким образом
переход.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: |01111110|--disp--|

JMP: Безусловный переход
--------------------------
О п е р а ц и я: Выполняет переход по указанному адресу при любых
условиях. Команда JMP заносит в регистр IP необходимый адрес перехода.
Существует пять типов команды JMP для передачи управления внутри сегмента
или между сегментами. При межсегментном переходе в регистр CS заносится
также новый сегментный адрес.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д (пять форматов):

Прямой переход внутри сегмента:
|11101001|disp-low|disp-high|
Прямой переход внутри сегмента (короткий):
|11101011|--disp--|
Косвенный переход внутри сегмента:
|11111111|mod100r/m|
Косвенный межсегментный переход:
|11111111|mod101r/m|
Прямой межсегментный переход:
|11101010|offset-low|offset-high|seg-low|seg-high|

JNC: Переход если нет переноса
--------------------------------
О п е р а ц и я: Идентична JAE/JNB.

JNE/JNZ: Переход по "не равно" или по "не нуль"
-------------------------------------------------
О п е р а ц и я: Используется после проверки знаковых данных для
передачи управления по другому адресу. Если флаг ZF равен нулю (ненулевое
состояние), то команда прибавляет к регистру IP значение операнда
(относительное смещение) и выполняет таким образом переход.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: |01110101|--disp--|

INO: Переход, если нет переполнения
-------------------------------------
О п е р а ц и я: Используется для передачи управления по
определенному адресу после проверки на отсутствие переполнения. Если флаг
OF равен, нулю (нет переполнения), то команда прибавляет к регистру IP
значение операнда (относительное смещение) и выполняет таким образом
переход. См. также команду JO.


Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: |01110001|--disp--|

JNP/JPO: Переход, если нет паритета или паритет нечетный
----------------------------------------------------------
О п е р а ц и я: Приводит к передаче управления по определенному
адресу, если в результате операции обнаружено отсутствие паритета или
паритет нечетный. Нечетный паритет в данном случае означает, что в
результате операции в . младших восьми битах получено нечетное число
битов. Если флаг PF равен нулю (нечетный паритет), то команда прибавляет к
регистру IP значение операнда (относительное смещение) и выполняет таким
образом переход. См. также команду JP/JPE.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: |01111011|--disp--|

JHS: Переход, если нет знака
------------------------------
О п е р а ц и я: Приводит к передаче управления по определенному
адресу, если в результате операции получен положительный знак. Если флаг
SF равен нулю (положительное), то команда JNS прибавляет к регистру IP
значение операнда (относительное смещение) и выполняет таким образом
переход. См. также команду JS.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: |01111001|--disp--|

JO: Переход по переполнению
-----------------------------
О п е р а ц и я: Приводит к передаче управления по определенному
адресу, если в результате операции получено состояние переполнения. Если
флаг OF равен единице (переполнение), то команда JO прибавляет к регистру
IP значение операнда (относительное смещение) и выполняет таким образом
переход. См. также команду JNO.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: |01110000|--disp--|

JP/JPE: Переход, если есть паритет или паритет четный
-------------------------------------------------------
О п е р а ц и я: Приводит к передаче управления по определенному
адресу, если в результате операции обнаружен четный паритет. Четный
паритет в данном случае означает, что в результате операции в младших
восьми битах получено четное число битов. Если флаг PF равен единице
(четный паритет), то команда прибавляет к регистру IP значение операнда
(относительное смещение) и выполняет таким образом переход. См. также
команду JNP/JPO.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: |01111010|--disp--|

JS: Переход по знаку
----------------------
О п е р а ц и я: Передает управления по определенному адресу, если в
результате операции получен отрицательный знак. Если флаг SF равен единице
(отрицательно), то команда JS прибавляет к регистру IP значение операнда
(относительное смещение) и выполняет таким образом переход. См. также
команду JNS.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: |01111000|--disp--|

LAHF: Загрузка флагов в регистр АН
------------------------------------
О п е р а ц и я: Загружает значение флагового регистра в регистр АН.
Данная команда обеспечивает совместимость с процессором 8080. См. также
команду SAHF. Команда LAHF заносит правый байт флагового регистра в
регистр АН в следующем виде:

SZ * A * P * C (* обозначает неиспользуемые биты)

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: 10011111 (без операндов)

LDS: Загрузка регистра сегмента данных
----------------------------------------
О п е р а ц и я: Инициализирует начальный адрес сегмента данных и
адрес смещения к переменной для обеспечения доступа к данной переменной.
Команда LDS загружает в необходимые регистры четыре байта из области
памяти, содержащей относительный адрес и сегментный адрес. Сегментный
адрес помещается в регистр DS, а относительный адрес - в любой из общих
или индексных регистров или в регистровый указатель. Следующая команда
загружает относительный адрес в регистр DI:

LDS DI,адрес_памяти

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: |11000101|modregr/m|

LES: Загрузка регистра дополнительного сегмента
-------------------------------------------------
О п е р а ц и я: Инициализирует начальный адрес дополнительного
сегмента и адрес смещения к переменной для .обеспечения доступа к данной
переменной. См. также команду LDS.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: |11000100|modregr/m|

LOCK: Блокировка шины доступа к данным
----------------------------------------
О п е р а ц и я: Запрещает другим (сопроцессорам одновременно
изменять элементы данных. Команда LOCK представляет собой однобайтовый
префикс, который можно кодировать непосредственно перед любой командой.
Данная операция посылает сигнал в другой процессор, запрещая использование
данных, пока не будет завершена следующая команда.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: 11110000

LODS/LODSB/LODSW: Загрузка однобайтовой или двухбайтовой строки
-----------------------------------------------------------------
О п е р а ц и я: Загружает из памяти один байт в регистр AL или одно
слово в регистр АХ. Несмотря на то, что команда LODS выполняет строковую
операцию, нет смысла использовать ее с префиксом REP. Регистровая пара
DS:SI адресует в памяти байт (для LODSB) или слово (для LODSW), которые
загружаются в регистр AL или АХ соответственно. Если флаг DF равен нулю,
то операция прибавляет 1 (для байта) или 2 (для слова) к регистру SI. Если
флаг DF равен единице, то операция вычитает 1 (для байта) или 2 (для
слова) из регистра SI.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: 1010110w (без операндов).

LOOP: Цикл
------------
О п е р а ц и я: Управляет выполнением группы команд определенное
число раз. До начала цикла в регистр CX должно быть -загружено число
выполняемых циклов. Команда LOOP находится в конце цикла, где она
уменьшает значение в регистре СХ. на единицу. Если значение в регистре CX
не равно нулю, то команда передает управление по адресу, указанному в
операнде (прибавляет к регистру IP значение операнда); в противном случае
управление передается на следующую после LOOP команду (происходит выход из
цикла).

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: у11100010у--disp--у

LOOPE/LOOPZ: Цикл, если равно или нуль
-----------------------------------------
О п е р а ц и я: Управляет выполнением группы команд определенное
число раз или пока установлен флаг ZF (в единичное состояние). Команды
LOOPE/LOOPZ аналогичны команде LOOP, за исключением того, что по этим
командам цикл прекращается либо по нулевому значению в регистре CX, либо
по нулевому значению флага ZF (ненулевое состояние). См. также команды
LOOPNE/LOOPNZ.


Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: |11100001|--disp--|

LOOPNE/LOOPNZ: Цикл, если не равно или не нуль
------------------------------------------------
О п е р а ц и я: Управляет выполнением группы команд определенное
число раз или пока сброшен флаг ZF (в нулевое состояние)., Команды
LOOPNE/LOOPNZ аналогичны команде LOOP за исключением того, что по этим
командам цикл прекращается либо по нулевому значению в регистре CX, либо
по единичному значению флага ZF (нулевое состояние). См. также команды
LOOPE/LOOPZ.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: |11100000|--disp--|

MOV: Пересылка данных
-----------------------
О п е р а ц и я: Пересылает один байт или одно слово между регистрами
или между регистром и памятью, а также передает непосредственное значение
в регистр или в память. Команда MOV не может передавать данные между двумя
адресами памяти (для этой цели служит команда MOVS). Существует семь типов
команды MOV.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д (семь форматов):

Регистр/память в/из регистр:
|100010dw|modregr/m|
Непосредственное значение в регистр/память:
|1100011w|mod000r/m|--data--|data если w=1|
Непосредственное значение в регистр:
|1011wreg|--data--|data если w=1|
Память в регистр AX (AL):
|1010000w|addr-low|addr-high|
Регистр AX (AL) в память:
|1010001w|addr-low|addr-high|
Регистр/память в сегментный регистр:
|10001110|mod0sgr/m| (sg - сегментный регистр)
Сегментный регистр в регистр/память:
|10001100|mod0sgr/m| (sg - сегментный регистр)

MOVS/MOVSB/MOVSW: Пересылка строки байт или строки слов
---------------------------------------------------------
О п е р а ц и я: Пересылает данные между областями памяти. Команды
MOVS(B/W) обычно используются с префиксом REP. Команда MOVSB пересылает
любое число байтов, а команда MOVSW - любое число слов. Перед выполнением
команды регистровая пара DS:SI должна адресовать источник пересылки
("откуда") а регистровая пара ES:DI - получатель пересылки ("куда"). Если
флаг DF равен нулю, то операция пересылает данные слева направо и
увеличивает регистры SI и DI. Если флаг DF равен единице то операция
пересылает данные справа налево и уменьшает регистры SI и DI.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: 1010010w (без операндов).

MUL: Беззнаковое умножение
----------------------------
О п е р а ц и я: Умножает беззнаковое множимое (8 или 16 бит) на
беззнаковый множитель (8 или 16 бит). Левый единичный бит рассматривается
как бит данных, но не как знак минус для отрицательных чисел. Для
8-битового умножения множимое должно находиться в регистре AL, а множитель
возможен в регистре или в памяти, например MUL CL. Произведение получается
в регистре АХ. Для 16-битового умножения множимое должно находиться в
регистре АХ, а множитель возможен в регистре или в памяти, например MUL
ВХ. Произведение получается в регистровой паре DX:AX. См. также команду
IMUL.

Ф л а г и: Команда воздействует на флаги CF и OF (флаги AF, PF, SF и
ZF не определены).

О б ъ е к т н ы й к о д: |1111011w|mod100r/m|

NEG: Изменение знака числа
----------------------------
О п е р а ц и я: Меняет двоичное значение из положительного в
отрицательное и из отрицательного в положительное. Команда NEG вычисляет
двоичное дополнение от указанного операнда: вычитает операнд из нуля и
прибавляет единицу. Операндом может быть байт или слово в регистре или в
памяти. См. также команду NOT. Флаги: Команда воздействует на флаги AF,
CF, OF, PF, SF и ZF.

О б ъ е к т н ы й к о д: |1111011w|mod011r/m|

NOP: Нет операции
-------------------
О п е р а ц и я: Применяется для удаления или вставки машинных кодов
или для задержки выполнения программы. Команда NOP выполняет операцию XCHG
АХ,АХ, которая ничего не меняет.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: 10010000 (без операндов)

NOT: Логическое НЕТ
---------------------
О п е р а ц и я: Меняет нулевые биты на единичные и наоборот.
Операндом может быть байт или слово в регистре или в памяти. См. также
команду NEG.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: |1111011w|mod010r/m|

OR: Логическое ИЛИ
--------------------
О п е р а ц и я: Выполняет поразрядную дизъюнкцию (ИЛИ) над битами
двух операндов. Операндами являются байты или слова в регистрах или в
памяти, второй операнд может иметь непосредственное значение. Команда OR
обрабатывает операнды побитово. Если любой из проверяемых бит равен
единице, то бит в операнде 1 становится равным единице, в противном случае
бит в операнде 1 не изменяется. См. также команды AND и XOR.

Ф л а г и: Команда воздействует на флаги CF, OF, PF, SF и ZF (флаг AF
неопределен).

О б ъ е к т н ы й к о д (три формата):

Регистр/память с регистром:
|000010dw|modregr/m|
Непосредственное с аккумулятором:
|0000110w|--data--|data если w=1|
Непосредственное с регистром/памятью:
|1000000w|mod001r/m|--data--|data если w=1|

OUT: Вывод байта или слова в порт
-----------------------------------
О п е р а ц и я: Передает в выводной порт байт из регистра AL или
слово из регистра АХ. Порт кодируется как фиксированный числовой операнд
(OUT порт#,АХ) или как переменная в регистре DX (OUT DX.AX). Процессоры
80186, 80286 и 80386 имеют, кроме того, команду OUTS (Output String -
вывод строки). См. также команду IN.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д (два формата):

Переменный порт: |1110111w|
Фиксированный порт:|1110011w|--port--|

POP: Извлечение слова из стека
--------------------------------
О п е р а ц и я: Передает слово (помещенное ранее в стек) в указанный
операнд. Регистр SP указывает на текущее слово в вершине стека. Команда
POP извлекает слово из стека и увеличивает значение в регистре SP на 2.
Существует три типа команды POP в зависимости от операнда: общий регистр,
сегментный регистр, слово в памяти. См. также команду PUSH.


Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д (три формата):

Регистр: |01011reg|
Сегментный регистр: |000sg111| (sg-сегм.рег.)
Регистр/память: |10001111|mod000r/m|

POPA: Извлечение из стека всех общих регистров (80188,80186,80286)
--------------------------------------------------------------------
О п е р а ц и я: Извлекает из стека восемь значений в регистры Dl, SI
BP, SP, BX, DX, CX, AX в указанной последовательности и увеличивает
регистр SP на 16. Регистры обычно записываются в стек ранее
соответствующей командой PUSHA.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: 01100001 (без операндов).

POPF: Извлечение флагов из стека
----------------------------------
О п е р а ц и я: Передает биты (помещенные ранее в стек) во флаговый
регистр. См. также команды PUSHF и POP. Регистр SP указывает на текущее
слово в вершине стека. Команда POPF передает биты из этого слова во
флаговый регистр и увеличивает значение в регистре SP на 2. Обычно команда
PUSHF записывает значения флагов в стек, а команда POPF восстанавливает
эти флаги.

Ф л а г и: Команда воздействует на все флаги.

О б ъ е к т н ы й к о д: 10011101 (без операндов).

PUSH: Занесение слова в стек
------------------------------
О п е р а ц и я: Сохраняет значение слова (адрес или элемент данных)
в стеке для последующего использования. Регистр SP указывает на текущее
слово в вершине стека. Команда PUSH уменьшает значение в регистре SP на 2
и передает слово из указанного операнда в новую вершину стека. Существует
три типа команды PUSH в зависимости от операнда: общий регистр, сегментный
регистр или слово в памяти. См. также команды POP и PUSHF.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д (три формата):

Регистр: |01010reg|
Сегментный регистр: |000sg111| (sg-сегм.рег.)
Регистр/память: |11111111|mod110r/m|

PUSHA: Занесение в стек всех общих регистров (80188,80186,80286)
------------------------------------------------------------------
О п е р а ц и я: Записывает в стек восемь значений регистров AX, CX,
DX, BX, SP, BP, SI, DI в указанной последовательности и уменьшает регистр
SP на 16. Обычно команда POPA позже восстановит эти регистры из стека.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: 01100000 (без операндов).

PUSHF: Занесение флагов в стек
--------------------------------
О п е р а ц и я: Сохраняет значения флагов из флагового регистра в
стеке для последующего использования. Регистр SP указывает на текущее
слово в вершине стека. Команда PUSHF уменьшает значение в регистре SP на 2
и передает флаги в новую вершину стека. См. также команды POPF и PUSH.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: 10011100 (без операндов).

RCL и RCR: Циклический сдвиг влево через перенос и
циклический сдвиг вправо через перенос
----------------------------------------------------
О п е р а ц и я: Выполняет циклический сдвиг битов (ротацию) влево
или вправо через флаг CF. Данные операции могут выполняться в байте или в
слове, в регистре или в памяти. Ротация на один бит кодируется в команде
значением 1; ротация более чем на один бит требует указания регистра CL,
который содержит счетчик. Для команды RCL значение флага CF записывается в
бит 0, а. самый левый бит записывается во флаг CF; все другие биты
сдвигаются влево. Для команды RCR значение флага CF записывается в самый
левый бит, а бит 0 записывается во флаг CF; все другие биты сдвигаются
вправо. См. также команды ROL и ROR.


Ф л а г и: Команда воздействует на флаги CF и OF.

О б ъ е к т н ы й к о д: RCL: |110100cw|mod010r/m|
RCR: |110100cw|mod011r/m|
(если с = 0, то сдвиг на 1;
если с = 1, то сдвиг на CL).

REP/REPE/REPZ/REPNE/REPNZ: Повтор строковой операции
------------------------------------------------------
О п е р а ц и я: Повторяет строковую операцию определенное число раз.
Используется в качестве префикса повторения перед строковыми командами
CMPS, MOVS, SCAS, STOS. Счетчик повторений должен быть загружен в регистр
CX до выполнения строковой команды. Операция уменьшает регистр CX на 1 при
каждом выполнении строковой команды. Для префикса REP операция
повторяется, пока содержимое регистра CX не достигнет нуля. Для префикса
REPE/REPZ операция повторяется, пока регистр CX содержит ненулевое
значение и флаг ZF равен 1 (нулевое состояние). Для префикса REPNE/REPNZ
операция повторяется, пока регистр CX содержит ненулевое значение и флаг
ZF равен 0 (ненулевое состояние).

Ф л а г и: Определяются соответствующей строковой командой.

О б ъ е к т н ы й к о д: REP/REPNE: 11110010
REPE: 11110011

RET: Возврат из процедуры
---------------------------
О п е р а ц и я: Возвращает управление из процедуры, вызванной ранее
командой CALL. Команда CALL может передавать управление внутри одного
сегмента или между сегментами. Команда RET заносит слово из вершины стека
в регистр IP и увеличивает значение SP на 2. Для межсегментного возврата
команда RET, кроме того, заносит слово из новой вершины стека в регистр CS
и еще раз увеличивает значение SP на 2. Любой числовой операнд команды
(например, RET 4) прибавляется к указателю стека SP.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д (четыре формата):

Внутри сегмента: |11000011|
Внутри сегмента с операндом: |11000010|data-low|data-high|
Между сегментами: |11001011|
Между сегментами с операндом: |11001010|data-low|data-high|

ROL и ROR: Циклический сдвиг влево и циклический сдвиг вправо
---------------------------------------------------------------
О п е р а ц и я: Выполняет циклический сдвиг битов (ротацию) влево
или вправо. Данные операции могут выполняться в байте или в слове, в
регистре или в памяти. Ротация на один бит кодируется в команде значением
1; ротация более чем на один бит требует указания регистра CL, который
содержит счётчик. Для команды ROL самый левый бит записывается в бит 0;
все другие биты сдвигаются влево. Для команды ROR бит 0 записывается в
самый левый бит; все другие биты сдвигаются вправо. См. также команды RCL
и RCR.

Ф л а г и: Команда воздействует на флаги CF и OF.

О б ъ е к т н ы й к о д: ROL: |110100cw|mod000r/m|
ROR: |110100cw|mod001r/m|
(если с = 0, то сдвиг на 1;
если с = 1, то сдвиг на CL).

SAHF: Установка флагов из регистра АН
---------------------------------------
О п е р а ц и я: Данная команда обеспечивает совместимость с
процессором 8080 для пересылки значений флагов из регистра АН во флаговый
регистр. См. также команду LAHF. Команда SAHF пересылает определенные биты
из регистра АН во флаговый регистр в следующем виде:

SZ * A * P * C (* обозначает неиспользуемые биты)

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: 10011110 (без операндов)

SAL, SAR, SHL и SHR: Сдвиг влево или вправо
---------------------------------------------
О п е р а ц и я: Выполняет сдвиг битов влево или вправо. Данные
операции могут выполняться в байте или в слове, в регистре или в памяти.
Сдвиг на один бит кодируется в команде значением 1; сдвиг более чем на
один бит требует указания регистра CL, который содержит счетчик сдвига.
Команда SAR выполняет арифметический сдвиг, который учитывает знак
сдвигаемого значения. Команды SHL и SHR выполняют логический сдвиг и
рассматривают знаковый бит как обычный бит данных. Команда SAL выполняется
аналогично команде SHL. Команды SAL и SHL сдвигают биты влево определенное
число раз и правый освобождающийся бит заполняют нулевым значением.
Команда SHR сдвигает биты вправо определенное число раз и левый
освобождающийся бит заполняет нулевым значением. Команда SAR сдвигает биты
вправо определенное число раз и левый освобождающийся бит заполняет
значением знакового бита (0 или 1). Во всех случаях значения битов,
выдвигаемых за разрядную сетку, теряются.

Ф л а г и: Команда воздействует на флаги CF, OF, PF, SF и ZF (флаг AF
не определен).

О б ъ е к т н ы й к о д: SAL/SHL: |110100cw|mod100r/m|
SAR: |110100cw|mod111r/m|
SHR: |110100cw|mod101r/m|
(если с = 0, то сдвиг на 1;
если с=1, то сдвиг на CL);

SBB: Вычитание с заемом
-------------------------
О п е р а ц и я: Обычно используется при вычитании многословных
двоичных величин для учета единичного бита переполнения в последующей фазе
операции. Если флаг CF установлен в 1, то команда SBB сначала вычитает 1
из операнда 1. Команда SBB всегда вычитает операнд 2 из операнда 1,
аналогично команде SUB. См. также коман

Список сторінок

Поділитися у соцмережах

☏ Замовлення реклами: +3805044-68-872

© Асоціація електронних бібліотек України

☝ Усі матеріали сайту (зокрема статті, зображення, рекламні оголошення тощо) призначені лише для попереднього ознайомлення. Усі права на публікації, представлені на сайті, належать їхнім законним власникам. Просимо Вас не зберігати копії інформації.