Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции ЭВМ СиС. 2012-2013.doc
Скачиваний:
31
Добавлен:
01.03.2025
Размер:
8 Мб
Скачать
☆

07.11.2012 — Лекция №13

SBB ; AX-BX-CF

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

INC R/m ; увеличить на единицу содержимое регистра

DEC R/m ; минус 1 содержимого регистра

Эти команды не влияют на бит переноса, т.к обычно используются внутри цикла для изменения состояния счетчиков циклов.

MVL R/m; команда умножения содержимого аккумулятора на указанный регистр или ячйку памяти. AL*BL=AX, т.к. при умножении число разрядов результаты удваиваются

AX*BX→DX,AX (32-битный результат)

ст мл

IMVL R/m; команда умножения с учетом знака чисел, знаки выделяются с помощью логической операции исключающее ИЛИ формируется знак результата, происходит умножение целых положительных чисел, затем присваивается знак результату.

DIV R/m; деление. Содержимое аккумулятора AX/R8→AL – частное, AH – остаток, это необходимо для сохранения точности результата (DX,AX)/R16→AX – частное, DX – остаток. DX всегда используется как регистр расширения АХ.

IDIV R/m; для деления чисел со знаком, идентично умножению со знаком.

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

CBW, CWD - знак младшего байта распределяется на слово AX→DX*AX, знак числа расширяется до 32-битного. Конвертировать байт в слово – CBW, CWD – конвертировать слово в двойное слово.

AL=10001111

AX=1111111110001111

DAA ; выполняется над содержимым аккумулятора AL, название команды – десятичная коррекция после сложения упакованных BCD – кодированных чисел.

BCD – кодирование десятичных чисел двоичными числами

25: 2=0010, 5=0101

Эти команды применяются для обработки BCD – кодированных чисел по правилам двоичной арифметики, на одном и том же сумматоре что и двоичные числа. Эта команда проверяет наличие бита CF и AF. Если CF и AF=1, то проверяет перенос или цифра, соответствующая тетраде больше девяти, то к этой тетраде добавляется +6.

Имеется две системы кодирования BCD-чисел: несамодополняющаяся и самодополняющаяся. Несамодополняющаяся – вес разрядов 8-4-2-1, у этой системы есть большой недостаток:

1001

+ 1

1010

0110

10000

Самодополнение 5-2-1-1

В BCD-кодированных числах обрабатывают данные, которые вводятся в десятичном виде без преобразования кодов.

DAS ; десятичная коррекция после вычитания BCD-кодированных чисел. Работая аналогично команде DAA, только вычитает шестерку.

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

0 →30h;

1 →31h;

2 →32h;

3 →33h;

4 →34h;

5 →35h;

6 →36h;

7 →37h;

8 →38h;

9 →39h;

Старшая тетрада всегда равна 3 или 0, младшая определяет BCD-кодированную цифру. Таким образом 1 байт – 1 цифра, зато неупакованный формат легко преобразовать в коды символов и обратно путем добавления тройки или подавления старшей тетрады.

Складывать содержимое:

AL + R →

сим сим, AL – результат, АН – перенос.

AAS ; десятичная коррекция BCD-кодированных чисел после вычитания неупакованных чисел.

AAM ; десятичная коррекция после умножения неупакованных BCD-кодированных чисел, у которых старшая тетрада равна 0.

Эта команда содержимое AL делит на 10, результат деления в АН, остаток в AL. Таким образом результат умножения – неупакованное BCD-кодированное число.

AAD ; выполняется перед операцией деления AH*10+AL→AL. Если необходимо обрабатывать BCD-кодированные числа большей длины, то образуется цикл, и обрабатывается по циклам.

Команды передачи управления бывают двух типов: безусловные и условные. Безусловные выполняются сразу в том месте, где они встречаются в команде, а условные команды предварительно проверяют состояние бита регистра признаков, если условие выполняется, то команда пропускается. Благодаря этим командам осуществляются ветвления и циклы.

JMP, CALL; JMP – передача управления, CALL – вызвать подпрограмму, при выполнении которой содержимое программного счетчика записывается на вершину стека, а адрес, указанный в программе, записывается в программный счетчик. В конце подпрограммы обязательно должна быть команда RET – возврат из подпрограммы. Благодаря CALL можно реализовать отдельные программные модули и отдельно их отлаживать.

Группа условных команд.

JO, JNO – команда проверки бита переполнения OF=1, OF=0 соответственно;

JC, JNC – проверка бита переноса СF=1, СF=0 соответственно;

JS, JNS – SF=1, SF=0 соответственно;

JP, JNP – проверка признака четности PF=1, PF=0 соответственно;

JCXZ адрес – команда передачи управления указанному адресу, если содержимое СХ=0, обычно в СХ организуют счетчик цикла.

LOOP – цикл, эта команда автоматически уменьшает содержимое СХ на 1 и если она не равна 0, то передает управление указанному адресу обычно в начале цикла.