Перераспредели регистры. Буфер назначения храни в HL, тогда не надо будет приседать с пересылкой через промежуточные регистры. В два раза сократишь исходник