Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
11
Добавлен:
12.05.2015
Размер:
172.54 Кб
Скачать

Управління пам'яттю процесора

Пам'ять - це місце, де зберігаються програми, записані в машинному коді і дані, необхідні для роботи програм. В процесорах Intel x86 програми і дані знаходяться в одній і тій же пам'яті і для доступу до них існують дві шини - шина адреси (ША) і шина даних (ШД).

Уявімо пам'ять як послідовність байтів, кожен з яких має свій порядковий номер-адресу. Для виконання будь-яких операцій з певною ділянкою пам'яті процесору необхідно вказати адресу першого байта цієї ділянки, подавши його на шину адреси. Після цього шина даних буде пов'язана з комірками, що знаходяться за вказаною адресою і через неї можна здійснювати необхідні операції.

Різні процесори мають різну розрядність ША і ШД. Розрядність ША визначає максимально можливу адресу в пам'яті, а розрядність ШД дорівнює кількості біт, що пересилаються між процесором і пам'яттю за раз.

У 8086 шина адреси складається з 20 ліній, а шина даних - з 16 ліній, тобто процесор може адресувати 220 байт (1 Мегабайт) пам'яті, при цьому одночасно пересилається по 16 біт (2 байти).

Для того, щоб вирішити проблему адресації 16-бітовим процесором пам'яті більшої, ніж 216 байт (64 Кілобайта), в 8086 використовується механізм сегментації. Фізична (20-бітна) адреса логічно представляється двома 16-бітними компонентами - сегментом і зміщенням, які прийнято розділяти знаком «:».

Сегментна компонента задає адресу початку блоку пам'яті (сегмента), розміром 64 кілобайт, а зміщення - кількість байт від початку сегмента до необхідної ділянки. Процесор використовує дуже просту схему визначення фізичної адреси:

Логічна адреса = сегмент: зміщення. Фізична адреса = сегмент * 16 + зміщення.

Звичайно, 16-бітове зміщення дозволяє одну і ту ж адресу задати різними парами сегмент: зміщення. Наприклад, фізичну адресу 65 можна задати як 0:65, 1:49, 2:33, 3:17 і 4:0, але у відлагоджувачі (debugger) ми їх побачимо в 16-річному коді.

В 80386 ША і ШД містять по 32 лінії. Але для сумісності з 8086, в реальному режимі адресувати можна тільки мегабайт пам'яті, хоча на шину даних вже можна передавати подвійні слова (32 біта).

Мета роботи: Вивчити адресацію даних у пам'яті відеобуфера і сегментах різних типів

Адресація даних в пам'яті відеобуфера

Все, що зображено на моніторі - і графіка, і текст, одночасно присутнє в пам'яті, вбудованої в відеоадаптер. Для того щоб зображення з'явилося на моніторі, воно має бути записане в пам'ять відеоадаптера.

Сучасні відеоконтролери підтримують різноманітні текстові та графічні режими виведення інформації на екран, які відрізняються роздільністю, палітрою кольорів, частотою кадрової розгортки і т. д.

Текстові режими розрізняють за роздільністю (числа відображуваних символів по горизонталі і вертикалі) і кольоровою палітрою (можливий монохромний або 16-кольоровий режим)

Для графічних режимів основною ознакою класифікації є кількість одночасно відображених кольорів і, відповідно, кількість двійкових розрядів, необхідних для зберігання однієї точки зображення. Кілька типів режимів:

Режим

Роздільність

Кількість кольорів

Адреса відеобуфера

Текстовий кольоровий

80х25

16

В800h

Текстовий монохромний

80х25

2

В000h

Кольоровий графічний

320х200

16

А000h

Кольоровий графічний

640х200

16

А000h

Для текстових режимів відводиться спеціальна область пам'яті, що починається з абсолютної адреси B800h: 0000h і закінчується на B800h: FFFFh, тобто 4000 байт, так що на кожну з 2000 позицій екрану доводиться 2 байта (25 рядків х 80 символів). Перший байт містить АSCII код символу. Апаратура дисплея перетворює номер коду АSCII в зв’язаний з ним символ і посилає його на екран. Другий байт ( байт атрибутів) містить інформацію про те, як повинен бути виведений даний символ. Для монохромного дисплея він встановлює, підкреслення символу, виділення яскравістю або негативом і т.д. У кольорових системах байт атрибутів встановлює основний і фоновий кольори символу.

Значення байта - атрибута

Колір символу

0

black

1

blue

2

green

3

cyan

4

red

5

magenta

6

brown

7

white

8

gray

9

light blue

10

light green

11

light cyan

12

light red

13

light magenta

14

yellow

15

bright white

Формат кодування кольору символу показаний на рис 1:

  • біти 0-3 – колір символу

  • біти 4-6 – колір фону

  • біт 7 – мигання (0 – звичайний текст, 1- мигаючий текст )

7

6

5

4

3

2

1

0

Соединительная линия уступом 6Группа 12

Мигання

Рис 1

У текстових режимах за адресою B800h: 0000h лежить байт з кодом символу, що знаходиться у верхньому лівому куті екрана; за адресою B800h: 0001h лежить атрибут цього символу; за адресою B800h: 0002h лежить код другого символу у верхній частині екрана і т.д.

Таким чином, будь-яка програма може вивести текст на екран простою командою пересилання даних, не вдаючись до жодних спеціальних функцій DOS або BIOS.

Адресація даних в сегментах різних типів

Дані можуть зберігатися не тільки в сегменті даних, а й у сегменті коду і в стеку. Особливість зберігання даних в сегменті коду в тому, що вони не повинні оброблятися як команди. Тому дані зазвичай визначають або до точки входу, або між безумовним переходом і міткою переходу:

jmp met

дані

met:

або після останньої команди завершення програми.

У сегменті стека дані можуть визначатися, якщо стек має достатню глибину, тобто (sp)> = 40h, оскільки стек використовується одночасно і системними перериваннями.

Завдання на лабораторну роботу

1. Написати програму для процесора 80386, яка пересилає символьний рядок, з ім'ям і номером варіанта студента. Рядок визначений в одному з сегментів (за варіантом).

2. Рядок символів, що містить ім'я і номер варіанта студента переслати в масив двобайтних слів за певною адресою відеобуфера. Вивести рядок кольором відповідно до варіанта.

Використовувати відлагоджувач (перегляд рядка через ALT + F5)

3. Рядок символів, що містить ім'я і номер варіанта студента переслати також в сегмент коду і стека. Для здачі роботи відкрити відлагоджувач і показати один і той же вміст дампів пам'яті в сегментах коду і стека, а також на екрані.

Таблиця варіантів:

Місцезнаходження рядка-джерела

Колір

Номер рядка екрану для виведення

101

В сегменті даних

black

1

102

В сегменті коду до точки входу

blue

2

103

В сегменті коду після команди виходу в ОС

green

3

104

В сегменті коду після безумовного переходу

cyan

4

105

В сегменті стека

red

5

106

В сегменті даних

magenta

6

107

В сегменті коду до точки входу

brown

7

108

В сегменті коду після команди виходу в ОС

white

8

109

В сегменті коду після безумовного переходу

gray

9

110

В сегменті стека

light blue

10

111

В сегменті коду після безумовного переходу

light green

11

112

В сегменті стека

light cyan

12

113

В сегменті даних

light red

13

114

В сегменті коду до точки входу

light magenta

14

115

В сегменті коду після команди виходу в ОС

yellow

15

116

В сегменті у після безумовного переходу

bright white

16

117

В сегменті стека

black

17

118

В сегменті даних

blue

18

119

В сегменті коду до точки входу

green

19

120

В сегменті коду після команди виходу в ОС

cyan

20

121

В сегменті коду після безумовного переходу

red

21

122

В сегменті стека

magenta

22

123

В сегменті коду після безумовного переходу

brown

23

124

В сегменті стека

white

24

125

В сегменті даних

gray

25

126

В сегменті коду до точки входу

light blue

1

127

В сегменті коду після команди виходу в ОС

light green

2

128

В сегменті коду після безумовного переходу

light cyan

3

129

В сегменті стека

light red

4

130

В сегменті даних

light magenta

5

131

В сегменті коду до точки входу

yellow

6

132

В сегменті коду після команди виходу в ОС

bright white

7

201

В сегменті коду після безумовного переходу

black

8

202

В сегменті стека

blue

9

203

В сегменті коду після безумовного переходу

green

10

204

В сегменті стека

cyan

11

205

В сегменті даних

red

12

206

В сегменті коду до точки входу

magenta

13

207

В сегменті коду після команди виходу в ОС

brown

14

208

В сегменті коду після безумовного переходу

white

15

209

В сегменті стека

gray

16

210

В сегменті даних

light blue

17

211

В сегменті коду до точки входу

light green

18

212

В сегменті коду після команди виходу в ОС

light cyan

19

213

В сегменті коду після безумовного переходу

light red

20

214

В сегменті стека

light magenta

21

215

В сегменті коду після безумовного переходу

yellow

22

216

В сегменті стека

bright white

23

217

В сегменті даних

black

24

218

В сегменті коду до точки входу

blue

25

219

В сегменті коду після команди виходу в ОС

green

1

220

В сегменті коду після безумовного переходу

cyan

2

221

В сегменті стека

red

3

222

В сегменті даних

magenta

4

223

В сегменті коду до точки входу

brown

5

224

В сегменті коду після команди виходу в ОС

white

6

225

В сегменті коду після безумовного переходу

gray

7

226

В сегменті стека

light blue

8

227

В сегменті коду після безумовного переходу

light green

9

228

В сегменті стека

light cyan

10

229

В сегменті коду після безумовного переходу

black

8

230

В сегменті стека

blue

9

231

В сегменті коду після безумовного переходу

green

10

232

В сегменті стека

cyan

11

301

В сегменті коду після команди виходу в ОС

yellow

15

302

В сегменті коду після безумовного переходу

bright white

16

303

В сегменті стека

black

17

304

В сегменті даних

blue

18

305

В сегменті коду до точки входу

green

19

306

В сегменті коду після команди виходу в ОС

cyan

20

307

В сегменті коду після безумовного переходу

red

21

308

В сегменті стека

magenta

22

309

В сегменті коду після безумовного переходу

brown

23

310

В сегменті стека

white

24

311

В сегменті даних

gray

25

312

В сегменті коду до точки входу

light blue

1

313

В сегменті коду після команди виходу в ОС

light green

2

314

В сегменті коду після безумовного переходу

light cyan

3

315

В сегменті стека

light red

4

316

В сегменті даних

light magenta

5

317

В сегменті коду до точки входу

yellow

6

318

В сегменті коду після команди виходу в ОС

bright white

7

319

В сегменті коду після безумовного переходу

black

8

320

В сегменті стека

blue

9

321

В сегменті коду після безумовного переходу

green

10

322

В сегменті стека

cyan

11

323

В сегменті даних

red

12

324

В сегменті коду до точки входу

magenta

13

325

В сегменті коду після команди виходу в ОС

brown

14

326

В сегменті коду після безумовного переходу

white

15

327

В сегменті стека

gray

16

328

В сегменті даних

light blue

17

329

В сегменті коду до точки входу

light green

18

330

В сегменті коду після команди виходу в ОС

light cyan

19

331

В сегменті коду після безумовного переходу

light red

20

332

В сегменті стека

light magenta

21

Соседние файлы в папке SP_ukr