Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.011 c
15-1197754927
Johnmen
2007-12-16 00:42
2008.01.20
Отдам в хорошие руки. Москва.


2-1197996711
new_user )
2007-12-18 19:51
2008.01.20
недопонимаю...


2-1198234675
Denis
2007-12-21 13:57
2008.01.20
Отображение текста из dbf


2-1198222508
ZLynX
2007-12-21 10:35
2008.01.20
TFileStream


2-1197991775
REDLORD
2007-12-18 18:29
2008.01.20
УКАЗАТЕЛЬ НА СТРОКУ В КОМПОНЕНТЕ TMEMO




   Наверх