Главная страница
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.015 c
6-1178792527
Виктор007
2007-05-10 14:22
2008.01.20
Проверить на 404 ошибку


15-1197374566
PEAKTOP
2007-12-11 15:02
2008.01.20
Вертикальная совместимость - Ваше мнение


2-1197979576
istok
2007-12-18 15:06
2008.01.20
верна ли функция


2-1197660955
NaRuTo
2007-12-14 22:35
2008.01.20
Уменьшение ресурсов!


15-1197645338
@!!ex
2007-12-14 18:15
2008.01.20
Оплата через интернет.