Главная Случайная страница


Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Регистры и работа с памятью





 

Вычислительная мощь процессора 8086 (и 8088) строилась на наборе из четырнадцати 16-битных регистров, объединенных в несколько групп (они изображены на рис. 4). Основа набора - регистры общего назначения: AX (аккумулятор), BX (база), CX (счетчик) и DX (данные). Размерность каждого из них - 16 бит, но для совместимости с программным обеспечением процессоров 8080 и 8085 к регистрам общего назначения программа могла обращаться и как к 8-битным.

Рис. 4. Регистры микропроцессора Intel 8086 (8088).

 

Для этого каждый регистр был разделен на две части: старший байт (Height) и младший (Low). Если программист собирался обратиться к регистру как к 16-битному, то после имени регистра (A, B, C или D) ставил символ X (AX, BX, CX, DX). Но если ему требовалось использовать регистры общего назначения как 8-битные, то он к имени регистра прибавлял литеру H или L в зависимости от того, к какому байту регистра (старшему или младшему) нужно было обратиться. Это позволяло легко адаптировать старое 8-битное ПО, поскольку литеры A, B, C и D (но без второй буквы) в качестве имен регистров применялись еще в процессоре 8085.

При организации работы с памятью разработчики Intel нашли решение, которое тогда, видимо, показалось изящным, но позднее подвергалось страшным проклятьям. Так как необходимо было добиться частичной совместимости нового чипа с ПО для 8-битных процессоров (8080, 8085 и Z80), разработчики не стали отказываться от 16-битной схемы адресации памяти (в предыдущих чипах для хранения адресов памяти применялись 16-битные регистры). Однако 16-битный адрес позволяет использовать максимум 64 кбайт памяти. Такой объем уже не мог удовлетворить серьезного пользователя ПК. Как быть? Решили разбить общее пространство памяти на так называемые сегменты - виртуальные умозрительные части с максимальным объемом 64 кбайт каждая.

Количество сегментов в оперативной памяти ограничивалось размерностью регистров (16 бит) и не могло превышать 65 535; каждый сегмент отстоял от другого на 16 байт. Каждая выполняющаяся программа для процессора 8086 (8088) состоит из нескольких сегментов. Во-первых, есть сегмент кода (Code Segment) - массив команд, предназначенных для выполнения. Во-вторых, существует регистр данных, в котором содержится информация, подлежащая обработке (Data Segment). В-третьих, если одного сегмента данных мало, программист может задействовать дополнительный сегмент данных (Extra Segment). И наконец, в-четвертых, почти каждая программа включает в себя сегмент стека для временного хранения данных и для обмена параметрами между подпрограммами (Stack Segment).

Для хранения номеров этих сегментов в процессоре 8086 есть кодовые регистры: CS, DS, ES и SS. Каждый из сегментных регистров (их имена являются аббревиатурами названий соответствующих сегментов) должен хранить ссылку только на сегмент своего типа. Например, в регистре SS не может содержаться только номер стекового сегмента.

Реальный адрес требуемой ячейки памяти определялся довольно затейливо по схеме СЕГМЕНТ:СМЕЩЕНИЕ на основании значений в двух регистрах: сегменте и регистрах-указателях. Происходило это так: справа к значению СЕГМЕНТ приписывалось четыре нуля, и к полученному числу прибавлялось значение СМЕЩЕНИЕ. Смещение внутри сегмента выбиралось из регистров-указателей SP, BP, SI, DI или регистра IP (указателя команд - Instructions Pointer).

Например, в регистре SS хранится номер сегмента 0000 0011 0000 1111, а в регистре SP - номер ячейки внутри этого сегмента, скажем, 0000 0000 0000 0101. Тогда реальный адрес ячейки в общем массиве памяти вычисляется так: сначала справа к значению SS приписывается четыре нуля (все биты сдвигаются влево на четыре позиции), в результате имеем 0000 0011 0000 11111 0000; а затем к полученному числу прибавляется значение из SP; получается 20-битный адрес 0000 0011 0000 1111 0101, или 030F5 в шестнадцатеричном виде. Этот адрес процессор посылает для доступа к нужной ячейке памяти. Рис. 3 иллюстрирует эту схему.

Рис. 3. Организация работы с памятью микропроцессора Intel 8086 (8088).

 

Date: 2015-10-18; view: 458; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.005 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию