Почему не переписать вместо этого
add ebx,dword ptr [rbp+ECX*4+10h]
Буквально так написать нельзя, потому что нет такого режима адресации в котором можно было бы использовать вместе Rbp (64-битный) и Ecx (32-битный). Можно было бы написать
add ebx,dword ptr [rbp+rcx*4+10h]
, но для этого счётчик цикла должен был бы быть 64-битным, а он, как мы видим, 32-битный (
int i
). Т.е. ответ на вопрос "для чего это": для беззнакового расширения 32-битного счётчика цикла в регистр, который можно использовать для доступа к памяти.
Другое дело, что из исходного кода очевидно, что при обращениях к памяти
i
не выходит из диапазона 0..9, так что разницы между ecx и rcx нет и не может быть. Возможно я что-то упускаю и у компилятора другое мнение на этот счёт, но может быть он просто туповат и не имеет кода который бы мог использовать эту возможность оптимизации, а может такая оптимизация и есть, но она не была включена во время генерации этого кода.