КОМАНДА СЛОЖЕНИЯ С ПЕРЕНОСОМ ADC


КОМАНДА СЛОЖЕНИЯ ADD

НЕПОСРЕДСТВЕННАЯ АДРЕСАЦИЯ

ПРЯМАЯ АДРЕСАЦИЯ

 

Наиболее простой способ адресации – прямой, который реализован в большинстве известных процессоров. Однако, увеличение поля прямого адреса делает команды слишком длинными и не эффективными. Для XT прямой адрес равен 20 бит, а для AT он значительно больше. Разработанные в настоящее время режимы адресации направлены на следующие цели:

- определение адреса наименьшим числом бит;

- вычисление адреса команд относительно базы, а в командах перехода относительно текущей команды;

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

 

 

 

Это операнд, записанный в виде константы, при трансляции программы этот операнд записывается в поле команды длиной в слово или байт, т. к. для обращения к операнду не требуется цикла обращения к памяти, а он выбирается непосредственно из поля команды – отсюда непосредственная адресация.

 

ADD AL,5

┌───────┬──┬─────┐

ADD AL,5 │ KOП │b │ 05 │

└───────┴──┴─────┘

 

A DW 0

ADD A,5

┌───────┬─┬─────────┬────────┬───────┐

│ KOП │w│post byte│adress A│ 00 05│

└───────┴─┴─────────┴───┴────┴───┴───┘

 

 

 

Команды сложения и вычитания являются базовыми при построении ЭВМ, и потому в алгоритме их выполнения заложено формирование всех признаков результата (6 признаков).

 

OF DF IF SF ZF AF PF CF

┌──┬──┬──┬──┬──┬──┬──┬──┐

ADD ОР1,ОР2 Сложение чисел со знаком │ F│ │ │ F│ F│ F│ F│ F│

└──┴──┴──┴──┴──┴──┴──┴──┘

ОР1:=ОР1+ОР2

ADD mem/reg,mem/reg

 

ADD AL,BL; AL= 35 = 23h = 0.0100011b +

; BL= -39 = -27h = 1.1011001b

----------

OF SF ZF AF PF CF 1.1111100b дк

┌──┬──┬──┬──┬──┬──┐ ----------

│ 0│ 1│ 0│ *│ 1│ 0│ 1.0000100b пк = -4h

└──┴──┴──┴──┴──┴──┘

AL= 100 = 64h = 0.1100100b +

BL= 100 = 64h = 0.1100100b

----------

1.1001000b перенос в знак =1

перенос из знака =0

OF SF ZF AF PF CF Флаги формируются в соответствии формирования

┌──┬──┬──┬──┬──┬──┐ чисел со знаком.

│ 1│ 1│ 0│ *│ 0│ 0│

└──┴──┴──┴──┴──┴──┘

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

Сложение чисел без знака:

AL=150=96h=10010110b +

BL=150=96h=10010110b

---------------

1.00101100b = 44<>300

Флаги формируются по тому же принципу, а анализируется результат по другому.

OF SF ZF AF PF CF Т. к. программист предполагал, что склады-

┌──┬──┬──┬──┬──┬──┐ вает числа без знака, судить о переполне-

│ 1│ 0│ 0│ *│ 0│ 1│ нии надо по значению флага CF. В данном

└──┴──┴──┴──┴──┴──┘ случае CF = 1, произошло переполнение и

результат неверный.

 

 

 

ADC ОР1,ОР2

OP1 OP2 OP1 := OP1 + OP2 + CF

| |

v v

┌──┐ ┌───┴──┐ ┌─┴────┐

│СF│<- └┐ └─┘ ┌┘

└──┘ └┐ СУММАТОР ┌┘<────┐

│ └─────┬─────┘ │

│ │ │

└─────────────┼────────────┘

V

 

При этом новые значения флагов формируются точно также. Команда используется для сложения полей, превышающих слово, например двойное слово.

┌─────┬─────┐

+ └──┴──┴──┴──┘

┌─────┬─────┐

└──┴──┴──┴──┘

-----------------------------

┌─────┬─────┐ ┌─────┬─────┐

└──┴──┴──┴──┘ └──┴──┴──┴──┘

│ ┌──┐ │

└─┤СF├─┘

└──┘

A DD ?

B DD ?

C DD ?

MOV AX,word ptr A ; младшее слово

ADD AX,word ptr B ; 1-е сложение

MOV word ptr C,AX ; выполнено сложение младших слов

; полей

MOV AX,word ptr A+2; старшее слово

ADC AX,word ptr B+2; 2-е сложение

MOV word ptr C+2,AX; результат сложения в С

Этот пример показывает, как в 16-разрядной машине производится сложение операндов LONGINT.