Свежие обсуждения
Консультации

Алгоритм процедуры сравнения времени в формате hh:mm:ss?

Здравствуйте всем! Собственно сабж.
ТЗ: Есть 3и регистра текущего времени в формате Thour,Tmin,Tsec и уставка Shour, Smin, Ssec нужна процедура, которая сравнивает текущее и уставку и сообщает значение меньше^равно^больше.
Сам пока придумал только переводить текущее время и уставку в дес.значение секунд (напр. 12:30:00 = 45000сек) и уже эти значения сравнивать, но хотелось бы что-то по компактнее и побыстрее

 

А зачем переводить в десятичное? Проще сделать по формуле: часы*64*64+минуты*64+секунды. Умножение на 64 - это сдвиг на 6 разрядов, т.е часы<<12+минуты<<6+секунды. Вам ведь нужно только, чтобы было линейное преобразование (т.е. чтобы при нем отношение порядка сохранялось), а будет ли оно с "дырками" или нет - по большому счету наплевать.

 

chav1961: Проще сделать по формуле: часы*64*64+минуты*64+секунды. Да если сделать преобразование на сдвиге влево, так будет работать намного быстрее, и на "дырки" есть они или нет будет || т.к. преобразование и для текущего и для уставки будет одинаковым, но хотелось бы отказаться от этого преобразования вообще, если это конечно возможно и работать непосредственно с регистрами часов и уставки.

 

Кажется придумал как реализоватть процедуру. Сравниваем часы, если Thour>Shour то выходим из процедуры со занчением "больше", Thour<Shour=>"меньше", если заначения "=" то проверяем минуты аналогично часам если и значения минут "=" то проверяем также проверяем секунды.

 

Может я чего-то не понял в условиях задачи, но почему нельзя регистры сравнивать последовательно, начиная со старшего (часов). Если не равны - принимаем решение, если равны - переходим к сравнению минут... и т. д.

AlexAlcoa пока я писал, вы сами предложили то же решение.

 

Да было какое-то локальное помутнение. Текст на asm для 12/16 пиков прилагаю, может кому пригодится.

186656.asm