Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КОНСПЕКТ ЛЕКЦИЙ ПО АССЕМБЛЕРУ.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
471.55 Кб
Скачать

Режимы адресации

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

Способ определения адреса перехода или адреса операнда называется режимом адресации.

В предыдущем пункте мы рассмотрели три способа адресации операндов, которые необходимы для изложения нижеследующего материала. Другие способы адресации будем рассматривать далее по мере необходимости изложения материала.

Команда сложения add

Команды сложения и вычитания являются базовыми при построении ЭВМ, и потому в алгоритме их выполнения заложено формирование всех признаков результата (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 пк = -4

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

Рассмотрим порядок формирования флагов результата. Флаг AF не рассматриваем, т.к. он определяется верно только в командах двоично-десятичной арифметики, а мы изучаем команды для целых чисел. При сложении чисел нет переноса из знакового разряда, поэтому CF=0. В поле результата 1.1111100b ДК четное количество единичных бит (6), поэтому PF=1. Результат не равен 0, поэтому ZF=0. Результат отрицательный SF=1. Флаг OF=0, т.к. переполнения при сложении не было. В нашем примере складывались числа с разными знаками, что исключает возможность переполнения.

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

Ниже рассмотрен пример сложения чисел 100+100=200. Диапазон для чисел со знаком в формате байта (-128..127), результат выходит за пределы диапазона. Слагаемые имели знак '+', а в знаковом разряде результата 1

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

Диапазон для чисел без знака в формате байта (0..255), результат выходит за пределы диапазона.

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

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

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

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

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

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