Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.049 c
15-1196653587
Думкин
2007-12-03 06:46
2008.01.20
Головоломки профессора Головоломки. Гершензон


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


6-1177335141
Strate
2007-04-23 17:32
2008.01.20
Имя домена по IP


2-1198062635
ммм_ызи
2007-12-19 14:10
2008.01.20
объединить насколько таблиц


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский