Как научится реверс-инженерингу?
начни с Крис Касперски , хотя там тоже надо быть подготовленным
А что такого сложного в регистрах?
Все просто, в Си вы можете создать переменную разного типа - строка, число, кортеж, массив, флоат, целочисленное число и так далее.
А в ассемблере есть только байт, слово, двойное слово - все кратно байту.
В Си вы можете создать сколько угодно произвольных переменных - a, b, x, y, counter, mysupervariable и хранить в них значения
У процессора нет возможности создавать произвольные переменные. Но есть железно зашитые прямо в процессоре регистры.
И инструкции процессора умеют с регистрами работать.
Некоторые регистры активно используются для хранения промежуточных значений.
Например в Си вы можетеx = 3 * 6
А в ассемблере нельзяячейка_памяти_по_адресу(100) = 3*6
Нет такой инструкции, не предусмотрена архитектурой процессора.
Зато можно занести в регистр AX = 3, в регистор BX = 6 и вызвать инструкцию процессора - умножь значение AX на BX, значение автоматически поместится в AX. mov  ax, 3
mov  cx, 6
mul  cx
Результат будет в регистре AX. Затем второй инструкцией можно будет занести результат из AX в ячейку памяти 100.mov [100h], ax
Вот и все.