PS: I saw that there are courses on udemy regarding CPU design. And I am planning to take that course as well.
PS: I saw that there are courses on udemy regarding CPU design. And I am planning to take that course as well.
If you use whatever your computer can execute, it's fun to make actual, real programs for your operating system in assembly. That means likely, x86-64. (Even if you are on ARM, you computer will emulate x86-64 just fine, most likely.)
Or use ARM, if you are on a not-old Mac or whatever.
The simplest architecture which is still 32 bit and has real hardware, is probably MIPS.
If you want to feel what it's like to control a complete system from end-to-end, you could dive into embedded platforms (AVR/ARM), or emulators of classic machines like the Commodore Amiga with the m68k line of processors. It has a sweet-spot in my heart because on the one hand it's modern enough to have great graphics, sound and even network capability, on the other hand it's simple enough to completely understand.
Either way you choose, you'll have great fun.
I like the CPUlator as a platform. It lets you step through the program one instruction at a time and observe all of the registers and memory locations.
https://cpulator.01xz.net/?sys=arm
This set of lessons is a good starting point:
https://thinkingeek.com/series/arm-assembler-raspberry-pi/
My course repository has several example programs with explanatory comments:
https://github.com/dansmyers/ComputerOrganizationAndArchitec...
To aid in learning, you can always write in C and then output in assembly. Typically you would turn off optimization. The optimizer will often scramble the results to make it better but harder to read.
Have you thought about the class NAND to Tetris? It builds a tetris game but starts and the gate level.
What is your objective? If it’s just for a hobby, maybe try some old consoles programming, like Gameboy or NES, or NeoGeo if you want something a bit more complicated? Anything 32-bit and above might be too much for a beginner.
assembly is a trip into the machine. if the machine is not interesting it'll not be worth it.
there is nothing wrong with diving head first into intel/amd, but its hard.
mips is good to learn if you want to do embedded afaik. arm is used alot in phones. some embedded too
d_tr•1d ago