Чтение онлайн

на главную

Жанры

Искусство схемотехники. Том 2 (Изд.4-е)
Шрифт:

MOV count,CX

ADD small,02H

AND AX,007FH

имеют аргументы типов m, r, m, imm, r, imm соответственно. Первая копирует содержимое регистра СХ в ячейку памяти, именуемую count; вторая прибавляет 2 к содержимому другой ячейки памяти, именуемой small; третья обнуляет 9 старших разрядов 16-разрядного регистра АХ, сохраняя при этом 7 младших разрядов неизменными (так называемая операция маскирования). Отметим принятое фирмой Intel соглашение о порядке аргументов: первый аргумент замещается вторым или модифицируется на основе значения второго аргумента. (В следующей главе мы увидим, что Motorola предписывает другой порядок

действий).

Последние четыре арифметические операции имеют только один операнд, который может быть содержимым либо регистра, либо ячейки памяти. Вот два примера:

INC count

NEG AL

Первая команда прибавляет 1 к ячейке памяти, именуемой count, а вторая изменяет знак содержимого регистра AL.

Лирическое отступление: адресация. Прежде, чем продолжить, несколько слов по поводу адресации регистров и памяти. Процессор Intel 8086 предлагает использовать 8 его регистров общего назначения, однако после изучения рис. 10.2 вы придете к заключению о том, что большинство этих регистров используются специфически.

Рис. 10.2. Регистры общего назначения МП 8086.

Четыре из них (A-D) могут быть использованы как в виде единых 16-разрядных регистров (АХ, где X означает extended — расширенный), так и в виде пар байтовых регистров [АН, AL, соответственно означает старший (high) байт регистра АХ, a AL- младший (low) байт]. Регистры ВХ и ВР, так же как и SI, DI, могут содержать адреса и предназначены для использования при адресации (см. ниже). Специальные циклические команды (которые мы исключили из нашего краткого перечня) используют регистр С, а команды умножения/деления и ввода-вывода используют регистры А и D.

Данные, используемые в командах, могут представлять собой константу, величину, содержащуюся в регистре или величину, содержащуюся в памяти. Константы вы указываете, просто записывая их, а регистры - по именам, так, как было показано выше. Для адресации памяти МП Intel 8086 обеспечивает 6 режимов адресации, три из которых пояснены схемами на рис. 10.3.

Рис. 10.3. Некоторые способы адресации.

Вы можете прямо указать имя переменной, в этом случае ее адрес при ассемблировании будет определяться парой байтов, следующих сразу же за командой; вы можете занести адрес переменной в один из регистров, используемых для адресации (ВХ, ВР, SI или DI), а затем выполнить команду, в которой предусмотрена косвенная адресация через соответствующий регистр; можно модифицировать последний режим адресации и получать адрес переменной, прибавляя константу смещения к содержимому регистра, используемого для адресации. Косвенный режим быстрее (в предположении, что адрес уже загружен в соответствующий регистр) и является гораздо более приемлемым, если вы хотите выполнять некоторые операции над множеством чисел (строкой или массивом).

Вот несколько примеров адресации:

MOV count,100Н (прямая, непосредственная)

MOV [ВХ],100Н (косвенная, непосредственная)

MOV [ВХ + 1000Н], (адресация по базе, регистр)

АХ

В двух последних командах предполагается, что мы уже загрузили адрес в ВХ. Последняя команда копирует содержимое АХ в ячейку памяти, смещенную на 4 К (1000-ричное) выше от ячейки, на которую указывает ВХ; ниже мы вкратце рассмотрим пример, иллюстрирующий, как можно использовать эту команду для копирования массива.

При адресации памяти для МП 8086 существует сложность другого рода, которую мы было «замели под ковер»: адрес, формируемый в любом из вышеуказанных режимов адресации, не является окончательным, действительным адресом, поскольку получаемый таким образом адрес имеет только 16 разрядов (и может адресовать только 64 Кбайт памяти). На самом деле то, что вычисляется по указанным выше правилам, называется смещением. Для того чтобы получить действительный, физический адрес, вы должны прибавить к смещению 20-разрядную базовую величину, получаемую сдвигом на 4 разряда влево содержимого 16-разрядного сегментного регистра (таких регистров имеется 4). Другими словами, МП 8086 позволяет вам обращаться к областям памяти по 64 Кбайт; положение этих «сегментов» внутри полного адресного пространства 1 Мбайт, что в свою очередь определяется содержимым сегментных регистров. Использование 16-разрядной адресации в МП 8086 по большому счету было большой ошибкой, унаследованной от ранних поколений.

Более современные МП (начиная с 80386, а также серии 68000) сделаны как надо во всех отношениях, с 32-разрядной адресацией. Для того чтобы не усложнять наши примеры, мы просто игнорируем сегменты вообще; на практике вы, конечно, должны будете о них побеспокоиться.

Обзор набора команд (продолжение). Рассмотрим теперь команды управления стеком PUSH и POP. Стек — это часть памяти, организованная специальным образом: когда вы заносите некоторое значение в стек (выполняя операцию push), это значение заносится в очередную доступную ячейку (вершину стека); а когда вы извлекаете значение из стека (выполняя операцию POP), оно выбирается из вершины стека, т. е. выбирается то, что было занесено в стек последним. Таким образом, стек — это последовательный набор данных, организованный по принципу: последним пришел-первым вышел. Вам, может быть, будет легче освоить это понятие, если вы представите себе монетную кассу водителя автобуса или стопку подносов в столовой.

Рис. 10.4 показывает, как работает стек. Стек располагается в обычном ОЗУ, а указатель стека (регистр SP) ЦП обеспечивает возможность доступа к той ячейке памяти, которая является «вершиной» в данный момент времени. Для МП 8086 стек состоит из 16-разрядных слов и по мере занесения в него данных «растет» вниз в ОЗУ. Содержимое регистра SP автоматически декрементируется на 2 перед каждой операцией PUSH и инкрементируется на 2 после каждой операции POP. Таким образом, например, 16-разрядное содержимое регистра АХ копируется в вершину стека командой PUSH АХ; SP указывает на последний занесенный байт. Команда POP выполняется в обратном порядке, как показано на рис. 10.4.

Рис. 10.4. Операции со стеком.

Мы увидим, что при реализации вызовов подпрограмм и прерываний стек играет ведущую роль. Команда JMP заставляет ЦП отклониться от обычной процедуры последовательного выполнения команд, переходя к выполнению той команды, на которую совершается переход. Команда условного перехода (возможно 8 различных вариантов, обозначаемых обычно Jcc) проверяет регистр флагов[4], который располагается в ЦП (биты разрядов этого регистра устанавливаются в соответствии с результатом выполнения самой последней арифметической операции), а затем либо выполняет переход (если условие истинно), либо выполняет следующую за командой условного перехода команду (если условие не истинно). Программа 10.1 показывает пример условного перехода.

Поделиться:
Популярные книги

Темный Патриарх Светлого Рода 2

Лисицин Евгений
2. Темный Патриарх Светлого Рода
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Темный Патриарх Светлого Рода 2

Ваше Сиятельство 7

Моури Эрли
7. Ваше Сиятельство
Фантастика:
боевая фантастика
аниме
5.00
рейтинг книги
Ваше Сиятельство 7

Кукловод

Злобин Михаил
2. О чем молчат могилы
Фантастика:
боевая фантастика
8.50
рейтинг книги
Кукловод

Бестужев. Служба Государевой Безопасности. Книга вторая

Измайлов Сергей
2. Граф Бестужев
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бестужев. Служба Государевой Безопасности. Книга вторая

Герой

Бубела Олег Николаевич
4. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.26
рейтинг книги
Герой

Подпольная империя

Ромов Дмитрий
4. Цеховик
Фантастика:
попаданцы
альтернативная история
6.60
рейтинг книги
Подпольная империя

Сиротка 4

Первухин Андрей Евгеньевич
4. Сиротка
Фантастика:
фэнтези
попаданцы
6.00
рейтинг книги
Сиротка 4

Я – Орк. Том 4

Лисицин Евгений
4. Я — Орк
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я – Орк. Том 4

Я – Стрела. Трилогия

Суббота Светлана
Я - Стрела
Любовные романы:
любовно-фантастические романы
эро литература
6.82
рейтинг книги
Я – Стрела. Трилогия

Назад в СССР: 1984

Гаусс Максим
1. Спасти ЧАЭС
Фантастика:
попаданцы
альтернативная история
4.80
рейтинг книги
Назад в СССР: 1984

Вираж бытия

Ланцов Михаил Алексеевич
1. Фрунзе
Фантастика:
героическая фантастика
попаданцы
альтернативная история
6.86
рейтинг книги
Вираж бытия

Прометей: каменный век

Рави Ивар
1. Прометей
Фантастика:
альтернативная история
6.82
рейтинг книги
Прометей: каменный век

Убивать, чтобы жить

Бор Жорж
1. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать, чтобы жить

Вечная Война. Книга V

Винокуров Юрий
5. Вечная Война
Фантастика:
юмористическая фантастика
космическая фантастика
7.29
рейтинг книги
Вечная Война. Книга V