|
Ушел с форума
16371 / 7683 / 1080
Регистрация: 11.11.2010
Сообщений: 13,757
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 10.11.2013, 17:46 [ТС] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
ГЛАВА 3 Программы, выполняемые процессором, находятся не в воздухе и даже не в самом процессоре, а в оперативной памяти компьютера. Процессор забирает из памяти очередную команду, выполняет ее, потом переходит к следующей команде, снова выполняет ее – и так до конца программы. Команды процессора могут не только менять его собственное содержимое (содержимое регистров процессора), но и записывать числа в память компьютера. Память компьютера делится на ячейки размером 8 разрядов. Ячейки такого размера называют байтом. Разряды байта нумеруются справа налево от 0 до 7 (рис. 3.1). При этом правые разряды с меньшими номерами называются младшими разрядами, а левые разряды – старшими. В каждый разряд можно записать величину 0 или 1, такую величину называют битом. Самому первому байту присвоен нулевой номер. Номер последнего байта определяется объемом оперативной памяти, которой располагает компьютер. Порядковый номер байта называется адресом.АРХИТЕКТУРА 32/64-РАЗРЯДНОГО МИКРОПРОЦЕССОРА СЕМЕЙСТВА 80X86 (часть 1/3) Память Объем оперативной памяти измеряется в байтах. Единичные и нулевые биты на самом деле – математическая абстракция. Для процессора реальны только напряжения на его внешних контактах. Каждый контакт соответствует одному биту и процессору нужно различать только две градации напряжения: «высокий» уровень напряжения и «низкий» уровень напряжения. Одному уровню напряжения соответствует «единица», другому – «ноль». Поэтому адрес для процессора – это последовательность напряжений на специальных контактах, называемых шиной адреса. Объем физически адресуемой микропроцессором памяти однозначно определяется разрядностью внешней шины адреса как 2N, где N – количество адресных линий. Поэтому объем памяти компьютера определяется в числах, кратных степеням двойки: 1kB (килобайт, греч. chilioi тысяча) = 210 1МB (мегабайт, греч. megas большой) = 220 1GB (гигабайт, греч. gigas гигантский) = 230 1TB (терабайт, греч. teratos чудовище) = 240 1PB (петабайт, греч. pente пять, тысяча в 5-ой степени) = 250 1EB (эксабайт, греч. hex шесть, тысяча в 6-ой степени) = 260 » (103)6 байт; 1ZB (зеттабайт, тысяча в 7-ой степени) = 270 байт 1JB (йотабайт, тысяча в 8-ой степени) = 280 байт
Адресом машинного слова является адрес его младшего байта. В памяти младший байт всегда хранится по меньшему адресу. Адрес старшего байта может быть использован для доступа к старшей половине слова. Адресом двойного слова является адрес его младшего слова. Адрес старшего слова может быть использован для доступа к старшей половине двойного слова. Адресом учетверенного слова является адрес его младшего двойного слова. Адрес старшего двойного слова может быть использован для доступа к старшей половине учетверенного слова. Рис. 3.1 Внутренняя архитектура 32/64-разрядного Внутренняя архитектура 32/64-разрядного микропроцессора семейства 80x86 представлена на рис. 3.2.микропроцессора семейства 80x86 В базовый состав микропроцессора входит арифметико-логическое устройство (АЛУ), которое выполняет такие операции, как сложение, дополнение, сравнение, пересылка, сдвиг и так далее над данными, которые хранятся в регистрах или во внутренней памяти компьютера. Для увеличения скорости выполнения программ микропроцессор Pentium содержит два арифметико-логических устройства, благодаря чему две команды могут быть выполнены за один такт синхронизации. Регистры – это сверхбыстродействующая память, которая физически находится в микропроцессоре. Регистры используются для вычислений и связи микропроцессора с внешним миром. За исключением указателя инструкций (регистр RIP/EIP) и 20-байтной очереди команд, регистры управления и рабочие регистры разделены на три группы в соответствии с выполняемыми им функциями. Имеется группа регистров данных (регистры общего назначения, РОН), представляющая собой, по существу, набор арифметических регистров; указательная группа (регистры RSP/ESP, RSI/ESI, RDI/EDI, RBP/EBP), содержащая базовые и индексные адреса; сегментная группа, в состав которой входят специальные базовые регистры (регистры CS, DS, SS, ES, FS и GS). Устройство управления и синхронизации обеспечивает связь микропроцессора x86 с памятью и устройствами ввода/вывода. Для управления памятью микропроцессор использует расширенное устройство управления памятью (Memory Management Unit, MMU). Рис. 3.2. Внутренняя архитектура микропроцессора x86 Цикл выполнения команды Выборка команды. Блок управления извлекает команду из памяти, копирует ее во внутреннюю память микропроцессора и увеличивает значение указатель инструкций на длину этой команды. Декодирование команды. Блок управления определяет тип выполняемой команды, пересылает указанные в ней операнды в АЛУ и генерирует сигналы управления АЛУ, соответствующие типу выполняемой операции. Выборка операндов. Если в команде используется операнд, расположенный в памяти, блок управления инициализирует операцию по выборке его из памяти. Выполнение команды. АЛУ выполняет указанную в команде операцию, сохраняет полученный результат в заданном месте и обновляет состояние регистра флагов. По значению флагов программа может судить о результате выполнения команды. Запись результата в память. Если результат выполнения команды должен быть сохранен в памяти, блок управления инициирует операцию сохранения данных в памяти. Регистры микропроцессора Универсальные регистры являются составной частью процессора. Они используются для временного хранения информации. Интенсивное использование регистров микропроцессором при работе с программой определяется тем, что скорость доступа к ним намного больше, чем к ячейкам памяти. 32-/64-битные процессоры имеют набор регистров для хранения данных общего назначения; набор сегментных регистров; набор из 8 80-битных регистров для работы с числами с плавающей точкой (ST0-ST7); набор из 8 64-битных регистров целочисленного MMX-расширения (MMX0-MMX7, имеющих общее пространство с регистрами ST0-ST7); набор из 16 128-битных регистров SSE для работы с числами с плавающей точкой (XMM0–XMM15); программный стек – специальная информационная структура, работа с которой предусмотрена на уровне машинных команд. Помимо основных регистров из реального режима доступны также регистры управления памятью (GDTR, IDTR, TR, LDTR) регистры управления (CR0-CR4), отладочные регистры (DR0-DR7) и машинно-специфичные регистры.Регистры общего назначения Различают 8 целочисленных 32-х разрядных регистров общего назначения (EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP) их 64-разрядные расширения (RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP) и 8 целочисленных 64-разрядных регистров общего назначения (R8-R15), которые могут хранить следующие типы данных:
Многие команды используют конкретные регистры для хранения своих операндов. Например, команды обработки текстовых строк используют содержимое регистров ECX/RCX, ESI/RSI и EDI/RDI в качестве операндов. Основные случаи использования регистров общего назначения:
Регистры сегментов Регистры сегментов (CS, DS, SS, ES, FS и GS) хранят 16-битные базовыеадреса сегментов, определяющие сегменты памяти текущей адресации. В защищенном режиме каждый сегмент может иметь размеры от одного байта до целого линейного и физического пространства машины до 4 Гб в режиме реальной адресации, максимальный размер сегмента ограничен на 64 Кб. Шесть сегментов, адресуемых в любой данный момент, определяются содержимым регистров CS, SS, DS, ES, FS и GS:
Обрабатывающая часть микропроцессора Основой микропроцессора является арифметико-логическое устройство (АЛУ), предназначенное для обработки информации. АЛУ содержит две входные (A и B) и одну выходную (F) 64-/32-разрядные шины. Информация на и входных шинах обрабатывается в АЛУ в соответствии с набором управляющих сигналов на управляющих шинах АЛУ. Результат обработки появляется на выходной шине.Другим важным узлом микропроцессора является набор регистров общего назначения (РОН). В РОН хранятся информационные слова, подлежащие обработке в АЛУ, результаты обработки информации в АЛУ и управляющие слова. Обращение к РОН – адресное. Так как в один и тот же момент можно обращаться к 8-битным, либо 16-битным, либо к 32- или 64-битным регистрам, поэтому адреса регистров с разными размерами совпадают. Для формирования оптокода используются следующие номера регистров.
На рис. 3.3.1 типовая схема обрабатывающей части микропроцессора. Содержимое любого РОН может быть передано на буферный регистр (БР) и на регистр сдвига (Рсдв). АЛУ выполняет логические и арифметические операции над содержимым обоих регистров; результат может быть записан в любой из РОН. При подаче соответствующих управляющих сигналов в этой системе, возможны:
Общее количество внутренних регистров микропроцессора зависит от его модели. Первоначально (до появления суперскалярного микропроцессора) регистры были не виртуальными, на один программный регистр приходилось по одному внутреннему регистру, затем – по 2 штуки внутренних регистров на один программный и так далее. Количество внутренних регистров (RF) больше, чем программных. Регистры RF не привязаны к программным регистрам, то есть говорить «регистров EAX – 8 штук» или «по восемь на каждый» – не правильно. Регистры RF привязаны к операциям (точнее к микрооперациям – мопам) – каждому мопу назначается новый регистр RF для записи результата. Поэтому и количество регистров зависит от того, сколько мопов могут одновременно находиться в конвейере процессора – чем длиннее конвейер, тем больше должно быть RF и ROB (reorder buffer, в котором временно хранятся мопы). Поскольку современные процессоры суперскалярные и рассчитаны на обработку в среднем до трех мопов за такт (Core 2 Duo до 4), то количество RF и ROB должно быть не меньше утроенной задержки (в тактах) прохождения мопа по конвейеру с выхода декодера (или T-кэша) до выхода в отставку (удаления из ROB). Например, в Pentium Pro-Pentium III количество RF и ROB – 40, а в Pentium 4E конвейер в 3 раза длиннее и соответственно RF и ROB – 128. Сегментация памяти В 1976 году фирма Intel закончила разработку 16-разрядного микропроцессора i8086. Он имел достаточно большую разрядность регистров (16 бит) и системной шины адреса (20 бит), за счет чего микропроцессор мог адресовать до 1 Мбайта оперативной памяти. Использование сегментных регистров в то время называлось на компьютерном жаргоне словом kludge (приспособление для временного устранения проблемы). Проблема заключалась в адресации более 64 Кбайт памяти – предела, который устанавливается использованием 16-битных регистров, так как 216=65535 – это наибольшее число, которое может содержать такой регистр. Специалисты фирмы Intel для решения этой проблемы использовали сегменты и регистры сегментов и тем самым усложнили процесс адресации в микропроцессорах x86. Хотя адрес формируется из двух 16-разрядных регистров, микропроцессор i8086 (а после i80186, i80286) не формировал для адреса 32-разрядное число, (он показался инженерам Intel чрезмерно большим), а обходился 20-разрядным адресом. Микропроцессор разбивает память на перекрывающиеся сегменты. Сегмент – это 64-Кбайтный участок памяти. Каждый новый сегмент начинается через каждые 16 байт. Первый сегмент (сегмент #0) начинается в памяти с ячейки #0(=0000.0000b); второй (сегмент #1) начинается с ячейки #16 (10h=0001.0000b); третий – с ячейки #32 (20h=0010.0000b) и так далее. То есть начальный адрес сегмента памяти всегда кратен 16 и последние 4 бита у этого адреса нулевые. В сегментных регистрах хранят только первые 16 битов начального адреса сегмента памяти. Для микропроцессора i8086 полный 20-разрядный (абсолютный или физический) адрес получался сложением содержимого сегментного регистра, умноженное на 16 (начального адреса сегмента) и содержимого какого-нибудь 16-разрядного регистра общего назначения, указывающего на смещение внутри сегмента (эффективный адрес или смещение).Физический адрес = сегмент*16 + смещение (2) Например, адресная пара регистр ES=1234h и регистр DI=0053h задают следующий абсолютный адрес:ES: DI=10h*1234h+0053h=12340h+53h=12393h. Обратите внимание, что при других значениях в ES=1000h и DI=2393h мы получим тот же абсолютный адрес ES: DI=10h*1000h+2393h=10000h+2393h=12393h. При сложении максимальных значений сегмента и смещения формула 2 даст адрес 0FFFF0h+0FFFFh=10FFEFh, но из-за 20-разрядного ограничения на шину памяти эта комбинация указывает на адрес 0FFEFh. Таким образом, у нас получается совмещение адресов – адреса от 100000h до 10FFEFh соответствовали адресам от 0 до 0FFEFh. Начиная с i80286 шина адреса увеличена до 24 разрядов, i80386 до 32, а с Pentium Pro до 36 разрядов. Меняются и способы адресации к памяти. Микропроцессор x86 позволяет 24 способа адресации.
0
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|