Архитектура микропроцессорной системы. Состав машинных команд и основы программирования микропроцессорной системы на ассемблере. Булатов В.Н. - 42 стр.

UptoLike

Составители: 

+0001
B
доп
=1000дополнительный код B.
Складываем: A+B
доп
:
0101
+1000
0 1101
Перенос=0
Переполнения нет, но флажок CF=1, так как он устанавливается
переполнением через инвертор.
А теперь подставим значение CF=1 в качестве старшего бита
уменьшаемого и вычтем вычитаемое B:
<CF>
1 0101
— 1000
1101
Получили тот же результат, что и выше. Вывод: при вычитании
флаг CF имеет смысл заема! Но заем предполагает наличие старшей
части числа. А если ее нет? Тогда необходимо вспомнить, что все числа
в АЛУ представлены в дополнительном коде, и если после вычитания
CF=1 , а занимать не у «кого», то полученный результат есть
отрицательное число в дополнительном коде. Чтобы получить результат
в истинном виде, необходимо полученное отрицательное число
(беззнаковое) перевести в прямой код:
CF=1 1101
инверсия
CF=1 0010
+0001 инкремент, чтобы «не трогать» <CF>
CF=1 0011
Получили: 5
10
—8
10
= -3
10
, где <CF> имеет смысл знака.
Ассемблер команды вычитания (пример):
SUB AX,BX ; AX:=<AX>-<BX>; заем (если есть) — в CF.
6.4 Команда вычитания с учетом заема
Эта команда вычитания как раз и учитывает возможный заем от
предыдущего вычитания. Рассмотрим следующий пример.
Пример 2 — Пусть в ячейках памяти M
1001
и M
1000
находится
уменьшаемое, а в DX-вычитаемое. Разность отправить в DX.
Ответ: Составляем программу с демонстрацией использования
процедуры заема на ассемблере:
SUB [1000],DL ; M
1000
:=<M
1000
>-<DL>, заем (если есть) — в CF,
MOV DL,[1000]
; и младшую часть разности отправить в DL.
SBB [1001],DH ; M
1001
:=<M
1001
>-<DН>-заем (если он есть),
42
          +0001
      Bдоп=1000 —дополнительный код B.
Складываем: A+Bдоп:
           0101
         +1000
        0 1101
        Перенос=0
     Переполнения нет, но флажок CF=1, так как он устанавливается
переполнением через инвертор.
     А теперь подставим значение CF=1 в качестве старшего бита
уменьшаемого и вычтем вычитаемое B:
       
         1 0101
         — 1000
            1101
     Получили тот же результат, что и выше. Вывод: при вычитании
флаг CF имеет смысл заема! Но заем предполагает наличие старшей
части числа. А если ее нет? Тогда необходимо вспомнить, что все числа
в АЛУ представлены в дополнительном коде, и если после вычитания
CF=1 , а занимать не у «кого», то полученный результат есть
отрицательное число в дополнительном коде. Чтобы получить результат
в истинном виде, необходимо полученное отрицательное число
(беззнаковое) перевести в прямой код:

      CF=1        1101
                инверсия
      CF=1        0010
                 +0001 — инкремент, чтобы «не трогать» 
      CF=1        0011
Получили: 510 —810 = -310, где  имеет смысл знака.
    Ассемблер команды вычитания (пример):
SUB AX,BX ; AX:=-; заем (если есть) — в CF.

6.4 Команда вычитания с учетом заема
     Эта команда вычитания как раз и учитывает возможный заем от
предыдущего вычитания. Рассмотрим следующий пример.
     Пример 2 — Пусть в ячейках памяти M1001 и M1000 находится
уменьшаемое, а в DX-вычитаемое. Разность отправить в DX.
     Ответ: Составляем программу с демонстрацией использования
процедуры заема на ассемблере:
SUB [1000],DL ; M1000:=-
, заем (если есть) — в CF, MOV DL,[1000] ; и младшую часть разности отправить в DL. SBB [1001],DH ; M1001:=--заем (если он есть), 42