Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Программы и программное обеспечение

Поиск

ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ

Федеральное государственное образовательное бюджетное учреждение высшего

профессионального образования

«Поволжский государственный университет телекоммуникаций и информатики»

КОЛЛЕДЖ СВЯЗИ

 

 

УТВЕРЖДАЮ:

Зам. директора по УВР

____________ /Логвинов А.В./

«13___»__05_____2014 г.

 

Курс лекций

По дисциплине МДК 01.01 «Системное программирование»

Специальность: 09.02.03 – «Программирование в компьютерных системах»

 

 

Курс 3, семестр 6

 

 

Рассмотрено за заседании П(Ц)К

«Информационных систем и технологий»

Протокол №__ 10 от «_13_»___05____2014 г.

Председатель П(Ц)К_____________Шомас Е.А.

Разработал преподаватель       Кукарская Л.П.

 

Самара

2014

 

Содержание

 Раздел 1 Основные понятия и структура процессора………………….3

1. Тема 1.1 Основные понятия и определения……………………….......3

2. Тема 1.2 Принцип программного управления……………………......6

3. Тема 1.3 Формы представления чисел в ЭВМ………………………..9

4. Тема1.4 Выполнение арифметических операций в ЭВМ……………14

5. Тема 1.5 Структура микропроцессора Intel ………………………….17

6. Тема 1.6 Сегментация и адресация…………………………………….20

7. Тема 1.7 Регистры микропроцессора…………………………………..23

Раздел 2 Основы программирования на ассемблере………………….27

8.Тема 2.1 Основы автоматизации вычислительного процесса……..27

9. Тема 2.2 Режимы адресации памяти…………………………………38

10. Тема 2.3 Основные команды простых программ на Ассемблере…46

11. Тема 2.4Арифметические команды…………………………………..52

12. Тема 2.5 Команды передачи управления…………………………….64

13. Тема2.6 Команды прерывания………………………………………..78

14.Тема2.7 Команды обработки строк……………………………………82

Раздел 3. Ассемблеры……………………………………………………….88

15. Тема3.1 Программа Ассемблер………………………………………..88

16. Тема3.2 Язык Ассемблер……………………………………………….91

17.Тема3.3 Основы 32-битного программирования в Windows……….96

18. Тема 3.4 API функции…………………………………………………..98

19. Тема 3.5 Версии ассемблеров…………………………………………..101

20. Тема 3.6 Среды разработки…………………………………………….105

Литература……………………………………………………………………110

 

 

Раздел 1 Основные понятия и структура процессора.

Тема 1.1 Основные понятия и определения

Программы и программное обеспечение

Системное программирование

Прцессор, МП, МПС и МПК

Структура МПС

1.Программа— это данные, предназначенные для управления конкретными

компонентами системы обработки информации (СОИ) в целях реализации

определенного алгоритма.

Программное обеспечение (ПО)— совокупность программ СОИ и программных

документов, необходимых для их эксплуатации

 

2.Системная программа — программа, предназначенная для поддержания

работоспособности СОИ или повышения эффективности ее использования.

Прикладная программа— программа, предназначенная для решения задачи

или класса задач в определенной области применения СОИ.

В соответствии с терминологией, системное программирование — это процесс

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

С другой стороны, система — единое целое, состоящее из множества

компонентов и множества связей между ними. Тогда системное

программирование — это разработка программ сложной структуры.

Эти два определения не противоречат друг другу, так как разработка

программ сложной структуры ведется именно для обеспечения

работоспособности или повышения эффективности СОИ.

Подразделение ПО на системное и прикладное является до некоторой степени

устаревшим. Сегодняшнее деление предусматривает по меньшей мере три

градации ПО:

- Системное

- Промежуточное

- Прикладное

Структура МПС

Практически всегда структура МПС является магистрально-модульной. В такой структуре имеется группа магистралей (шин), к которым подключаются различные модули (блоки), обменивающиеся между собой информацией поочередно, в режиме разделения времени.

Термин "шины" относится к совокупности цепей (линий), число которых определяет разрядность шины.

Типична 3-шинная структура МПС с шинами адресов ША, данных ШД и управления ШУ. Наряду с русскими терминами применяются английские АВ (Address Bus), DB (Data Bus) и СВ (Control Bus).

Структура МПС с простым МП от Intel, который имеет мультиплексируемую шину адресов/данных.

После передачи младшего байта адреса шина AD7-0 отдается для передачи данных. Эти передачи двунаправлены, направление задается сигналом RD.. При активном состоянии сигнала чтения RD (Read) данные передаются справа налево, при пассивном - в обратном направлении. К шине данных подключены информационные выводы всех модулей МПС.

Микропроцессор МП. Выполняя программу, МП обрабатывает команду за командой. Команда задает выполняемую операцию и содержит сведения об участвующих в ней операндах. После приема команды происходит ее расшифровка и выполнение, в ходе которого МП получает необходимые данные из памяти или внешних устройств. Ячейки памяти и внешние устройства (порты) имеют номера, называемые адресами, которыми они обозначаются в программе.

Генератор Г задает МП тактовые импульсы. По каждому МП выполняет команду.

Однонаправленная адресная шина ША. По ней МП посылает адреса, определяя объект, с которым будет обмен.

Ддвунаправленная шина данных ШД. По ней МП обменивается данными с модулями (блоками) системы.

Шина управления ШУ. По ней идет обмен управляющей информацией.

Постоянное запоминающее устройство - ПЗУ (ROM – Read Only Memory) хранит фиксированные программы и данные, оно является энергонезависимым и при выключении питания информацию не теряет.

Оперативное запоминающее устройство - ОЗУ (RAM - Random Access Memory) хранит оперативные данные (изменяемые программы, промежуточные результаты вычислений и др.), является энергозависимым и теряет информацию при выключении питания. Для приведения системы в работоспособное состояние после включения питания ОЗУ следует загрузить необходимой информацией.

Интерфейс управления ИУ. Осуществляет взаимодействие с устройствами ввода-вывода (УВВ) или внешними устройствами (ВУ) - техническими средствами для передачи данных извне в МП или память либо из МП или памяти во внешнюю среду. Для подключения ВУ необходимо привести их сигналы, форматы слов, скорость передачи и т. п. к стандартному виду, воспринимаемому данным МП. Это выполняется специальными блоками, называемыми адаптерами (интерфейсными блоками ввода-вывода). Интерфейсом называют совокупность аппаратных и программных средств, унифицирующих процессы обмена между модулями системы.

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

Контроллеры прерываний обеспечивают обмен с внешними устройствами в режиме прерывания (временной остановки) выполняемой программы для обслуживания запроса от внешнего устройства.

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

В состав МПС часто входят также программируемые таймеры, формирующие различные сигналы (интервалы, последовательности импульсов и т. д.) для проведения операций, связанных со временем.

В современных МП системах используются наборы микросхем (Chip sets), которые соединяют компонеты:

Северный мост для связи МП с памятью.

Южный мост для ввода-вывода.

4.1.Суперскалярная архитектура. Для того чтобы пояснить этот термин, поясним

вначале термин- конвейеризация вычислений. Конвейер специальное устройство, реализующее такой метод обработки команд внутри МП, при котором исполнение команд разбивается на несколько этапов. i486 имеет пятиступенчатый конвейер.

Соответствующие пять этапов включают:

-выборку команд из кэш памяти или из оперативной памяти;

-декодирование команд;

-генерацию адреса, при которой определяются адреса операндов в памяти;

-выполнение операции с помощью АЛУ;

- запись результата.

Таким образом, на стадии выполнения каждая машинная команда разбивается на более элементарные операции. Очередная команда после её выборки попадает в блок декодирования. Таким образом, блок выборки свободен и может выбрать следующую команду. В результате на конвейере могут находиться в различной стадии выполнения пять команд. Скорость вычисления в результате существенно возрастает. Микропроцессоры, имеющие один конвейер называются склярными. Pentium имеет два конвейера, а Pentium Pro-три, поэтому эти микропроцессоры называются суперсклярными.

Сложение

0+0=0, 0+1=1, 1+0=1, 1+1=0+единица переноса, 1+1+единица переноса=1+единица переноса;

Вычитание

0-0=0, 1-0=1, 0-1=1+единица заема;

Умножение

0*0=0, 1*0=0, 0*1=0, 1*1=1.

Сложение многоразрядных целых двоичных чисел производится по описанным выше правилам и с учетом переноса или заема единицы из предыдущего разряда. Если из старшего разряда представления многоразрядного целого числа получается единица переноса, такая ситуация называется переполнением разрядной сетки. Большинство программ обработки информации на языках высокого уровня в такой ситуации выдают и прекращает обработку В программах на Ассемблере программист должен сам в своей программе выявлять такие ситуации переполнения и предусматривать соответствующую обработку. При этом программист должен руководствоваться следующими правилами:

Внутренняя память

Внутренняя память ПК подразделяется на постоянную (ПЗУ) и оперативную (ОЗУ). Минимальной адресуемой единицей памяти является байт. Байты в памяти нумеруются последовательно, начиная с 0, и каждый байт имеет свой уникальный номер-адрес. Структура адресного пространства памяти ПК на примере РС Intel 8086 показана ниже.

Таблица – Структура адресного пространства внутренней памяти ПК

Начало (десятичный номер килобайта) Адрес (шестнадца-теричный Объем в килобайтах Назначение
0 00000 640 Основная оперативная память, включающая Таблицу векторов прерывания Область BIOS
640 A0000 128 Видеопамять (ОЗУ)
768 С0000 192 Расширенная область (ПЗУ)
960 F0000 64 Основное ПЗУ системы

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

ПЗУ состоит из специальных чипов, информация из которых, будучи однажды записана, в дальнейшем только считывается. В силу этого свойства, записанные в таких чипах данные и инструкции не могут быть изменены (в английской транскрипции ПЗУ называется ROM – Read Only Memory, что означает “память только для чтения”). Расширенное ПЗУ включает постоянную BIOS и отвечает за устройства ввода/вывода, такие, как контроллер (устройство управления) винчестера и др. Основное ПЗУ системы обеспечивает самопроверку при включении компьютера, загрузку операционной системы с диска, рисование точек при выводе графики. Когда Вы включаете компьютер, ПЗУ управляет различными проверками и загрузкой специальных данных с диска в ОЗУ (заметим, что для программиста эта память недоступна).

ОЗУ доступна программисту в качестве пространства для временного хранения данных и выполнения программ. При включении компьютера часть операционной системы загружается с винчестера в оперативную память. Остальная память из основного ОЗУ может использоваться программистом. Выполняемая прикладная программа находится в этой части ОЗУ и выводит результаты обработки на экран дисплея, принтер или устройства внешней памяти (например, НГМД или винчестер). После завершения одной прикладной программы операционная система может загрузить на ее место другую программу.

Выключение компьютера приводит к потере данных в ОЗУ, но не влияет на ПЗУ. Вот почему требуемые для дальнейшей обработки данные необходимо сохранять в долговременной памяти.

 

О сегментах.

Сегментный регистр хранит стартовый (начальный) адрес памяти, определенный операционной системой для хранения команд программы (CS), переменных и констант (DS) и стека (SS) – для временного хранения результатов обработки, параметров вызываемых из программы процедур и адресов возврата из вызываемых процедур. На приведенном ниже рисунке графически показана связь сегментных регистров и соответствующих им сегментов. Рисунок отражает принципиальную связь между сегментными регистрами и сегментами программы, откуда следует, что программные сегменты не обязательно располагаются в оперативной памяти в порядке, отображенном на рисунке. Не стоит забывать, что в программе могут задаваться и дополнительные сегменты данных (такие, как ES, а в процессорах 80386 и выше еще и FS и GS), но приведенные 3 сегмента программы присутствуют в любой программе.

Сегмент начинается с границы параграфа (адреса, нацело делящегося на 16, с четырьмя двоичными нулями в младших разрядах значения адреса). Ячейки памяти внутри сегмента нумеруются относительно стартового адреса сегмента. Расстояние в байтах от начала сегмента до любой другой ячейки внутри этого сегмента, называется смещением.

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

 

                                                           Оперативное запоминающее устройство

 

0000
Сегмент стека  
Адрес
Адрес  
Адрес  

 


Сегмент данных
    SS

    DS

Мах адрес
Сегмент кода
    CS

 

Рисунок 4.3. Связь сегментов и сегментных регистров.

Регистр CS содержит адрес первой команды программы. Сумма содержимого этого регистра со значением смещения в указателе инструкций – регистре IP – дает адрес команды программы, которая должна быть передана следующей для исполнения.

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

Регистр SS позволяет реализовать в памяти стек, который программа использует для временного хранения адресов и данных. Адрес из этого регистра складывается со смещением, хранимым в указателе стека SP, и суммарное значение указывает на текущее слово в стеке.

Регистр ES используется в программах, обрабатывающих строковые последовательности. Если Ваша программа предполагает такую обработку, Вы должны проинициализировать этот регистр соответствующим значением (аналогично принудительной инициализации основного сегмента данных DS).

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

 

Универсальные регистры

Наиболее часто программист оперирует регистрами общего назначения (РОН). К ним относятся регистры AX, BX, CX, DX, а в процессорах, начиная с Intel 80386 и выше – EAX, EBX, ECX, EDX. Регистры ЕхХ – 32-разрядные, хХ – 16-разрядные. Каждый из последних в свою очередь состоит из двух 8-битовых регистров xL и xH. Нижеприведенный рисунок иллюстрирует общую структуру РОН на примере регистра АХ.

  AH AL

 

                                                                   AX

 


                                       EAX

Рисунок 4.4. Общая структура РОН

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

    - регистры АН, ВН, СН, DH - старшие байты (Hight);

- регистры AL, BL, CL, DL - младшие байты (Low) соответствующих 2-ух      байтовых регистров.

Регистры AL, АН образуют соответственно младший и старший байты условного регистра АХ.

Всеми этими регистрами можно пользоваться при программировании, но ряд команд использует их неявным способом. Например:

регистр АХ, аккумулятор, используется при умножении и делении слов, в операциях ввода-вывода и в некоторых операциях над строками;

регистр AL используется при выполнении аналогичных операций над байтами, а также при преобразовании десятичных чисел и выполнении над ними арифметических операций;

регистр АН используется при умножении и делении байтов;

регистр ВХ, базовый регистр, часто используется при адресации данных в памяти; регистр СХ, счетчик, используется как счетчик числа повторений цикла и в качестве номера позиции элемента данных при операциях над строками. Регистр CL используется как счетчик при операциях сдвига и циклического сдвига на несколько битов;

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

 

Регистр флагов

Регистр флагов представляет собой 16-битовый регистр, где фиксируется информация о текущем состоянии процессора.

15                                                                                                                           0

                OF DF IF TF SF ZF     AF     PF     CF

Рисунок 4.5. Регистр флагов

Флаг OF называется флагом переполнения и его значение, равное 1, свидетельствует о наличии ошибки в операциях над числами со знаком.

Флаг DF называется флагом направления, используется в командах работы со строками. При DF=1 регистр индекса, используемый в командах работы со строками увеличивается на 1 при каждом следующем выполнении команды, при DF=0 - регистр индекса на 1 уменьшается.

Флаг IF называется флагом прерывания. Обычно он устанавливается в 1 и такое его значение позволяет исполняемой программе пользователя реагировать на прерывания. Однако, когда вызывается программа обработки прерывания, флаг IF устанавливается в 0, чтобы никакие другие прерывания не могли помешать текущей обработке прерывания.

Флаг TF называется флагом трассировки, при его значении, равном 1, разрешается выполнение программы по шагам.

Флаг SF называется флагом знака и в соответствии со своим названием устанавливается в 1, если в результате выполнения операции над числами со знаком, получается отрицательное число.

Флаг ZF называется флагом нуля. Этот флаг устанавливается, если результатом операции является нулевое значение (если результат выполненной перед проверкой флага операции равен 0, флаг устанавливается в 1).

Флаг AF называется флагом вспомогательного переноса. Используется в двоично-десятичной арифметике. Этот флаг устанавливается в 1, если арифметическая операция приводит к заему или переносу четвертого справа бита однобайтового операнда (иначе говоря, этот флаг содержит бит, переносимый из третьего бита в четвертый бит в специализированных арифметических операциях).

Флаг PF называется флагом четности, он устанавливается в 1, если результат операции имеет четное количество 1 в двоичном представлении результата.

Флаг CF называется флагом переноса и в него заносится перенос (или заем) из знакового (старшего) разряда числа (это заем или перенос за пределы разрядной сетки представления числа).

Нужно уяснить, что не все команды программы на Ассемблере устанавливают в 0 или в 1 флаги. Причем, выполнение тех или иных команд связано с установкой конкретных флагов. Обратите внимание на это обстоятельство при изучении команд Ассемблера.

 Еще раз обращаю внимание на формирование физического адреса в памяти компьютера.

Изучаемый микропроцессор имеет 1 Мбайт памяти ОЗУ. Следовательно, для указания адреса информации в команде микропроцессора должен был иметь 20 разрядов. Однако такое количество разрядов микропроцессора не может обработать за 1 операцию 16-битового процессора. Чтобы разрешить это противоречие, было решено формировать физический адрес из 2-х 16-битовых слагаемых: базы (содержимое регистра сегмента) и смещения по правилу:

Физический Адрес = смещение (IP) +1б*(регистр сегмента -CS).

В действительности длинная операция умножения при вычислении физического адреса не выполняется по той причине, что микропроцессор использует содержимое 16-битового регистра так, как если бы оно имело 4 дополнительных нулевых бита 0010->0100(*2)->1000(*4)->10000(*8)->100000(*16).

Например, пусть смещение будет 10Н (в шестнадцатеричной системе счисления), а адрес начала размещения сегмента (содержимое регистра сегмента) равно 2000Н. Тогда,

     0000 0000 0001 0000 (смещение)

+0010 0000 0000 0000 0000 (номер блока)

___________________________________________

0010 0000 0000 0001 0000 (физический адрес)

Помимо удобства обработки, описанный метод адресации обусловлен тем, что команды программы и обрабатываемые ею данные располагаются в разных частях памяти или в разных сегментах. Если процессору потребуются данные, то процессор использует адрес, с которого начинается сегмент данных и смещение (или позицию искомой переменной в этом сегменте). Аналогично ищется команда программы.

 

Раздел 2 Основы программирования на ассемблере

Тема 2.1 Основы автоматизации вычислительного процесса

    1.Понятие и структура машинной команды

    2.Синтаксис команд Ассемблера.

    3.Способы задания операндов

    4.Псевдооператоры или директивы

 5.Загрузка и выполнение программ на компьютере

Ранее были даны определения алгоритма и программы (см. лекция 1). Алгоритм может быть записан в разных формах: словесной, формульной, табличной, графической или на языке программирования. Не останавливаясь на особенностях форм записи алгоритма, отметим, что языки, представляющие алгоритм в виде последовательности читаемых программистом (не двоично-кодированных) команд, называются алгоритмическими языками. Алгоритмические языки подразделяются на машинно-ориентированные, процедурно-ориентированные, объектно-ориентированные и проблемно-ориентированные.

Машинно-ориентированные языки (их еще называют ассемблеры) относятся к языкам программирования низкого уровня - программирование на них наиболее трудоемко, но позволяет создавать оптимальные программы, учитывающие функционально-структурные особенности конкретного компьютера. Программы на этих языках, при прочих равных условиях, будут более короткими (для ЭВМ) и более быстрыми. Кроме того, знание основ программирования на машинно-ориентированном языке позволяет специалисту подробно разобраться с архитектурой компьютера. Отличительной особенностью таких языков является генерация транслятором в большинстве случаев одной машинной команды на один оператор языка.

Все остальные языки программирования относятся к языкам высокого уровня и основаны на макрокомандах. Макрокоманда при трансляции генерирует много машинных команд, как правило, более десяти, а в некоторых случаях и несколько сотен команд. Этим обстоятельством объясняется большие объемы машинных кодов программ при малой длине исходных текстов.

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

Трансляторы бывают двух видов: трансляторы-компиляторы и трансляторы-интерпретаторы.

Компиляторы при трансляции переводят на машинный язык сразу всю программу и затем хранят ее в памяти машины в двоичных кодах. Интерпретаторы каждый раз при исполнении программы заново переводят в машинные коды каждую макрокоманду и передают ее для непосредственного выполнения компьютеру. В памяти интерпретируемые программы хранятся в виде исходных макрокоманд и потому в любой момент читаемы человеком. Откомпилированные программы в памяти ЭВМ практически человеком не читаемы. Но их можно вызвать в специальную программу-отладчик (DEBUG и его разновидности), который переведет эту программу на язык Ассемблера и, тем самым, сделает ее "человекочитаемой" (это еще один довод в пользу изучения языка ассемблер).

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

Машинная команда состоит из двух частей: операционной и адресной.

КОП Адреса

Рисунок 1. Функциональные части машинной команды

Операционная часть команды (КОП - код операции) - это группа разрядов в команде, предназначенная для записи аббревиатуры выполняемого действия.

Адресная часть команды (адреса) - это группа разрядов в команде, в которых записываются чаще всего идентификаторы данных или имена регистров Ml 111, хранящих информацию, или метки машинных команд. Часто эту часть называют адресами операндов, т.е. чисел, участвующих в операции.

По количеству записываемых адресов (обозначаются а1, а2, а3,...) команды делят на безадресные, одно-, двух- и трехадресные.

В трехадресной команде (рис. 2) а1 и а2 - адреса первого и второго чисел, участвующих в операции, а3 - адрес ячейки памяти или регистра, куда следует поместить результат выполнения операции.

КОП al а2 а3

            Рисунок 2. Типовая структура трехадресной команды

Двухадресная команда имеет структуру, представленную на рисунке 3. В таких командах, как правило, al — адрес ячейки или регистра, где расположено первое число, и куда после завершения операции должен быть записан результат выполнения команды (обратите внимание: при этом "старое" значение первого числа изменяется). Второе участвующее в операции число хранится в а2.

КОП а1 а2

Рисунок 3. Типовая структура двухадресной команды

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

КОП а1

Рисунок 4. Типовая структура одноадресной команды

Безадресная команда содержит только код операции, а информация для нее должна быть заранее, до появления этой команды в программе, помещена другими командами в определенные регистры Ml ill (безадресные команды могут использоваться только совместно с командами другой адресности). В изучаемом нами Ассемблере применяются двух, одно и безадресные команды.

Итак, команды представляют краткую нотацию (запись) системы команд.

Команды пересылки

Непосредственная адресация

Прямая адресация ячеек ОП

Коианды пересылки

Типы адресации Ассемблера микропроцессора Intel 8086, будем изучать на примере команд пересылки, без которых не обходится ни одна программа.

К этой группе команд относятся команды:

Mov <Операнд назначения (приемник)>, <операнд- источник>

Xchg <Операнд1>, <операнд2>.

Mov – это основная команда пересылки данных. В ней допустимо большинство из возможных сочетаний операндов:

Mov ax,table          ;пересылка из памяти в регистр

Mov table, ax         ; и наоборот

Mov ds, ax                      ; пересылка между 16-битовыми регистрами

Mov bl,al               ; пересылка между 8-битовыми регистрами

Mov cl,-30             ;пересылка константы в регистр

Mov table, word ptr 25h            ; пересылка константы в память

Обращаю Ваше внимание на тот факт, что если шестнадцатеричная константа начинается с цифры, то дополнительный признак 0 перед ней ставить необязательно! Признак обязателен для шестнадцатеричных констант, начинающихся с буквы, т.к. с буквы начинаются большинство (если не все) идентификаторов программы!

Обратите внимание на запись инструкции пересылки в память константы! Если в команде пересылки одним из операндов является регистр, то ассемблер пересылает столько байтов, каков размер регистра. При отсутствии в команде регистра ассемблер не знает, одну, двух или четырехбайтовую константу необходимо пересылать в память. В таком случае подсказкой для ассемблера должны быть модификаторы BYTE PTR (пересылка одного байта), WORD PTR (пересылка слова – двух байтов), DWORD PTR (пересылка двойного слова – четырех байтов).

В команде Mov исключаются следующие сочетания операндов:

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

DSEG             SEGMENT PARA PUBLIC ‘DATA’             ; по этой команде;Ассемблер назначит адрес начала сегмента для переменных (или данных) в программе

 .......

CSEG             SEGMENT PARA PUBLIC ‘CODE’

              ASSUME CS:CSEG, DS:DSEG, SS:STACK

OUR_PROG   PROC  

              MOV AX,DSEG     ; эти команды инициируют адрес

              MOV DS,AX                   ; сегмента данных через РОН

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

DSEG              SEGMENT PARA PUBLIC ‘ DATA ’

SOURCE DW 500                ; это слово будет скопирована

DEST             DW (?)                  ; в эту переменную

DSEG              ENDS

CSEG             SEGMENT PARA PUBLIC ‘CODE’

              ASSUME CS:CSEG, DS:DSEG, SS:STACK

OUR _ PROG   PROC

;занести в стек такие начальные значения, чтобы программа

; могла возвратить управление отладчику td

              PUSH DS; поместить в стек номер блока адреса возврата

              SUB AX, AX            ; обнулить регистр АХ, тоже можно сделать командой      MOV AX,0

              PUSH AX; поместить в стек значение адреса возврата=0

              MOV AX, DSEG     ; инициировать адрес сегмента данных

              MOV DS, AX

              MOV AX, SOURCE        ; переслать данные из SOURCE

              MOV DEST,AX     ; в DEST

Обращаю Ваше внимание, что в большинстве примеров дальнейшего изложения выделенные команды буду заменять многоточием.

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

- нельзя использовать сегментный регистр CS в качестве операнда назначения (приемника). Это объясняется тем, что регистр CS и регистр указатель команд IP вместе содержат адрес команды, которая должна выполняться следующей. Изменение содержимого CS равносильно операции перехода, ибо меняет последовательность команд.

Команда Xchg (exchange) меняет между собой значения двух регистров общего назначения или регистра ОН и ячейки памяти. Необходимое требование к операндам – чтобы они имели один тип. Например:

Xchg        AX, BX         ;обменять значения двух регистров (слова

Xchg        AL, BH          ; или байты

Xchg        WORD1, DX ; обменять значения регистра и

Xchg        DL, BYTE1            ;ячейки памяти.

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

абсолютный адрес = адрес начала сегмента + смещение внутри данного сегмента

или как

абсолютный адрес = сегментный адрес + исполнительный адрес.

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

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

Различают адресацию операндов:

- непосредственную, которая заключается в указании в команде самого значения операнда, а не его адреса;

- прямую, предполагающую указание в команде непосредственно исполнительного адреса;

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

- ассоциативную (используется в ассоциативных запоминающих устройствах, на ней останавливаться не будем);

- неявную, когда адреса операндов в команде не указываются, а подразумеваются кодом операции.

2.Непосредственная адресация имеет место, если операнд-источник является константой или переменной, которой присвоено постоянное значение. Например:

              MOV AX, 500 загружает значение 500 в РОН AX или

.......

K EQU 1024

 .........

MOV              CX, K  загружает в РОН СХ константу 1024, определенную идентификатором К.

Следует отметить, что непосредственный операнд может быть задан простым выражением, в котором константы или идентификаторы констант связаны арифметическими операциями +, -, * или / (в таких выражениях не должно быть скобок). Например:

MOV AX, 156*10Н/2.

Следует помнить, что диапазон посылаемых чисел (значений непосредственного операнда) определяется вмест<



Поделиться:


Последнее изменение этой страницы: 2021-02-07; просмотров: 104; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.170.164 (0.011 с.)