короче мысль пока такая. непонятно в случае с регистрами сколько раз процессор успевает опросить регистр TXE и как долго это длится. Так же непонятно, сколько раз в хале if (TXE) успевает выдать фалс и происходит подсчет таймаута. Если в ХАЛЕ if, else timeout и потом вторая проверка TXE выдает true, и всё это заняло 800 нс, а while(not TXE) занимает по опросу ну например 1мс, или первый опрос while и заход на круг пустого цикла до второго опроса занимает больше по времени, то может быть так оно и выходит, что в хале быстрее. короче надо асм посмотреть, сколько команд процессор шурует на while