Векторный сброс настроек и документация по педантике. Биты против байтов
Отрывок из документации по разработке Intel, том 3, раздел 9
Первая инструкция, которая выбирается и выполняется после аппаратного сброса, находится по физическому адресу FFFFFFF0H.
Этот адрес на 16 байт ниже самого верхнего физического адреса процессора.
EPROM, содержащий код инициализации программного обеспечения, должен находиться по этому адресу.
Адрес FFFFFFF0H находится за пределами адресуемого диапазона 1 Мбайт процессора в режиме реального адреса.Процессор инициализируется по этому начальному адресу следующим образом.
CS-регистр состоит из двух частей: видимой части селектора сегмента и скрытой части базового адреса.
В режиме реального адреса базовый адрес обычно формируется путем сдвига 16-битного значения селектора сегмента на 4 бита влево, чтобы получить 20-битный базовый адрес. Однако во время аппаратного сброса селектор сегмента в регистре CS загружается с F000H, а базовый адрес загружается с FFFF0000H. Таким образом, начальный адрес формируется путем добавления базового адреса к значению в регистре EIP (то есть FFFF0000 + FFF0H = FFFFFFF0H).
Мой вопрос заключается в том, почему здесь используется слово bytes, когда кажется, что оно имеет смысл только для битов. Предполагая, что физический предел процессора 0xFFFFFFFF
затем 0xFFFFFFF0
это 16 bits
от этого предела, а не байтов. Теперь, если флэш-память Intel должна содержать однобайтовые значения для каждого адреса, отображенного там наверху, тогда, я думаю, мы можем назвать 16 бит, байтов?
1 ответ
Из тома 1 Руководства разработчика ПО для архитектур Intel® 64 и IA-32: Базовая архитектура, раздел 1.3.4 на стр. 30:
Процессор использует байтовую адресацию. Это означает, что память организована и доступна как последовательность байтов. Независимо от того, осуществляется ли доступ к одному или нескольким байтам, адрес байта используется для определения местоположения байта или памяти байтов.
По сути, байт является самой маленькой адресуемой единицей в памяти. Чтобы определить значение одного бита, нужно извлечь весь байт, который содержит его значение.
Разница между 0xFFFFFFFF
а также 0xFFFFFFF0
является 0x0F
или 15 в десятичном виде. Когда мы включаем байт в 0xFFFFFFF0
в расчете это 16. Память адресуется по байту, поэтому она "на 16 байтов ниже самого верхнего физического адреса процессора".
Честно говоря, я не знаю, как вы пришли к этим 16 битам. 16 бит могут быть представлены четырьмя шестнадцатеричными цифрами (одна шестнадцатеричная цифра соответствует одному клеву, то есть 4 битам), и нигде в вашей цитате я не вижу какой-либо связи с этим.