Найти адрес сегмента по указанному физическому и эффективному адресу - PullRequest
2 голосов
/ 10 мая 2019

как найти адрес сегмента по заданным данным?

Физический адрес = 0x119B, эффективный адрес = 0x10AB

какая может быть формула?

1 Ответ

4 голосов
/ 10 мая 2019

Действительный адрес в 16-битном реальном режиме x86 - это просто смещение 20-битного сегмента: смещение адрес .Вопрос, который вам задали, состоит в том, чтобы определить значение сегмента в сочетании с эффективным адресом 0x10AB, чтобы получить физический (линейный) адрес 0x119B.

Физический адрес может быть вычислен из сегмента: смещение пара с формулой physaddr=(segment<<4)+offset или physaddr=(segment*0x10)+offset.Немного переработав формулу:

physaddr = (segment*0x10)+offset
physaddr-offset = segment*0x10
(physaddr-offset)/0x10 = segment
segment = (physaddr-offset)/0x10

Теперь, когда мы знаем, что формула для сегмента segment = (physaddr-offset)/0x10, мы можем выполнить вычисление, чтобы найти ответ на ваш вопрос:

segment = (0x119B-0x10AB)/0x10
segment = 0xF0/0x10
segment = 0xF

Мы можем проверить этот результат, подключив его к исходному уравнению для физического адреса и получив:

physaddr = (0xF*0x10)+0x10AB = 0x119B.
...