- cross-posted to:
- programmer_humor@programming.dev
- cross-posted to:
- programmer_humor@programming.dev
deleted by creator
I get the feeling that all of these assembly jokes are justifications to avoid learning assembly.
You can still make syscalls in assembly. Assembly isnt magic. It isn’t starting from the creation of matter and energy, it’s just very specific code.
It’s just a joke friend.
I said so in my comment, try to keep up.
A very bad one if it requires switching off a large portion of your brain to find it funny.
suspension of disbelief
Ha! I teach assembly and use this one every year to lighten the mood before midterms.
Assembly code is for writing C compilers, and C compilers are for writing Lisp interpreters.
Back in High School in the 80’s me and a buddy wrote a Z-80 editor assembler in TRS-DOS BASIC.
It was not rocket science.
True, it was computer science.
I never did get very far with the TRS-80 Editor Assembler, but that was my first exposure to such things.
I also remember the BASIC code for the Dancing Daemon which was replete with PEEKs and POKEs, such that much of it was written in machine code.
Exactly how we did it too. We created the editor/assembler that peeked to see what was there and display it in Assembly, Hexadecimal, and ASCII.
You could edit whichever version you wanted and it would Poke it into RAM.
You could also save swaths to a file.
Only the most very basic compilers. C compilers are in C mainly.
And that’s how you get the Thompson hack
Talking about bootstrap here?
Indeed
Not the first C compiler obviously. According to this Stack Overflow post, BCPL* begat B, which begat C. Language self-hosting is pretty fascinating.
*Perhaps BCPL was originally written in assembly; I’m not certain: https://github.com/SergeGris/BCPL-compiler
I saw a Scheme interpreter written in assembly running a C compiler written in Scheme.
There’s actually good reasons for this design. It’s easy to write a Scheme interpreter in assembly, but it’s hard to write a C compiler in assembly that handles everything correctly. Much rather write it in higher level language if possible and Scheme lowers the bar to getting there, so you can get away from using assembly as quickly as possible. Or you can copy somebody else’s Scheme implementation of a C compiler because now you’re platform independent.
Then you can write your C compiler in C (or steal a better compiler already written in C) and close the loop. For your final step, you use the C compiler to compile itself.
deleted by creator
I used to write z80 asm without an assembler back when I was a LOT younger. The ZX spectrum manual I had, had the full instruction list with the byte values.
I think it was oddly easier than some higher level languages for some tasks.
But, making changes was an utter nightmare.
I used to make video games entirely in assembly
Syscalls are sitting right there, and you can always just link libc…
Only on the VIC20 and Atari STe. On the VIC20 you had to write the assembler, manually convert it to machine code and enter that into the computer. There was a cartridge with an assembler, debugger and an extra 3.5Kb memory for it but I never got one.
Vic 20 was my first. I watched my dad struggle with and eventually give up on assembly. Something-something and the microbots. I was fearful of it until I took Assembly at Uni. That 2nd/3rd year class was where the final puzzle piece of how computers work fell in place for me.
My first job was writing assembly tests for a DSP hardware design team. Fell in love. Never looked back.
Assembly was easier to me than C/C++.
I remember watching assembly demos in the early-mid 90s and thinking those guys were wizards
IMHO assembly isn’t hard. When you gain enough experience you start to see „visual patterns“ in your code. For example jumping over some lines often equals to a if/else statement or jumping back is often a loop etc. Then you are able to skim code without the necessity to read each line.
The most difficult part is to keep track of the big picture because it is so verbose. Otherwise it’s a handful or two of instructions you use 90+% of the time.
I needed it often in the past in the PLC world but it is dying out slowly. Nonetheless, when I encounter 30+ year old software I’m happy to be able to get along. And your experience transitions to other architectures like changing from one higher language to another.
Nonetheless, if I’m able to choose, I’ll take Go. Please and thank you 😊
The most difficult part is to keep track of the big picture because it is so verbose. Otherwise it’s a handful or two of instructions you use 90+% of the time.
It’s a long time since I wrote any assembly in anger, but I don’t remember this being an issue. Back then Id be writing 2D and 3D graphics demos. Reasonably complex things, but the challenge was always getting it fast enought to keep the frame rate up, not code structure.
As you say, I think you just establish patterns to decompose the problem.
Not exactly accurate, I think. Even machine language is bound by the CPU’s architecture. You can’t do anything in machine language that wasn’t specifically provided for by the CPU architects.
It would be more accurate to say it’s like creating a new universe using all the same laws of physics, thermodynamics, cosmology, ethics, etc as our existing universe.
I don’t think accuracy was the goal, it is a joke not a dissertation. It’s more about how it feels to try a language like assembly after working with higher-level languages.
I’ve been studying Arm Aarch32 lately. I have a software development academic background but I have always been interested in Architecture.
Not since the 1980s on a Commodore 64.
SYS64738
Assembly used to be a required course for CS undergrads in the 90s. Is that no longer the case?
Also we had to take something called Computer Architecture, which was like an EE class designing circuits with gates and shit.
Required course work for electrical engineers in the early 2000s.
I had to learn assembly but was one topic of many we handled in architecture. Like one question of one exam. That was one of the toughest professors we had, class was about 2001
I attended two different Bachelor’s courses, one with a very technical (2016-2018) and one with a more high level focus (2018-2023). The first did have a class where we learned how to go from logic gates to a full ALU as well as some actual EE classes, but I didn’t go far enough or memorise the list of classes to remember whether Assembly would have become a thing. We learned programming with first Processing, then C and C++.
The second had C as an elective course, and that was as technical and low-level as it ever got.
Its still a thing
I think the university I went to phased out the EE requirements the year after me. Honestly, I think it should be required. Understanding how the computer “thinks” is such an important skill.
I still had to do that in the late 2010s in college
Which target did you use? Having to learn even a fraction of modern x86 would be ridiculous, but SPARC or something could be good to know, just to reduce the “magic box” effect.
I learned MIPS as an undergrad. Pretty neat little RISC architecture.
I learned mips as graduate. In undergrad had to build with logic gates for things like 2 digit decimal counter and my architecture classes were diagram blocks for a simple CPU. But by that time we knew how to do moderate complexity circuits in VHDL simulation, and we had to make a simple VHDL circuit run for real in FPGA.
This was a long time ago. I’m pretty sure it was 8086.