I am surprised that you think that RISC-V is more complex than LC3. The RISC-V core instruction set is IMO conceptually simpler; branch instructions take explicit conditionals (they don’t rely on a flag); jump and link specify a destination register; there are no indirect loads and store (because load + load/store does the same thing), and there is real RISC-V hardware that you can actually run your code on.
I actually don't know much about RISC-V. I know LC-3 is much simpler compared to something like x86 but if RISC-V is as simple as you say, perhaps it wouldn't be a bad idea to learn it immediately rather than LC-3.
The base integer RISC-V ISA (RV32I or RV64I), the part that must be present in every RISC-V implementation is very easy to learn. You don't need to bother with the optional extensions if your goal is just to learn assembly language. If you look at RISC-V microcontrollers and ignore the microprocessor variants, the RV32E is even easier to learn, since it is a subset of RV32I. So, you could pick up a $5 microcontroller and actually practice writing some small assembly code to do real things. While I like the Introduction to Computing Systems book, I am not a huge fan of learning toy languages/architectures when equally simple but real languages/architectures exist. Pseudo code was one of the things I hated the most while learning computer science, and though I have tempered my stance over the years, I still prefer playing around with real systems. I learned assembly on 8051 and 8085, so this might be my bias.
I mostly started learing programming by learning Z80 assembler in the early 80's as I was in high school (by myself at home). It was great to have a real understanding of how a computer really works but I never had to use assembly in my various jobs (mostly because I don't work in embedded systems I guess).
You have presented poor argument into discouranging people from learning any assembly language. Why? do you not want people to learn whatever they choose to learn in assembly languages. You seem to know more in assembly but what to discourage ppl from doing so, why? The average computer enthusiast or student will NOT dissuaded by you not to learn anything, unless you have a very strong an convincing rational to discourage them from learning anything. Learning is not a nice excerse so a person had decided to had alread acquired a surmountable amount force drive to learn and can not be easily be dissolutioned by any random folk on TH-cam.
Knowing how a computer really works is valuable. I'm not familiar with that exact microprocessor but RISC-V may be a simple and valuable thing to learn as other comments mention. RISC-V is a very modern new thing as well.
Occasional optimization or debugging scenarios where you have to use a disassembler, not super frequent, but possible. Gives you a better appreciation and understanding of computers. Heres a good reddit thread on this www.reddit.com/r/asm/comments/p5d9tf/why_should_i_learn_assembly/
honestly, normally reading compiler output to understand how to write more optimized C++ code, it's very rare you'd actually use it but if you ever do have to do it to solve something very critical, you can
In all honesty, you don't really need to know it unless you are working on specific domains. I used to know 80386 assembly really well 18 years ago, but I couldn't write a functioning program today. Still, some of the things I learned have stuck with me and I can read/understand x86 assembly code if I see it today. I have used assembly language exactly 0 times in my professional life in the last 15 years.
I am surprised that you think that RISC-V is more complex than LC3. The RISC-V core instruction set is IMO conceptually simpler; branch instructions take explicit conditionals (they don’t rely on a flag); jump and link specify a destination register; there are no indirect loads and store (because load + load/store does the same thing), and there is real RISC-V hardware that you can actually run your code on.
I actually don't know much about RISC-V. I know LC-3 is much simpler compared to something like x86 but if RISC-V is as simple as you say, perhaps it wouldn't be a bad idea to learn it immediately rather than LC-3.
The base integer RISC-V ISA (RV32I or RV64I), the part that must be present in every RISC-V implementation is very easy to learn. You don't need to bother with the optional extensions if your goal is just to learn assembly language. If you look at RISC-V microcontrollers and ignore the microprocessor variants, the RV32E is even easier to learn, since it is a subset of RV32I. So, you could pick up a $5 microcontroller and actually practice writing some small assembly code to do real things.
While I like the Introduction to Computing Systems book, I am not a huge fan of learning toy languages/architectures when equally simple but real languages/architectures exist. Pseudo code was one of the things I hated the most while learning computer science, and though I have tempered my stance over the years, I still prefer playing around with real systems. I learned assembly on 8051 and 8085, so this might be my bias.
I mostly started learing programming by learning Z80 assembler in the early 80's as I was in high school (by myself at home).
It was great to have a real understanding of how a computer really works but I never had to use assembly in my various jobs (mostly because I don't work in embedded systems I guess).
Thanks for some great resources.
You have presented poor argument into discouranging people from learning any assembly language. Why? do you not want people to learn whatever they choose to learn in assembly languages. You seem to know more in assembly but what to discourage ppl from doing so, why? The average computer enthusiast or student will NOT dissuaded by you not to learn anything, unless you have a very strong an convincing rational to discourage them from learning anything. Learning is not a nice excerse so a person had decided to had alread acquired a surmountable amount force drive to learn and can not be easily be dissolutioned by any random folk on TH-cam.
@@thembelssengwayo6896 Sure, it's just my opinion. Learning any assembly language is great, this is just my case for LC-3.
How about MIPS?
They transitioned to Risc-v.
I want to learn assembly so I can reverse engineer things. Is this advice good for that?
Thanks you buddy!
Is there any benefit to learning assembly language for today, for example 6502?
Knowing how a computer really works is valuable. I'm not familiar with that exact microprocessor but RISC-V may be a simple and valuable thing to learn as other comments mention. RISC-V is a very modern new thing as well.
i have joined you and now it is up to you ,I want to learn
After LC3, I'd probable advocate for 6502 Assembly
What are the advantages of learning assembly for a C++, Go dev? I know a bit of Qt, Game dev and web dev.
Occasional optimization or debugging scenarios where you have to use a disassembler, not super frequent, but possible. Gives you a better appreciation and understanding of computers. Heres a good reddit thread on this
www.reddit.com/r/asm/comments/p5d9tf/why_should_i_learn_assembly/
honestly, normally reading compiler output to understand how to write more optimized C++ code, it's very rare you'd actually use it but if you ever do have to do it to solve something very critical, you can
and z80
i learned assembly in college last year. i dont know how to program in assembly.
In all honesty, you don't really need to know it unless you are working on specific domains. I used to know 80386 assembly really well 18 years ago, but I couldn't write a functioning program today. Still, some of the things I learned have stuck with me and I can read/understand x86 assembly code if I see it today. I have used assembly language exactly 0 times in my professional life in the last 15 years.