Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.01.20;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.018 c
3-1188547204
emelin
2007-08-31 12:00
2008.01.20
Ole. Работа со справочниками 1С из Delphi


2-1198224335
Kolan
2007-12-21 11:05
2008.01.20
Так все таки использовать ли TADOCommand всегда?


15-1197744591
GeLLeR
2007-12-15 21:49
2008.01.20
Протестите прогу


2-1198010239
Bor
2007-12-18 23:37
2008.01.20
Рисование на Panel


2-1198412113
}I{aI-I4er
2007-12-23 15:15
2008.01.20
Простой прикол с блокнотом