По пунктам.
1. Как получилось не знаю))) Это вопрос к компилятору. Насколько знаю, ИАР регистровую пару Y отводит под указатель стека данных. Поэтому он не использует ее для пользовательские нужды. А алгоритм использования X, Z не знаю. По идее ИАР их использует по очереди. Если создать еще один указатель, то это будет Z. Но это из области предположения.
2. В составе ИАР есть файл intrinsics.h. В этом файле есть уже готовые функции. Вся информация есть в помощи.
3. Так просто, для меня, удобочитаемо. И меньше писанины)
Честно тоже поражен))) Какой замечательный ИАР. Может воплотить задуманное)).