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

UptoLike

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

+<CF> от предыдущего сложения
9
Итого: 95.
Рассмотрим пример сложения многобайтовых чисел.
Пример 1 Пусть 1-ое слагаемое находится в
M
1501
,M
1500
(двухбайтовое число), а второе слагаемое в BX. Сумму
поместить в M
1601
,M
1600.
Ответ: Если складывать по байтам, то это будет выглядеть так:
ADD BL,[1500]; Сложить младшие байты чисел
MOV [1600],BL; и переслать младшую часть суммы в M
1600
.
ADC BH,[1501]; Сложить старшие байты слагаемых и + возмож-
MOV [1601],BH; ный перенос от предыдущей суммы и M
1601.
6.3 Операция вычитания
Эта команда выполняется чуть сложнее, чем команда сложения.
В отличие от сложения, операция вычитания простыми логическими
средствами не реализуется. Операция вычитания производится
следующим образом:
а) вычитаемое преобразуется в дополнительный код;
б) дополнительный код вычитаемого складывается с
уменьшаемым.
Само собой разумеется, что все это выполняется автоматически.
В отличие от сложения, перенос в этом случае направляется в CF через
инвертор. Посмотрим на абстрактных примерах, что из этого выходит.
Пусть A —уменьшаемое, B —вычитаемое.
Случай 1: A>B. Пусть A=1000, B=0101 (двоичные числа).
Преобразуем B в дополнительный код (без знака):
0101
инверсия
1010
+ 0001
B
доп
=1011дополнительный код B.
Теперь складываем: A+B
доп
:
1000
+1011
1 0011
Перенос = 1. Но этот перенос при вычитании инвертируется, и только
потом попадает в CF. Значит, в этом случае CF=0. Еще раз: 1000
2
-
0101
2
= 0011
2
и CF=0. (Кстати, результат получили в прямом коде).
Случай 2: A<B. Пусть A=0101, а B=1000. По той же технологии
преобразуем B:
41
1000
инверсия
0111
      + от предыдущего сложения
        9
Итого: 95.
      Рассмотрим пример сложения многобайтовых чисел.
      Пример      1—     Пусть    1-ое    слагаемое     находится     в
M1501,M1500 (двухбайтовое число), а второе слагаемое — в BX. Сумму
поместить в M1601,M1600.
      Ответ: Если складывать по байтам, то это будет выглядеть так:
      ADD BL,[1500]; Сложить младшие байты чисел
      MOV [1600],BL; и переслать младшую часть суммы в M1600.
      ADC BH,[1501]; Сложить старшие байты слагаемых и + возмож-
      MOV [1601],BH; ный перенос от предыдущей суммы и         M1601.

6.3 Операция вычитания
     Эта команда выполняется чуть сложнее, чем команда сложения.
В отличие от сложения, операция вычитания простыми логическими
средствами не реализуется. Операция вычитания производится
следующим образом:
     а) вычитаемое преобразуется в дополнительный код;
     б) дополнительный код вычитаемого складывается с
уменьшаемым.
     Само собой разумеется, что все это выполняется автоматически.
В отличие от сложения, перенос в этом случае направляется в CF через
инвертор. Посмотрим на абстрактных примерах, что из этого выходит.
     Пусть A —уменьшаемое, B —вычитаемое.
     Случай 1: A>B. Пусть A=1000, B=0101 (двоичные числа).
Преобразуем B в дополнительный код (без знака):
          0101
          инверсия
          1010
      + 0001
    Bдоп=1011 — дополнительный код B.
Теперь складываем: A+Bдоп:
         1000
       +1011
      1 0011
Перенос = 1. Но этот перенос при вычитании инвертируется, и только
потом попадает в CF. Значит, в этом случае CF=0. Еще раз: 10002-
01012= 00112 и CF=0. (Кстати, результат получили в прямом коде).
     Случай 2: A