Рассматривать регистры как глобальные переменные для процессора.Есть "eax", "ebx" и куча других.Кроме того, вы можете выполнять только определенные операции через регистры - например, нет инструкции прочитать из одной ячейки памяти и записать ее в другую (кроме случаев, когда местоположения обозначены определенными регистрами - см. Инструкцию movsb и т. Д.).
Таким образом, регистры обычно используются только для временного хранения значений, необходимых для какой-либо операции, но они обычно не используются в качестве глобальных переменных в общепринятом смысле.
Вы правы в том, что "mov var1, var2"по сути, это присваивание, но вы не можете использовать две переменные на основе памяти в качестве операндов;это не поддерживается.Вместо этого вы можете сделать:
mov eax, var1
mov var2, eax
..., что имеет тот же эффект, используя регистр eax как временный.