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

Тема в разделе "WASM.X64", создана пользователем drem1lin, 18 июл 2011.

  1. drem1lin

    drem1lin Member

    Публикаций:
    0
    Регистрация:
    17 мар 2009
    Сообщения:
    300
    Здравствуйте, при написании программы возникла проблема с доступом к ячейке памяти. Вроде по документации все просто и красиво, а на деле возникли непонятки. Пишу под DOS, перевожу процессор в 64 битный режим и пытаюсь обратиться к ячейке памяти.
    Код (Text):
    1. SomeDataAdr equ 3000000
    2. ... ;инициализация lm
    3. and [SomeData+0ch], 0ffffdfh        ;вот тут проблема
    Я смотрел под отладчиком, если COM-программа начинается из сегмента 0ab8h, то адрес к которому произойдет обращение не 300000сh, а 300ab8ch. Подскажите, в чем я ошибаюсь? отлаживал под Simnow 4.4.6
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    drem1lin
    SomeData чему равно?
    SomeDataAdr equ 3000000 а это то тут причем?
    Ошибка в 13 строчке.
     
  3. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Simnow это не отладчик, а эмулятор. На сайте АМД очередной SimNow есть только под 64-битные Линукс и Винду. Ни там, ни там ДОС, который 16-бит, нет. Что ты запускал одному богу известно.
    Теперь медитируем : SomeData equ 3000000h Сегмент 0ab8h - Адрес 0ab80h
    3000000h+0ab80h+0ch=300ab8ch Чего намешал, то и получил :)
    Хотя намедитировал: ты загрузчик отлаживаешь :)
     
  4. drem1lin

    drem1lin Member

    Публикаций:
    0
    Регистрация:
    17 мар 2009
    Сообщения:
    300
    PaviaА что не нравиться то? Я объявил константу и обращаюсь по физическому адресу в памяти. можно было написать и так and [300000ch], 0ffffdfffh
     
  5. drem1lin

    drem1lin Member

    Публикаций:
    0
    Регистрация:
    17 мар 2009
    Сообщения:
    300
    valterg
    Да, это эмулятор , я его запускаю на 64 битной винде, а эмулирую я машину с досом, и встроенным же в simnow отладчиком смотрю свою программу. А вотпрос в том что по документации база сегмента в формировании адреса не учавствует.
     
  6. drem1lin

    drem1lin Member

    Публикаций:
    0
    Регистрация:
    17 мар 2009
    Сообщения:
    300
    решение я нашел используя регистр для хранения адреса. непонятки были с адресацией, так в команде 1й параметр относительный адрес, но он все равно вычисляется не верно. почему непонятно(
     
  7. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    drem1lin
    Про адресацию в LONG MODE все верно, но без исходника и объяснения в чем компилите и как линкуете подсказать ничего нельзя. У вас смесь 16-битного и 64-битного кодов... Лично я не представляю ТАКОГО, ну только в загрузчике. Скорее всего компилятор вас не понял.
    +++++++++++++
    И как вариант : глюк эмулятора. Никто и не подозревал, что вы будете эмулировать такой вариант и запрограммировали с ошибкой.