I just did a quick semi-deep dive into learning assembly!
Why? Because revolutionizing computer programming is a high priority for me, and I no longer trust the wobbling tower of poorly-designed abstractions that modern computing is built upon.
Will revolutionizing programming require the replacement of the most fundamental abstractions we make, such as the function?
I think that might just be the case. (At the very least we should make functions extensible without breaking backward compatibility by having each function accept exactly 1 parameter that is an object or struct; more on that another time, here.) Therefore, learning assembly can help me bypass all of that.
A tutorial I'm loving so far: https://cs.lmu.edu/~ray/notes/nasmtutorial/ .
FYI, if you are trying to use
gcc on Linux to assemble and compile a simple program and you get an error similar to the following.
/usr/bin/ld: hola.o: relocation R_X86_64_PC32 against symbol `puts@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
then instead of running a command like
$ nasm -f elf64 hola.asm && gcc hola.o && ./a.out
$ nasm -f elf64 hola.asm && gcc -g -no-pie hola.o && ./a.out
That is, use
gcc -g -no-pie instead of just