Адресация памяти в DOS

Тема в разделе "WASM.BEGINNERS", создана пользователем Administrator, 1 мар 2010.

  1. Administrator

    Administrator New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2009
    Сообщения:
    23
    Вот мне не понятно, к примеру видеопамять в режиме 03 лежит по физическому адресу B8000, но для обращение к ней мы используем адрес в формате сегмент:смещение, а именно 0b800:0000, я знаю, что физический_адрес=сегмент+смещение=0b800+0000=b800.
    Несоответсятвие получается.
    И вообще, если считать, что физический_адрес=сегмент+смещение, то выходит, что данные по адресу 0100:0000 и 0000:0100 совпадают, но это не так:
    Код (Text):
    1. -d 0100:0000
    2.  
    3. 0100:0000  00 00 00 00 00 00 00 00-00 00 00 00 48 00 70 00   ............H.p.
    4. 0100:0010  58 01 A7 00 8E 00 80 03-00 00 00 00 FF FF 05 00   X...............
    5. 0100:0020  1D 00 17 04 D2 03 00 00-FF FF 00 00 00 00 00 00   ................
    6. 0100:0030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
    7. 0100:0040  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
    8. 0100:0050  00 00 00 00 00 00 00 00-00 00 00 00 D9 64 1C 07   .............d..
    9. 0100:0060  83 4D 17 04 FA 05 00 00-00 00 00 00 00 00 00 00   .M..............
    10. 0100:0070  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
    11. -d 0000:0100
    12.  
    13. 0000:0100  8A 04 0E 02 FF 03 0E 02-76 09 0E 02 22 DF 00 C0   ........v..."...
    14. 0000:0110  16 E8 00 F0 16 E8 00 F0-16 E8 00 F0 16 E8 00 F0   ................
    15. 0000:0120  16 E8 00 F0 16 E8 00 F0-16 E8 00 F0 16 E8 00 F0   ................
    16. 0000:0130  16 E8 00 F0 16 E8 00 F0-16 E8 00 F0 16 E8 00 F0   ................
    17. 0000:0140  6F EF 00 F0 16 E8 00 F0-16 E8 00 F0 16 E8 00 F0   o...............
    18. 0000:0150  16 E8 00 F0 16 E8 00 F0-16 E8 00 F0 16 E8 00 F0   ................
    19. 0000:0160  16 E8 00 F0 16 E8 00 F0-16 E8 00 F0 16 E8 00 F0   ................
    20. 0000:0170  04 07 22 D5 16 E8 00 F0-16 E8 00 F0 16 E8 00 F0   ..".............
    21. -q
    Не понямаю, как происходит адресация памяти в таких случаях
     
  2. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Изначально (i8086) адресация (шина адреса) была 20-битная.
    Сегментный регистр добавляет по сути 4 бита к 16-битному смещению.
    физический_адрес=(сегмент<<4)+смещение=сегмент*16+смещение.
    B800:0000=(B800<<4)+0000=B8000+0000=B8000

    Данные по адресу 0100:0000 совпадают с 0000:1000 (линейный адрес одинаковый).
     
  3. Phuntik

    Phuntik New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2008
    Сообщения:
    318
    ТС, телеграфируй, дошло ли?
     
  4. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    администратор, а ещё такие вопросы задаёт. стыдно! я хочу быть администратором!
     
  5. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    Сегмент надо на 1 гекс сдвинуть перед сложением. То есть сегмент*16+смещение. Так что B800:0000 - это адрес B8000. На один шестнадцатиричный 0 длиннее :) на всякий случай по второму примеру - тут совсем не то, 0:100 - это адрес 100, а 0100:0000 - это адрес 1000. Но вообще всегда есть несколько вариантов представления одного и того же адреса:

    ...
    1200:0300
    1210:0200
    1220:0100
    1230:0000

    все приведенное соответствует адресу 12300. Вообще, это в любой книге начиная со старого доброго Абеля можно прочитать.
     
  6. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    тс видимо застрелился, поняв что не догнал элементарного :)
     
  7. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Может так проще : адрес в сегментом регистре умножаем на 0х10 и все становится на свои места:
    B800 -> B8000
     
  8. hack_virii

    hack_virii New Member

    Публикаций:
    0
    Регистрация:
    7 июн 2009
    Сообщения:
    71
    Взрослые люди! Гуру! (извиняюсь, если кого это слово коробит, не издевки ради..)
    А взяли и загнобили Одмина!)
    Да еще в бегиннерсах!)
    Не стыдно lee?!(
     
  9. Administrator

    Administrator New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2009
    Сообщения:
    23
    спасибо за ответы. почитал их и др.