Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2015, 23:00   #1
Abimeleh
Пользователь
 
Аватар для Abimeleh
 
Регистрация: 13.07.2012
Сообщений: 57
По умолчанию Преобразование физического адреса в логический

Народ! Подскажите пожалуйста чайнику как преобразовать физический шестнадцатеричный адрес в логический? (16 битный прцессор 8086)
Например дан физ-й адресс: 07800h
как преобразовать его в форму
xxxx:xxxx?
Если есть формула то напишите это формулой. Если нет такой формулы то объясните крайне доступно, шобы такой даун как я, понял

P.S
Вот пример того как по логическому адресу найти физический:
1) К сегменту приписать ноль справа
2) к полученному числу добавить смещение
Пример. Дан лог-й адрес: 370:4100
1) 3700
2) 3700 + 4100 = 7800
Ответ: 07800

А вот как эту схему переделать в обратном порядке - ума у меня не хватает....
How ugly are feet of those who bring bad news. (comp Romans 10:15)

Последний раз редактировалось Abimeleh; 29.01.2015 в 17:33. Причина: опечатки в тексте
Abimeleh вне форума Ответить с цитированием
Старый 29.01.2015, 10:00   #2
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

преобразовать физический адрес в адрес в вида: сегмент:смещение - невозможно

вернее преобразовать, то можно - только это бесполезно, т.к. одному физическому адресу соответствует - множество логических (нет однозначного соответствия)

т.е. на основе вашего примера:
Код:
логический - 370:4100 - физический 7800 (hex)
логический - 200:5800 - физический 7800 (hex)
логический - 000:7800 - физический 7800 (hex)
и т.д.
и таких вариантов (соответствий одному физическому - 2^32 штук логических)

Цитата:
переделать в обратном порядке - ума у меня не хватает....
а собственно говоря, зачем вам это нужно???
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.

Последний раз редактировалось Niro; 29.01.2015 в 10:09.
Niro вне форума Ответить с цитированием
Старый 29.01.2015, 12:42   #3
Abimeleh
Пользователь
 
Аватар для Abimeleh
 
Регистрация: 13.07.2012
Сообщений: 57
По умолчанию

Цитата:
Сообщение от Niro Посмотреть сообщение
преобразовать физический адрес в адрес в вида: сегмент:смещение - невозможно

вернее преобразовать, то можно - только это бесполезно, т.к. одному физическому адресу соответствует - множество логических (нет однозначного соответствия)

т.е. на основе вашего примера:
Код:
логический - 370:4100 - физический 7800 (hex)
логический - 200:5800 - физический 7800 (hex)
логический - 000:7800 - физический 7800 (hex)
и т.д.
и таких вариантов (соответствий одному физическому - 2^32 штук логических)


а собственно говоря, зачем вам это нужно???

А щас объясню для чего.. Я перевожу с английского файлы справки программы emu8086 (эмулятор процессора). В данный момент работаю над главой "глобальная таблица памяти". Так вот там есть таблица с названием: "Таблица памяти эмулятора (и типичного ibm pc)" .
В левой колонке - Физические адреса участков памяти в hex'е , справа - описание. В эмуляторе нахожу физический адрес из левой колонки и проверяю действительно ли там находится то что заявлено в описанни.

Так вот с этой таблицей проблем нет. Всё соответствует.
А вот с таблицей "Область системной информации" [System information area (memory from 00400h to 00500h)] начинаются непонятки...
В нахожу физ адрес из левой колонки, и смотрю в эмуляторе что там находится не то что в описании. У меня возникло предположение что в таблице - опечатка, и вместо физ адресов даны логические. Разные опечатки и ошибки (возможно наборщика текста) я находил и ранее, поэтому и возникло такое предположение...
P.S сам текст перевода и оригинала могу выслать вам электронной почтой.
Для меня это важно, поскольку я начал изучать ассемблер именно по этому самоучителю.
How ugly are feet of those who bring bad news. (comp Romans 10:15)
Abimeleh вне форума Ответить с цитированием
Старый 29.01.2015, 14:16   #4
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

Цитата:
В нахожу физ адрес из левой колонки, и смотрю в эмуляторе что там находится не то что в описании
вы это (например) имеете ввиду:

Цитата:
0040h:004A WORD Number of columns on screen.
Default value: 0032h (50 columns).
не совпадает default value из справки?
мне кажется это не особо важно.

данные, которые находятся по указанным адресам зависят от конфигурации вашего пк (эмулятора), как вы сами пишите "Область системной информации" - а уж какая там конфигурация - это дело десятое.
например, если я напишу такой код на турбо-паскале:
Код:
begin
 p:= ptr ($040,$4a);
 write (p^);
end.
то результат будет 80 колонок, так как это стандартный видео-режим, и таки да, оно отличается от dafault value (50 colums)

всё это ИМХО, ассемблеров не знаем, с эмуляторами не работали
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.
Niro вне форума Ответить с цитированием
Старый 29.01.2015, 17:29   #5
Abimeleh
Пользователь
 
Аватар для Abimeleh
 
Регистрация: 13.07.2012
Сообщений: 57
По умолчанию

Да, именно это, я имел ввиду.. Спасибо за ответ.
How ugly are feet of those who bring bad news. (comp Romans 10:15)
Abimeleh вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразование адреса ячейки (абсолютный -> относительный) VBA thesooply Microsoft Office Excel 2 07.11.2013 12:04
Моделирование физического объекта на С++. DaryaArt Фриланс 2 06.04.2012 02:15
htaccess, преобразование адреса Mortimoro PHP 1 12.09.2011 12:05
преобразование десятично-точечной записи ip-адреса в их двоичное представление 0vavan0 Работа с сетью в Delphi 1 17.11.2010 09:40
Логический и Физический адреса TGrey[WoLf] Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 06.07.2010 22:35