1 Память компьютера . 1 1.Знакомство с памятью. Память компьютера- это своего рода черновик в котором записывается рабочая информация ( данные и команды ) в процессе ее обработки. Информация в памяти хранится до выключения питания. Байт ( 8 бит) - единица количества данных в памяти. Байт принимает 256 различных значений. Слово - 2 байта ( 16- бит ). Строка символов- последовательность байтов, интерпретируемых как текст. Каждый байт имеет собственный адрес, который указывает его расположение в памяти. Адреса памяти нумеруются по порядку, 0-выполняет роль первого адреса. Те же самые числа, которые интерпретируются как данные, могут использоваться для обозначения адреса памяти. Это дает возможность сочетать арифметические действия над данными и числами. 2.Как хранятся слова. Прямой порядок - левый символ текста хранится в левом крайнем байте ( в байте с наименьшим адресом ). Обратный порядок- младшие ( правые )разряды числа хранятся в левом байте. Примерчисло 17А676 (шестнадцатеричная форма) располагается в памяти как : 76А617 . Группа из двух цифр располагается в одном байте. Внутри байта порядок цифр прямой. 3.Адресация памяти. ПК используют 16-битовую арифметику (слово). Слово имеет 65536 значений, т.е. 64К. Использование Слов позволяет адресовать объем памяти 64 Кбайт. Чтобы увеличить объем памяти в ПК используются сегментированные адреса памяти. Сегментированные адреса составляются из двух Слов (16-бит). Одно из них называется- сегментное значение, а второе - смещение. Пример. ABCD - Сегментное значение. 1234- Смещение. Абсолютный адрес получается за счет сложения сдвинутого на один разряд (шестнадцатеричный) в лево Сегментного значения со Смещением: ABCD0 + 1234 ACF04 Абсолютный адрес оперативной памяти , который имеет 5 шестнадцатеричных цифр ( 45=20 двоичных ) и позволяет адресовать 1 048 576 байт памяти, т.е. 1 Мбайт. Существует стандарт записи сегментированных адресов: для нашего примера ABCD:1234 . Сегментное значение указывает на ту область адреса, которая кратна 16, т.к. адрес оканчивается на 0. Смещение указывает местоположение байта внутри сегмента. Так как 16-битовое Смещение имеет 64К значений, то оно позволяет адресовать память объемом 64Кбайт в рамках одного сегмента. Нортон П. Программно-аппаратная организация IBM PC. - М.: Радио и связь, 1992. 327 с. 1 2 4.Регистры. Сегментная часть адреса располагается в четырех специальных сегментных регистрах : CS-кода, DS-данных, ES-данных дополнительный, SS-стека; Большую часть времени эти регистры остаются неизменными. Смещение программы получают из разных регистров: AX, BX, CX, DX- общего назначения; SI, DI-регистры индексов. Смещение адреса может также присутствовать непосредственно в команде машинного языка или вычисляться путем сложения содержимого регистров и операнда команды. С сегментированными адресами имеют дело при работе на языке ассемблер 5. 64-Кбайтный предел. Если Сегментное значение и Смещение постоянны - малая модель памяти (ограничивает программу в рамках 64К кода и 64К данных). Если данные величины обе переменны в ходе программы - имеем большую модель. Если одна из двух величин изменяется - промежуточная модель. Использование той или иной модели влияет на сложность и эффективность программы. 6. Рассмотрим назначение основных полей кода команды ( рис.1. См п.4.1 Лекции №5)1. Код операции (КОП) занимает 1 или 2 байта. Во многих командах пересылок, а также в логических и арифметических командах значение бита W в первом байте КОП определяет разрядность операндов: W = 0 - операция С байтами; w =1 - операция со словами (16 или 32 разряда). Разрядность слов (16 или 32 разряда) определяется режимом работы микропроцессора и устанавливается битом D в дескрипторе сегмента кода. При выполнении отдельных команд разрядность операндов может меняться соответствующим префиксом. В ряде команд первый байт КОП содержит поля reg или sreg, определяющие выбор используемых регистров. Трёхбитовое поле reg задает выбираемый регистр в соответствии с разрядностью обрабатываемых операндов (Табл. Поле Разрядность 1.) reg ( REG ) операндов Поле sreg определяет выбор сегментных 8 16 32 регистров и может быть двух или трехбитовым 000 AL AX EAX 001 CL CX ECX (Табл. 2). При этом трехбитовый код sreg позволяет 010 DL DX EDX выбирать дополнительные сегментные регистры FS 011 BL BX EBX и GS i486. Коды sreg=110, 111 не используются. 100 AH SP ESP Выполнение ряда пересылок, арифметических и 101 CH BP EBP логических операций зависит от значения битов d, s в 111 BH DI EDI первом байте КОП: Табл.1. Кодировка регистров d - определяет выбор источника и общего назначения. приемника операндов для вухоперандных команд; Бородин В. Б., Шагурин И. И. Микропроцессор i486. Архитектура, программирование, интерфейс. - М.: Диалог-МИФИ, 1993. - 238 с. 1 3 s - осуществляет расширение знака для 8 sreg sreg Сегментный разрядных непосредственных 2 3 регистр данных. бита бита Влияние битов d, s на выполнение команд 00 000 ES поясняется ниже. 01 001 CS Байт адресации MODR/M содержит три поля 10 010 SS 11 011 DS (рис.2.). Поля MOD и R/M задают адрес одного из 100 FS операндов, который может храниться в регистре или 101 GS ячейке памяти. Кодировка этих полей определяет Табл. 2. Кодировка выбираемый способ адресации. сегментных регистров В одноадресных командах поле REG/КОП содержит дополнительные биты кода операции. В двухадресных командах поле REG содержит код регистра, в котором хранится второй из операндов. Тип команды (одноили двухадресная) определяется первым битом КОП. При этом бит d в КОП задает выбор регистров, используемых в качестве источника и приемника информации при выполнении ряда двухадресных арифметических и логических операций типа регистр-регистр: d=0 - код источника в поле REG/KOII, код приемника в поле R/M; d=1 - код источника в поле R/M, код приемника в поле И/М, код приемника в поле REG/КОП. 7 5 3 2 Кодировка регистров указана в таблицах 1, 2. 6 0 байт SIB. Он содержит 3-битные поля INDEX и MOD REG/КОП R/M BASE, определяющие выбор регистров, используемых в MODR/M качестве индексного и базового регистров, и поле SS, 7 5 3 2 задающее масштабный коэффициент для модификации 6 0 значения индекса (рис. 2.) . Правила формирования адреса SS INDEX BASE SIB при использовании байта SIB нами не рассматриваются. Рис. 2. Форматы байтов Если поле MOD байта MODR/M имеет значение 00 MODR/M и SIB (при некоторых значениях R/М) или 01, 10, то для формирования адреса используется 8-, 16- или 32разрядное смещение. Это смещение задается соответствующими байтами в коде команды, которые располагаются после байтов адресации. При выполнении операций с непосредственной адресацией один из операндов задается в последних байтах команды (рис. 1.). В этом случае КОП ряда команд содержит бит s, определяющий способ использования непосредственно задаваемых данных. Если операции выполняется над байтами (КОП команды содержит бит W=0), то в качестве операнда задается один байт непосредственных данных im8. Если операция выполняется над 16- или 32-разрядными словами (в КОП команды w=l или отсутствует), то возможны следующие варианты. При s=0 непосредственные данные содержат два или четыре байта и в качестве одного из операндов используются im16 или im32, При s=l непосредственные данные содержат один младший байт 16- или 32разрядного операнда, остальные разряды которого принимают значение старшего (знакового) разряда младшем байта. Такой способ формирования операнда называется расширением знака. При обращении к памяти байты MODR/M и SIB определяют адрес младшего байта операнда. Если операция выполняется с 16-или 32-разрядными операндами, то старшие байты выбираются из ячеек памяти, значение адреса которых на 1, 2 или 3 больше определяемых байтами адресации. 4