Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка - Лабораторные работы №1-4.DOC
Скачиваний:
28
Добавлен:
02.05.2014
Размер:
3.19 Mб
Скачать

2.2 Арифметические команды

Эти команды предназначены для выполнения операции сложения, сложения с переносом, вычитания, вычитания с заёмом, инкрементирования, декрементирования, десятичной коррекции аккумулятора. В большинстве случаев эти команды изменяют содержимое разрядов регистра флажков F, который содержит информацию следующего вида :

S

Z

0

AC

0

P

1

b7 b6 b5 b4 b3 b2 b1 b0 ,

где разряд S - индикатор знака , Z - нуля ,

AC - вспомогательного переноса ,

P - четности , CУ - переноса .

Состояние регистра F используется последующими командами для выполнения и организации управления вычислительным процессом . Рассмотрим команды этой группы:

ADD Ri осуществляет сложение в прямых кодах содержимого аккумулятора и операнда , находящегося в РОН или ячейке памяти .

ADD B код- 80(16), выполняет операцию А=А+В , результат сложения остается в А .

ADD M код- 86(16), складывает содержимое аккумулятора с операндом ячейки памяти по адресу , указанному в регистровой паре H,L .

ADI V êîä Ñ6(16) выполняет сложение в АЛУ аккумулятора с операндом в команде, результат сложения заносит в А . В данной команде в первом байте располагается КОП, во втором - операнд V .

ADC Ri складывает содержимое А с РОН или ячейкой памяти и в младший разряд сумматора АЛУ прибавляет содержимое младшего разряда регистра F.

ADC M код- 8Е(16) складывает содержимое аккумулятора с ячейкой памяти с адресом , указанным в регистровой паре H,L, и к результату сложения прибавляет СУ. Результат операции передается в А .

ACI V осуществляет сложение аналогично ADI V, кроме того, к младшему разряду сумматора АЛУ прибавляет значение СУ регистра F(сложение с переносом).

DAD RP выполняет двухбайтное сложение регистровой пары RP с содержимым регистровой пары H,L .При наличии переноса Рст из сумматора -СУ=1 ,если его нет , то СУ=0 . Результат заносится в H,L .

DAD B код- 09(16) выполняет операцию HL= BC+HL; СУ=Рст.

SUB Ri позволяет непосредственно вычесть из аккумулятора содержимое РОН или ячейки памяти (A=A-Ri ) и результат вычитания занести в А (сложить в дополнительном коде А=А+ [()+1] без учета знака вычитаемого) эта команда не выявляет переполнения и имеет другие разновидности :

SUI V - вычитание непосредственно из А операнда.

SBB Ri - вычитание с заемом А=А+ [()+1] + [- СУ]д.

SBBV - вычитание непосредственно операнда с заемом А = А - V - СУ.

SBB M осуществляет вычитание A=A-М-СУ посредством сложения содержимого аккумулятора с инвертированным значением операнда, содержащимся в ячейке М, при СУ=1 и А=А++1 при СУ=0. Рассмотрим эту операцию подробнее :

Пусть необходимо вычесть с заёмом из А содержимое ячейки 8204(16).

Пусть А=F8(16), М=30(16), заема не было ; СУ=0.

Тогда в АЛУ под действием команды произойдет сложение :

F 8 (16) 3 0 (16)

1111 1000 A = [ - 8(10)] M= 0011 0000 = 48(10)

+ 1101 0000 [ M]= [-48(10)]

Pст= 1 1100 1000

С 8 (16) А = [-56(10)]

9 2

После сложения F = 92(16) , т.е. 1001 0010

Из состояния разрядов регистра флажков видно , что S =1 ,т.е. в результате сложения получено отрицательное число ( разряд 7 результата =1); Z =0(результат не равен 0 ); АС=0 (при сложении младшей тетрады нет переноса ); Р=0 (в результате сложения получилось число с нечетным числом "1" ); СУ=0 (не нужен заём при вычитании из старшего байта; при вычитании СУ=, при выполнении сложения типа ADD СУ=Рст - перенос в старший байт при сложении с повышенной точностью). Если перед вычитанием СУ=1, то, выполняя команду SBB M, получим А=С7, F=92(16). Заметим, что до выполнения команды в H занесен код 82(16), в L- 04(16),а в ячейку 8204(16)записан операнд 30(16).

INR Ri, INR RP являются разновидностями команды ADD, осуществляют прибавление "1" к РОН, ячейке памяти или содержимому регистровой пары .

DCR RI , DCX RP декрементируют содержимое Ri или RP .

DAA корректирует результат сложения, хранящийся в А в двоичном коде, в двоичнодесятичный код <8421> :

при АС =1 или b3b2b1b0(2) >9 прибавляет 6 к младшей тетраде байта,

при СУ=1 или b7b6b5b4(2) >9 прибавляет 6 к старшей тетраде .

Команда DAA после ADD позволяет выполнить сложение в коде D1 .