Здравствуйте, при написании программы возникла проблема с доступом к ячейке памяти. Вроде по документации все просто и красиво, а на деле возникли непонятки. Пишу под DOS, перевожу процессор в 64 битный режим и пытаюсь обратиться к ячейке памяти. Код (Text): SomeDataAdr equ 3000000 ... ;инициализация lm and [SomeData+0ch], 0ffffdfh ;вот тут проблема Я смотрел под отладчиком, если COM-программа начинается из сегмента 0ab8h, то адрес к которому произойдет обращение не 300000сh, а 300ab8ch. Подскажите, в чем я ошибаюсь? отлаживал под Simnow 4.4.6
Simnow это не отладчик, а эмулятор. На сайте АМД очередной SimNow есть только под 64-битные Линукс и Винду. Ни там, ни там ДОС, который 16-бит, нет. Что ты запускал одному богу известно. Теперь медитируем : SomeData equ 3000000h Сегмент 0ab8h - Адрес 0ab80h 3000000h+0ab80h+0ch=300ab8ch Чего намешал, то и получил Хотя намедитировал: ты загрузчик отлаживаешь
PaviaА что не нравиться то? Я объявил константу и обращаюсь по физическому адресу в памяти. можно было написать и так and [300000ch], 0ffffdfffh
valterg Да, это эмулятор , я его запускаю на 64 битной винде, а эмулирую я машину с досом, и встроенным же в simnow отладчиком смотрю свою программу. А вотпрос в том что по документации база сегмента в формировании адреса не учавствует.
решение я нашел используя регистр для хранения адреса. непонятки были с адресацией, так в команде 1й параметр относительный адрес, но он все равно вычисляется не верно. почему непонятно(
drem1lin Про адресацию в LONG MODE все верно, но без исходника и объяснения в чем компилите и как линкуете подсказать ничего нельзя. У вас смесь 16-битного и 64-битного кодов... Лично я не представляю ТАКОГО, ну только в загрузчике. Скорее всего компилятор вас не понял. +++++++++++++ И как вариант : глюк эмулятора. Никто и не подозревал, что вы будете эмулировать такой вариант и запрограммировали с ошибкой.