On x86, for example, you've got a couple of registers and a bunch of instructions that operate on them. Adding two numbers goes something like:
mov eax,23
mov ebx,42
add eax,ebx
That's easier to reason about than what Python/Ruby/Whatever is doing behind the scenes when you do "23 + 42". In Python, for example, that expression is syntax sugar for 23.__add__(42). Both 23 and 42 are objects. How do they come into existence? How is the __add__ method looked up? How is it called? Where are these objects stored? How do they get cleaned up?
Assembly is not hard. It's just tedious. I'd rather do "23+42" and have the Python interpreter spit out the result than move numbers into registers, add them, and then figure out how to call C's printf from asm so I can see nicely formatted results.
PS: the best way to learn asm is to read GCC output in Intel syntax. The worst way to learn asm is to read GCC output in AT&T syntax.
On x86, for example, you've got a couple of registers and a bunch of instructions that operate on them. Adding two numbers goes something like:
That's easier to reason about than what Python/Ruby/Whatever is doing behind the scenes when you do "23 + 42". In Python, for example, that expression is syntax sugar for 23.__add__(42). Both 23 and 42 are objects. How do they come into existence? How is the __add__ method looked up? How is it called? Where are these objects stored? How do they get cleaned up?Assembly is not hard. It's just tedious. I'd rather do "23+42" and have the Python interpreter spit out the result than move numbers into registers, add them, and then figure out how to call C's printf from asm so I can see nicely formatted results.
PS: the best way to learn asm is to read GCC output in Intel syntax. The worst way to learn asm is to read GCC output in AT&T syntax.