ВУЗ:
Составители:
Рубрика:
+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
Страницы
- « первая
- ‹ предыдущая
- …
- 40
- 41
- 42
- 43
- 44
- …
- следующая ›
- последняя »