Intel 8080 (пример 2)

При выполнении операции выделения в программе для МП Intel 8080 используется возможность применения косвенной регистровой адресации, которая в программе на языке ассемблера указывается кодом регистра М. Программист может использовать регистр М точно так же, как и все остальные; однако фактически МП Intel 8080 выбирает данные из ячеек памяти, которые адресуются регистрами Н и L. Регистры Н и L используются в качестве указателей ячеек памяти или данных, поскольку они содержат не сами данные, а их адреса. Изменяя содержимое регистров Н и L, изменяем адресный указатель. Например, выполнение команды INX -Н приводит к тому, что указатель будет ссылаться на ячейку памяти с большим адресом. Разумеется* перед использованием регистра для косвенной адресации содержимое регистров Н и L должно быть установлено с помощью некоторой команды (чаще всего команды LX1). Программа выделения имеет следующий вид: » > "

Intel 8080 пример 2

Выделение шестнадцатиричной цифры

LXI Н, 40Н

MOV А, М ; Загрузить данные

ANI 00001111В ; Обнулить старшие 4 бита

INX Н

MOV М, А ; Сохранить результат

HLT

В этом примере программа также состоит из пяти команд в отличие от программы из трех команд для МП Motorola 6800. Косвенная адресация с помощью регистров оказывается эффективной только при обработке массивов данных.

Рассмотрим выполнение программы по шагам.

1. LXI Н,40Н

По этой команде в регистровую пару (в данном случае Н и L) посылается содержимое указанных во втором операнде двух ячеек памяти программ. Содержимое ячейки, адрес которой следует сразу за кодом операции, посылается в регистр L, а содержимое следующей ячейки—б регистр Н. Команда занимает три ячейки памяти и выполняется за 5 мкс. Заметим, что по $той команде в регистровую пару Н и L посылается ! 6-битный адрес 0040. , >

2. MOV А, М

По этой команде в аккумулятор посылается содержимое ячейки памяти, адрес которой указан в Н и L. Команда занимает одну ячейку памяти и выполняется за 3,5 мкс.

3. ANI 0000011111В

По этой команде выполняется логическая операция И над двоичным числом 00001111 и содержимым аккумулятора. Команда занимает две ячейки памяти и выполняется за 3,5 мкс.

4. INX Н

По этой команде 16-битный адрес, размещенный в регистровой паре Н и L, увеличивается на единицу. Команда занимает одну ячейку памяти и выполняется за 2,5 мкс.

5. MOV М,А

Команда выполняет действия, обратные действию команды MOV А,М.

Результат ассемблирования данной программы показан на рис. 5.7; трасса выполнения программы представлена на рис. 5.8. Были заданы те же начальные условия, что и в программе для МП Motorola 6800: (40) = 87, (PC) — 0. Следует обратить внимание на то, как работают команды, использующие косвенную адресацию с помощью регистров (MOV, А, М и MOV М,А). Эти команды целесообразно использовать вместо LDA и STA, если данные хранятся в смежных ячейкахпа-мяти, так как в результате уменьшаются затраты времени и памяти.
 

Следует также обратить внимание на то, что только команда ANI изменяет, состояние признаков; команда ШХ на состояние признаков влияyния не оказывает. Данная программа заметно короче программы, приведенной на рис. 5.3, в Которой не используется косвенная адресация с помощью регистров.

Пример 3. Разделение слова на части.

Пример 2 можно усложнить, потребовав, чтобы программа выделяла из исходного слова две шестнадцатиричные цифры и помещала их в отдельные ячейки памяти. Новая программа^ как и рацьше, посылает четыре младших разряда в ячейку, памяти .4,1 * а четыре старших разряда — в ячейку памяти 42. Программа помещает четыре старших бита исходного слова в младшие разряды ячейки 42, чтобы затем их можно было обработать как обычное число. Операция разделения слова на части .выполняется в следующей последовательности.

Шаг /. Послать в аккумулятор содержимое ячейки 401а.

Шаг 2. Выполнить логическую операцию И над содержимым аккумулятора и двоичной константой 00001111.

Шаг 3. Послать содержимое аккумулятора в ячейку. 411д.

Шаг 4. Послать в аккумулятор содержимое ячейки 401в.

Шаг 5. Логически сдвинуть содержимое аккумулятора на 4 бита вправо.

Шаг 6. Послать содержимое аккумулятора в. ячейку 4216.

Операция ЛОГИЧЕСКИЙ СДВИГ ВПРАВО обнуляет старшие 4 бита аккумулятора, перемещая их прежнее содержимое в младшие 4 бита.

Шестнадцатиричный адрес ячейки памяти

Мнемонический код операции

Шестнадцатиричный код содержимого памяти

00

LXI Н, 40Н

21

01

40

02

 

00

03

MOV А, М

04

ANI 00001111В

Е6

05

 

0F

06

INX Н

23

07

MOV М, А

77

08

HLT

76

Рис. 5.7 Результат ассемблирования программы выделения шестйадцатиричной

цифры для МП Intel 8080
 



Доступная цена на отвал для спецтехники.