Главная страница
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.017 c
2-1198069448
kyn66
2007-12-19 16:04
2008.01.20
RecNo у TADsQuery


2-1198222673
Kolan
2007-12-21 10:37
2008.01.20
Возвращение объекта из процедуры.


15-1197568935
Анатолий
2007-12-13 21:02
2008.01.20
Работа с изображениями в Delphi


15-1197550416
Eraser
2007-12-13 15:53
2008.01.20
Работа с микшером в Vista


15-1197316554
Petr V. Abramov
2007-12-10 22:55
2008.01.20
В.Путин назвал своего преемника