Jeśli piszesz, że procesor, na którym wykonywany jest ten kod, jest taktowany 84MHz, to tych zaledwie kilka instrukcji nie powinno zająć więcej, niż kilka taktów - a więc powinno się to wykonać w akceptowalnym czasie. To takie wstępne domysły, bo nie szukałem listy komend procesora i ich czasu trwania w taktach.
Po pierwsze, jeśli zawsze porównujesz z &dat[199], to utwórz wcześniej wskaźnik na dat[199] i używaj tego wskaźnika w porównaniu. Chyba, że tablica dat jest dynamiczna. Zaoszczędzisz odrobinę czasu na przesuwaniu wskaźnika.
Po drugie, mógłbyś wyjaśnić:
// przeczytanie rejestru 32bity, tylko w celu wyzerowania (dane z rejestru nie są potrzebne)
? Skoro dane nie są potrzebne, to dlaczego je odczytujesz?
Po trzecie - jaki kompilator, jakie flagi kompilacji?