ADD R3, R0 после команды MUL, к R0 прибавляет не R2*5, а старшую часть умножения на 40., то, что за 16 бит из R2 вылезло.
Код эквивалентный по результату.
в первом примере Y (в точках) делится на 8 (8х8) тайл и умножается на 40 (ширина буфера в байтах) = адрес в нужной строке буфера.
во втором примере сократили деление на 8 и сделали быстрое умножение.