Why do we bother with CPU registers in assembly, instead of just working directly with memory?

assembly, cpu-architecture, cpu-registers, performance

Solution

Registers are much faster and also the operations that you can perform directly on memory are far more limited.

Problem

I have a basic question about assembly. Why do we bother doing arithmetic operations only on registers if they can work on memory as well? For example both of the following cause (essentially) the same value to be calculated as an answer: Snippet 1 ``` .data var dd 00000400h .code Start: add var,0000000Bh mov eax,var ;breakpoint: var = 00000B04 End Start ``` Snippet 2 ``` .code Start: mov eax,00000400h add eax,0000000bh ;breakpoint: eax = 0000040B End Start ``` From what I can see most texts and tutorials do arithmetic operations mostly on registers. Is it just faster to work with registers?

Original source

Related problems