Форум: "Начинающим";
Текущий архив: 2008.01.20;
Скачать: [xml.tar.bz2];
Внизtimer:longint absolute $0000:$046C; Найти похожие ветки
← →
Blind Guardian (2007-12-23 13:00) [0]Здравствуйте. Занимаюсь олимпиадным программированием. Вот, прочитал такую вещь:
Использовать стандартную процедуру GetTime в данном случае нерационально, т.к. она осуществляет преобразование времени из внутреннего формата в общепринятый и за счет этого работает долго. Гораздо эффективнее напрямую обращаться к 4-байтному числу, расположенному по адресу $0000:$046С, в котором хранится текущее значение таймера. Это значение увеличивается на единицу каждые 55 миллисекунд, то есть примерно 18.2 раза в секунду. Для реализации отсечения по времени заводится переменная с непосредственным указанием адреса и переменная, в которой хранится время окончания работы:
Var Timer : Longint Absolute $0000:$046C;
Вот, попытался так сделать. Выводит
[Error] Variable name expected
(курсор ставит после второго двоеточия)
В чем же дело?
← →
savyhinst © (2007-12-23 13:04) [1]Может в том, что такие конструкции в Delphi не катят? Absolute - это же вроде совсем для другово...
var
Str: string[32];
StrLen: Byte absolute Str;
← →
Григорьев Антон © (2007-12-23 13:09) [2]Даже по тому, как записан адрес (в виде двух 16-разрядных полей - смещения и сегмента) видно, что это отосится к 16-разрядным приложениями. В Turbo Pascal"е действительно можно так делать - размещать переменную по абсолютному адресу, и тогда обращение к этой переменной становится просто манипуляцией с данными по этому адресу. Но в Win32 с его виртуальным адресным пространством размещение переменной по абсолютному адресу бессмысленно, поэтому в Delphi такой возможности больше нет. Осталась только вторая форма использования absolute - размещение переменной по тому же адресу, по которому уже размещена другая переменная, т.е. то, что написал savyhinst © (23.12.07 13:04) [1]. Так что вы просто выбрали не ту ОС и не ту IDE для реализации прочитанной вещи.
← →
Григорьев Антон © (2007-12-23 13:15) [3]
> расположенному по адресу $0000:$046С
Кстати, дрес записан неправильно. Все системные переменные располагались в сегменте $0040, поэтому надо писать $0040:$006C. Из-за особенностей адресации памяти в реальном режиме интеловских процессоров это, в принципе, то же самое, но идеологически так правильнее.
← →
Blind Guardian (2007-12-23 13:48) [4]Большая жаль ))) ясно, спасибо
← →
Anatoly Podgoretsky © (2007-12-23 14:08) [5]> Blind Guardian (23.12.2007 13:00:00) [0]
Ты на чем пишешь и в какой ОС?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.01.20;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.052 c