помогите с определением времени (или хотя бы тактов) прошедшего со старта процессора советовали rdtsc, но задача заключается в использовании прерываний bios, то есть 32x не пойдет читал про 4 байта по адресу 0000:40С6, но это оказался системный таймер (т.е. обычное время)
хм, глянул карту bios data area - есть только "incremented by INT 8" было бы ваще супер, если бы при включении счетчик равнялся нулю. советую покопать эту переменную - может можно выудить число инкрементов с момента включения (точнее, регистрации обработчика IRQ0 и разрешения прерываний)
Это с момента загрузки. А ему надо с момента старта процессора. ИМХО, задача сия неразрешима (если не привлекать внешних средств).
во во 46c это грубо говоря таймер, который каждые 24 часа обнуляется и при переполнении в 470 пишется 1 ( int 8 каждую 1/18 секунды прибавляет к этому счетчику 1
пробовал и masm 6 и tasm use16 и tasm use32 и tasm32 (5.0) и .586/.586p добавлял хоть ты тресни, при трансляции пишет illegal instruction,
SII ну момент включения прерываний с установленным IRQ0 хендлером и момент включения компа можно считать почти равноценными. на крайняк замерить среднюю разницу и добавлять. или ты не о том времени старта? если ты имеешь в виду, что при перезагрузке он сбросится, то тогда по-моему задача нерешаема. ну разве то да, внешние средства типа какой-нить болтушки на LPT на микрохе читал о том, что он слишком неточный. замерять по нему время нереально, говорят (сам не знаю). относительные интервалы по нему сравнивать между собой еще можно, а оценивать абсолютные вряд ли, мне кажется
можно пропатчить загрузчик в мбр/бутсекторе, чтобы он хукал int 8 и инкрементил свой каунтер. а в момент хука дополнительно считывать 0040:006c, если не будет переполнения с момента старта до считывания, то прочитаться должно нормально. а дальше замерять самостоятельно. raveclassic попробуй db 0x0f, db 0x31
я не знаю масма, поэтому не скажу какие директивы прописать, чтобы он распознал rdtsc. но мой фасмик понимает)
А более древних ассемблеров нет? Уж они-то наверняка знают. MASM 9 из VS2008 понимает (в .586). И как все эти танцы соотносятся с первоначальной задачей? "помогите с определением времени (или хотя бы тактов) прошедшего со старта процессора" (выделение моё).
raveclassic сперва замерить скольким тактам соответствет 1 секунда через rdtsc / Sleep(1000) /rdtsc а потом подсчитать сколько часов, минут, секунд прошло после последней перезагрузки
Через rdtsc время со старта процессора мерить точно нельзя. Потому что: 1) Частота процессора можеть динамически меняться. 2) Разные ядра вообще могут работать на разной частоте одновременно.
Atlantic Вопрос а для чего большая точность в информации о том, когда был включен процессор? Я думаю ТС устроит погрешность в несколько секунд, да и о колчестве ядер пока никто не говорил...
Можно использовать чтение часов реального времени из CMOS, т.е. при старте проги читается значение, которое затем считается начальным. Ну а потом - по необходимости.