- cross-posted to:
- programmer_humor@programming.dev
- cross-posted to:
- programmer_humor@programming.dev
Syscalls are sitting right there, and you can always just link libc…
Anyone who thinks OP asking about Assembly with this meme should play the game Turing Complete. It’s great. You have to design a computer all the way from the most basic logic gates (I think you only get a NAND gate to start), designing an ALU and CPU, creating your own machine language, and writing your own programs in the language you designed, and it’s all simulated the whole time. Machine language is pretty advanced as far as things go.
From your description this sounds more like a job in IBM’s R&D department than a game
All the best games sound like jobs when you describe them.
factorio, satisfactory, oxygen not included, RimWorld, Stellaris, dwarf fortress, gregtech new horizons…
We got to do something simular in uni. We modeled the CPU in VHDL and had to set up our own language, then we were to program a game for it. One of the most fun and interesting courses we got to do!
Removed by mod
Mebly I do, and mebly I don’t.
I have Dyslexia ¯_(ツ)_/¯ Sorry.
You dropped this \
Short explanation: Type ¯\\\_(ツ)\_/¯ to see ¯\_(ツ)_/¯.
Long expanation: Lemmy supports formatting, like _italic_ becomes italic. To stop this from happening, you can put a \ before it like \_; the \ isn’t shown. This is why ¯\_(ツ)_/¯ becomes ¯_(ツ)_/¯. To show a \ you need an additional \ like so: \\, and to make sure _ is shown and not turned into italic, it too needs \. This is why ¯\\\_(ツ)\_/¯ becomes ¯\_(ツ)_/¯
The backslash is known as an escape character in this context, because it removes (escapes) the special meaning of the following character.
It’s also used that way in most Unix shells.
I’m sorry, I have no idea what you’re talking about. Could you explain it in assembly?
global _main extern _GetStdHandle@4 extern _WriteFile@20 extern _ExitProcess@4 section .text _main: ; DWORD bytes; mov ebp, esp sub esp, 4 ; hStdOut = GetstdHandle( STD_OUTPUT_HANDLE) push -11 call _GetStdHandle@4 mov ebx, eax ; WriteFile( hstdOut, message, length(message), &bytes, 0); push 0 lea eax, [ebp-4] push eax push (message_end - message) push message push ebx call _WriteFile@20 ; ExitProcess(0) push 0 call _ExitProcess@4 ; never here hlt message: db '¯\\\_(ツ)\_/¯', 10 message_end:
Alternatively, you can just use the `` enclosure, used for single line code.
That is a “grave accent” or a “backtick”, the key you will find on the left of the ‘1’ key and under the ‘Esc’ key on a standard (ISO, maybe) 104/105 key qwerty keyboard.¯\_(ツ)_/¯
Look at mister fancy pants with and assembler.
How about entering straight opcode, operand with only a hex keypad and two pairs of 7 segment LEDs. You can only see one set of numbers at a time. You had to write it out on paper to be able to keep track and count positions so you don’t use your spot.
I had to do this as a project in school. Two 8088 units that we breadboarded to a UART that we used to drive a fiber optic link to communicate with each other with a basic protocol. All descrete components hand wired and coded.
It made you tie all of skills together into a full system of hardware and software.
Alright you and Joe McMillan had a great weekend we get it
I’ve been studying Arm Aarch32 lately. I have a software development academic background but I have always been interested in Architecture.
Nah, I don’t hate myself that much.
Not since the 1980s on a Commodore 64.
SYS64738
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.
Assembly code is for writing C compilers, and C compilers are for writing Lisp interpreters.
Only the most very basic compilers. C compilers are in C mainly.
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
And that’s how you get the Thompson hack
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.
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, but it’s hard to write a C compiler that handles everything correctly. Much rather write it in higher level language if possible and Scheme lowers the bar to getting there.
Then you can write your C compiler in C and close the loop. For your final step, you use the C compiler to compile itself.
I learned assembly for a few weeks when I first started a new job once (didn’t even have anything to do with my job), and I always felt like my brain was tired after trying to write in assembly. Just took so much more mental concentration than writing in c for example.
Ha! I teach assembly and use this one every year to lighten the mood before midterms.
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
I was pretty into x86 asm in my teens. Nasm was my go to. Anyone else ever play with MenuetOS?
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.