Использую турбо си под ДОС. Надо обратится к определенной ячейке памяти с заранее известным адресом (например прочитать значение вектора прерывания или переменной BIOS). Не нашел в Си хоть какого способа это сделать. Что интересно, в Турбопаскале этот вопрос решался легко. Можно в лоб объявить переменную по нужному адресу через оператор ABSOLUTE. Можно добраться к абсолютному адресу через указатель, которому присвоить фиксированное значение через функцию Ptr. А в Си я не одного из этих способов не наблюдаю. Но хоть какой то способ должен быть?
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643
Аааа... у вас int что 16-ти разрядный, как и вся ось? Я так не отвечу с этим компилятором не работал, но вроде что-то far-ptr или huge-ptr можно глянуть.
Код
int far* p = 0x80001000;// указатель 32 разряда - покрывает линейно все 4GB.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
У ТурбоС есть модификаторы near, far и huge. Используются примерно так: char near *ncp; char far *fcp; char huge *hcp; Указатели far и huge - "длинные", 32-разрядные, а near короткий, только 16 бит смещение от DS. Вся необходимая информация по ним есть прямо во встроенной справке.