Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: вопрос по си
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
paskal
Использую турбо си под ДОС. Надо обратится к определенной ячейке памяти с заранее известным адресом (например прочитать значение вектора прерывания или переменной BIOS). Не нашел в Си хоть какого способа это сделать.
Что интересно, в Турбопаскале этот вопрос решался легко. Можно в лоб объявить переменную по нужному адресу через оператор ABSOLUTE. Можно добраться к абсолютному адресу через указатель, которому присвоить фиксированное значение через функцию Ptr. А в Си я не одного из этих способов не наблюдаю. Но хоть какой то способ должен быть?
aaarrr
Цитата(paskal @ Aug 15 2011, 20:53) *
А в Си я не одного из этих способов не наблюдаю.

Указатели есть и в "C".

value = *(type *)address;
demiurg_spb
Код
int y = *(int*)0x8000;//Читаем по адресу 0x8000 непосредственно
или
Код
int* p = (int*)0x8000; // Определяем и инициализируем указатель.
int y = *p; //Читаем по адресу 0x8000 через указатель
paskal
Цитата(demiurg_spb @ Aug 15 2011, 21:08) *
Код
int y = *(int*)0x8000;//Читаем по адресу 0x8000 непосредственно
или
Код
int* p = (int*)0x8000; // Определяем и инициализируем указатель.
int y = *p; //Читаем по адресу 0x8000 через указатель

Но мне нужен полный адрес [сегмент:смещение], а здесь только смещение.
demiurg_spb
Аааа... у вас int что 16-ти разрядный, как и вся ось?
Я так не отвечу с этим компилятором не работал, но вроде что-то far-ptr или huge-ptr можно глянуть.
Код
int far* p = 0x80001000;// указатель 32 разряда - покрывает линейно все 4GB.
zltigo
QUOTE (paskal @ Aug 15 2011, 19:21) *
Но мне нужен полный адрес [сегмент:смещение], а здесь только смещение.

Совершенно не приципиально. Указатели есть и far. Хотя можете использовать готовые макросы MK_FP и подобные. В документации абсолютно все есть.
SSerge
У ТурбоС есть модификаторы near, far и huge. Используются примерно так:
char near *ncp;
char far *fcp;
char huge *hcp;
Указатели far и huge - "длинные", 32-разрядные, а near короткий, только 16 бит смещение от DS.
Вся необходимая информация по ним есть прямо во встроенной справке.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.