вівторок, 30 квітня 2019 р.

0xB800

BD.COM із запущеним вірусом die385.
Випадково зіткнувся із авторами симпатичного дебаггера епохи 90-х, BD.COM. Є навіть надія, що його джерельні тексти на github потраплять. Та й згадав в процесі тих розмов про магічне число, B800/B8000. Виявляється, про нього зараз пам'ятає менше людей, ніж я очікував. :-)

Колись давно (1976) вирішила Intel на колінці зробити мікропроцесор,  щоб «закрити» ринок, поки розроблять щось більш достойне. Вийшов він в 1978 і називався 8086. Процесор був 16-бітний, однак міг адресувати цілий мегабайт пам’яті (на що, як ми знаємо, потрібно 20 біт), за допомогою хитрого трюка – адресу ділили на дві частини, по 16 біт. Для отримання «справжньої», фізичної адреси, яку процесор може використати для звертатиметься до пам’яті, першу частину зсували на 4 біти вліво (це те саме, що множити на 16) та додавали другу.

Першу частину, наслідуючи «дорослі» машини, які підтримували сегментацію – можливість ділити пам’ять на ізольовані блоки, сегменти, назвали сегментом. Ніякого розділення, звичайно, не було – воно «приросло» в 80286 (1982), але слово гарне, все таке. Другу – зміщення (відносно початку сегменту). Тобто, адреса складалася із пари segment:offset. Для адреси сегменту було виділено спеціальні сегментні регістри, не змінюючи яких, можна було звертатися до 64Кб, маніпулюючи 16-бітним зміщенням.