Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Команды обработки данных




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

Рассмотрим назначение команд арифметических операций. При выполнении арифметических команд вырабатываются признаки A,C,D,P,S,Z и 0.

Команда ADD R1/[M],R2/[M] суммирует два операнда, которые могут быть байтом или 16-разрядным словом, но один из них обязательно должен выбираться из регистра. Результат операции записывается на место R1/[M].

Команда сложения ADD R/[M],data с непосредственной адресацией используется для сложения операнда (8 или 16 разрядов), указанного в команде, с содержимым регистра (памяти). Результат записывается на место R/[M].

Команда ADD Aс,data аналогична команде ADI data для МП КР580.

Для операций с 8-разрядными операндами в качестве Ас используется регистр (аккумулятор) AL, а для 16-разрядного операнда - АХ.

Команда ADC предназначена для суммирования операндов с учетом признака переноса С. Команда имеет те же форматы и модификации, что и команда ADD.

Команды вычитания SUB и SBB имеют те же форматы и модификации, что и команды ADD и ADC. При выполнении команд операнд - источник вычитается из операнда - приемника. Результат записывается на место приемника. В отличие от команды ADD признак переноса С инвертируется.

Команды инкремента INR и декремента DEC служат для увеличения или уменьшения на единицу содержимого регистра или памяти. При выполнении команд вырабатываются признаки А, 0, Р, S, Z. Признак С не вырабатывается. Команды имеют по две модификации. Одна из них INC R или (DEC R) аналогична командам INC R, (DEC R) для МП КР580, а другие - INC [M], (DEC [M]) используется для инкремента,(декремента) содержимого памяти.

Команды коррекции DAA, DAS, AAA и AAS выполняют операции над содержимым регистра AL. При выполнении команд вырабатываются признаки А, С, Р, S, Z.

Команды десятичной коррекции используются для коррекции результата после выполнения операции сложения (команда DAA) или вычитания (команда DAS) операндов, представленных в упакованном двоично-десятичном коде.

Команды коррекции кодов обмена используются для коррекции результата после выполнения операции сложения (команда ААА) или вычитания (команда AAS) операндов, представленных в коде ASC II (неупакованном двоично-десятичном коде).

Команда NEG служит для перевода двоичного кода числа в дополнительный код.

Команда сравнения СМР аналогична команде SUB. Отличие состоит в том, что операнды, над которыми производится операция сравнения, сохраняются.

Команда умножения MUL R/[M] используется для умножения 8- или 16-разрядного операнда (без знака), содержащегося в регистре AL или АХ, на операнд (без знака), содержащийся в регистре или памяти. Если в умножении участвуют 8-разрядные операнды, то младший байт произведения записывается в регистр AL, а старший байт произведения - в АН.

При умножении 16-разрядных операндов 16 младших разрядов произведения записываются в регистр АХ, а 16 старших разрядов - в DX. Если старшая половина результата содержит нули, то признаки 0 и С устанавливаются в 0, иначе - в единицу.

Команда умножения с учетом знака IMUL выполняется аналогично команде MUL.

Команда ААМ используется для коррекции результата умножения двух операндов, представленных в неупакованном двоично-десятичном коде.

Команда DIV R/[M] выполняет деление содержимого аккумулятора и его расширителя (AL и AH, АХ и DХ) на содержимое источника (регистра или памяти).

Операнды должны быть представлены как двоичные числа без знака.

При делении 8-разрядных операндов 8-разрядное частное пересылается в регистр AL, а 8-разрядный остаток - в регистр АН. Еcли частное больше FFH (деление на ноль), то генерируется сигнал прерывания типа 0 и частное и остаток не определены. При делении 16-разрядных операндов частное хранится в регистре АХ, а остаток - в регистре DX.

Если частное больше FFFFH (деление на ноль), то формируется сигнал прерывания типа 0. При выполнении команды признаки А,С,0,Р,Z не определены.

Команда IDIV используется для деления операндов со знаком.

Команда AAD модифицирует содержимое регистра AL до выполнения команды таким образом, чтобы после деления на неупакованный двоично-десятичный операнд был получен результат, представленный в неупакованном двоично-десятичном коде.

Команда CBW преобразует байт в слово путем повторения в регистре АН старшего бита регистра AL. Команда не меняет содержимое регистра признаков.

Команда CWD преобразует 16-разрядное слово в двойное слово. При выполнении команды старший бит содержимого регистра АХ повторяется в регистре DX.

К командам логических операций относятся команды AND, XOR, NOT и TEST (проверка). При выполнении команд (кроме команды NOT) вырабатываются признаки S, Z, P, а признаки 0 и С всегда установлены в 0.

Признак А не определен.

Команды AND, OR, XOR имеют одинаковый формат и одинаковые модификации и выполняют поразрядно соответствующую логическую операцию. Результат записывается на место приемника. Команда NOT инвертирует разряды байта или 16-разрядного слова.

Кроме перечисленных команд к логическим относятся команды арифметического (логического) и циклического сдвига.

К командам арифметического (логического) сдвига относятся: SHL, SAR, SHR. При выполнении команд признаки P, S, Z вырабатываются как обычно. Признак С всегда равен значению последнего бита сдвигаемого операнда. При сдвиге на один разряд признак 0 устанавливается в ноль. Признак 0 при числе сдвигов >1 не определен.

Команда SHL (SAL) производит сдвиг влево. Число сдвигов содержится в регистре CL. Значением определенного разряда (поле кода операции) может быть задано число сдвигов. Если поле кода операции команды содержит ноль, то число сдвигов равно единице, иначе число сдвигов определяется содержимым регистра СL. Если содержимое регистра CL равно нулю, то выполняется сдвиг вправо.

Команда SHR производит сдвиг вправо. Команда по выполнению (за исключением направления сдвига) похожа на команду SHL.

Команда SAR осуществляет арифметический сдвиг вправо с сохранением значения старшего бита сдвигаемого операнда.

К командам циклического сдвига относятся команды RCL, RCR, ROL, ROR (аналоги команд сдвига МП КР580). Число сдвигов во всех командах циклического сдвига указывается в регистре CL.

Команды управления

Команда CALL служит для вызова подпрограмм. Имеется два типа команды CALL: для межсегментных вызовов подпрограмм с прямой и косвенной адресацией и для внутрисегментных вызовов подпрограмм с прямой и косвенной адресацией.

При выполнении команды CALL addr для межсегментного вызова подпрограммы с прямой адресацией содержимое программного счетчика РС увеличивается на 5 (относительно первого адреса первого байта команды) и заносится в стек. Содержимое регистра SP уменьшается на 4. Новое значение РС определяется первыми двумя байтами адреса, содержащегося в команде CALL, а новое значение регистра CS - вторыми двумя байтами адреса, содержащегося в команде САLL.

При выполнении команды CALL [M] для межсегментного вызова подпрограммы с косвенной адресацией адрес подпрограммы выбирается из четырех ячеек памяти, причем адрес первой ячейки указан в [M].

Для команд (CALL disp и CALL R/[M]) внутрисегментных вызовов подпрограмм содержимое счетчика РС запоминается в стеке. Содержимое регистра SP уменьшается на 2. Новое содержимое программного счетчика РС определяется значением disp для прямой адресации или содержимым регистра R или памяти [M] для косвенной адресации. Новое содержимое сегментного регистра CS определяется суммированием старых значений счетчика РС и регистра CS.

Каждому типу команды CALL для возврата из подпрограммы соответствует своя команда RET. Для внутрисегментных возвращений из подпрограмм используются команды RET (C3H) и RET (C2H) disp, для межсегментных возвращений из подпрограмм - RET (CBH) и RET (CAH) disp. Смещение disp в командах RET прибавляется к содержимому указателя стека SP.

Команда JMP безусловного перехода в отличие от команды CALL не записывает какую-либо информацию в стек. Имеется пять типов команд:

JMP disp - внутрисегментный переход с прямой адресацией и 16-разрядным смещением disp;

JMP disp - внутрисегментный переход с прямой адресацией и 8-разрядным смещением disp;

JMP R/[M] - внутрисегментный переход с косвенной адресацией;

JMP addr - межсегментный переход с прямой адресацией;

JMP [M] - межсегментный переход с косвенной адресацией.

Команды условного перехода приведены в табл. 2.6

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...