There have been multiple accounts created with the sole purpose of posting advertisement posts or replies containing unsolicited advertising.

Accounts which solely post advertisements, or persistently post them may be terminated.

programmerhumor

This magazine is from a federated server and may be incomplete. Browse more on the original instance.

skullgiver , in Anyone here use assembly?
@skullgiver@popplesburger.hilciferous.nl avatar

Assembly isn’t that hard. It’s the same imperative programming, but more verbose, more work, and more random names and patterns to remember. If you can understand “x += 3 is the same as x = x + 3”, you can understand how the add instruction works.

I wouldn’t be able to write Rollercoaster Tycoon in assembly because keeping track of all that code in assembly files must be hell, but people pretending like you need to be some kind of wizard to write assembly code are exaggerating.

These days, you won’t be able to beat the compiler even if you wrote your code in assembly, maybe with the exception of bespoke SIMD algorithms. Writing assembly is something only kernel developers and microcontroller developers may need to do in their day to day life.

Reading assembly is still a valuable skill, though, especially if you come anywhere near native code. What you think you wrote and what the CPU is actually trying to do may not be the same, and a small bit of manual debugging work can help you get started resolving crashes that make no sense whatsoever. No need to remember thousands of instructions either, 99% of assembly code is just variations of copying memory, checking equality and jumping anyway. Look up the weird assembly instructions your disassembler spits out, they’re documented very well.

leisesprecher ,

Assembly is hard, because you need to understand your problem on multiple levels and get absolute zero guidance by compilers.

Even C guides you a tiny bit and takes away some of the low level details, so you have more mental capacity to actually solve your problem.

Oh, and you have a standard library. Assembly seems to involve solving everything yourself. No simple function call to truncate a string or turn a char array to uppercase.

gens ,

Missing “;” on line 148.

skullgiver ,
@skullgiver@popplesburger.hilciferous.nl avatar

Unless you’re developing an OS or something, you’ll probably be using the C standard library and maybe a bunch of other libraries provided by most distros. Just because you’re doing assembly doesn’t mean you need to program syscalls manually.

Modern assemblers also come with plenty of macros to prevent common mistakes and provide common methods. For instance. NASM comes with things like %strcat to do string concatenation.

I suppose the lack of compiler warnings can be a challenge, but most low-level compilers don’t exactly provide guidance for when you design your program wrong.

No doubt Assembly is harder than Java or Python, but compared to languages like C, I don’t think it’s as hard as people pretend to it to be.

CanadaPlus ,

I wouldn’t be able to write Rollercoaster Tycoon in assembly because keeping track of all that code in assembly files must be hell, but people pretending like you need to be some kind of wizard to write assembly code are exaggerating.

Well, they’ve got a point for the bigger machine codes. Just the barebones specification for x86 is a doorstopper IIRC.

From what I’ve heard, writing big stuff in assembly comes down to play-acting the compiler yourself on paper, essentially.

skullgiver ,
@skullgiver@popplesburger.hilciferous.nl avatar

From what I’ve heard, writing big stuff in assembly comes down to play-acting the compiler yourself on paper, essentially.

I think that’s true for just about any programming languages, though the program you’re “compiling” is a human understanding of what you’re trying to accomplish. Things like val bar = foo.let { it.widget?.frub() ?: FrubFactory::defaultFrub(it) } don’t come naturally to the human mind, you’re already working through the logic required before you start typing.

As for the x86 instruction count: you don’t need to know all of them. For instance, here’s a quick graph of all of the instructions in systemctl on my system:

https://popplesburger.hilciferous.nl/pictrs/image/a35a14ee-93fa-45c7-ae88-95119c39cd2c.png

With the top 15 or maybe to 25 of these instructions, you can probably write any program you can think of, and what’s missing will probably be easily found (just search for “multiply” or “divide”). You don’t need to know punpckldq to write a program.

luciferofastora ,

What language is your pseudocode example modeled after? It vaguely reminds me of some iOs App code I helped debug (Swift?) but I never really learned the language so much as eyeballed it with educated guesses, and even with the few things I double checked it has been a few years, so I have no clue what is or isn’t legal syntax anymore.

skullgiver ,
@skullgiver@popplesburger.hilciferous.nl avatar

That’s Kotlin. Mostly used for programming for the JVM, though it compiles to native code as well these days. Very interesting for cross platform app development, although I rarely do that these days.

I think Swift has a similar syntax, but it doesn’t do some of the less obvious Kotlin tricks as far as I’m aware.

luciferofastora ,

I’ve heard of Kotlin in the context of Android apps, but never actually used or learned it. I did one mobile app dev project with Java in Android Studio, but never had any formal classes on it either and just learned as I went (the result was shit, but we got a decent grade for being able to evaluate the difficulties and shortcomings and point out learnings).

CanadaPlus , (edited )

TIL. I had tried to understand it a bit, but felt lost pretty fast, and then eventually found out that’s because it’s huge. Is there a good intro to the basic instructions you’re aware of?

By “play act the compiler” I mean a fairly elaborate system of written notes that significantly exceeds the size of the actual program. Like, it’s no wonder they started thinking about building machine compilers at that stage.

skullgiver , (edited )
@skullgiver@popplesburger.hilciferous.nl avatar

I believe this guide can get you started pretty quickly to get the basics down. There are tons of guides online, but most of them will give you the basics (“this is how to find a prime number”) and then leave you on your own. Once you know how instructions, calling conventions, and system calls work, the rest of assembly programming is just reading documentation or Googling “how do I X in assembly”.

What can help is using websites like godbolt.org to write simple C programs and looking at the compiled output. Look up instructions you don’t recognize and make sure you don’t enable optimizations, unless you want to deal with atrocities like VGF2P8AFFINEINVQB.

If you don’t mind getting started with old assembly, there are also more comprehensive guides for MS-DOS and old Windows that mostly involve 16 bit and 32 bit programs programming. 64 bit programming is different (uses more registers to pass variables, floating point support is guaranteed, etc.) but there aren’t as many good books on the topic anymore now that it’s become a niche.

I think there are quite a few guides out there for ARM these days, if you have something like a Raspberry Pi or an emulator you can also learn ARM assembly (which has fewer supported weird instructions, but also a tonne of weird stuff).

If you want to go deep, you can also check Ben Eater’s youtube channel where he shows step by step how an 8 bit computer on a breadboard works, how instructions relate to memory, and all that. With some intuition from that, learning amd64 assembly may be a lot easier than going from normal programming languages to assembly.

Edit: to get into understanding assembly programming, [Human Resource Machine[(store.steampowered.com/…/Human_Resource_Machine/) will explain the concepts of assembly programming without ever overtly explaining the concepts. Plus, it’s a fun puzzle game.

CanadaPlus ,

Thank you!

luciferofastora ,

Having toyed with video game reverse engineering, I definitely feel like I ought to learn a bit more. I understand mov, pointers and registers, and I think there was some inc and add in the code I read to try to figure out base pointers and pointer paths (using Cheat Engine), but I think knowing some more would serve me well there.

skullgiver ,
@skullgiver@popplesburger.hilciferous.nl avatar

Modern decompilers like the one packaged with Ghidra helps a lot for intuiting how instructions work. Unfortunately, a lot of video game code is obfuscated, so you’re probably more likely to run into weird instructions, but OK the other hand you’ll learn what they do faster than when you rarely encounter them.

If you want to write amd64 code, you can get away with mastering just one instruction, and that’s the kind of tomfoolery that obfuscated programs will try to use to make your life harder.

Cratermaker , in Came back to learn you have job security

They probably got stuff done, just not the things you left half implemented code for…

leo85811nardo , in Anyone here use assembly?

From my understanding, one of the actual use case of assembly is for cyber security engineers to dump assembly instructions from a compiled program, so they can check for any potential vulnerability. I’ve also seen assembly included in an embedded codebase (the overall project is in C), which I assume is for more optimized performance and deterministic behavior

AFKBRBChocolate , in Anyone here use assembly?

I had an assembly class in college. I didn’t love of at all. Got my first job after graduating and it was writing space shuttle engine control software, which was in assembly. I was kind of surprised at how fast it became natural after dealing with it full time. Still, it felt luxurious when we upgraded the controller and could do the software in C.

leisesprecher ,

“oh no, I had to do literal rocket science”

r00ty Admin , in Anyone here use assembly?
r00ty avatar

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.

pastermil , in Sometimes VSCode just shows you a gal

How is this possible? Some random gal’s github shows up?

burkybang ,
@burkybang@lemmy.world avatar

Not random. Her GitHub username is “type”, so “@type” tags her.

LodeMike ,

That’s “automatically turning domain names into http hyperlinks” but even worse.

renzev ,

Still better than automatically converting :) to 😃

LodeMike ,

Eh.

Chais ,
@Chais@sh.itjust.works avatar

That’s only useful in commit messages, issue discussions and stuff like that. Why would the devs even make that execute in source files, where it’s all but guaranteed to be a false match??

TunaCowboy , in Anyone here use assembly?

Syscalls are sitting right there, and you can always just link libc…

jaybone , in Anyone here use assembly?

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.

CanadaPlus ,

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.

jaybone ,

This was a long time ago. I’m pretty sure it was 8086.

0x0 ,

I learned MIPS as an undergrad. Pretty neat little RISC architecture.

trolololol ,

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.

LodeMike ,

Its still a thing

czardestructo ,
@czardestructo@lemmy.world avatar

Required course work for electrical engineers in the early 2000s.

trolololol ,

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

SomGye ,

I still had to do that in the late 2010s in college

Cethin ,

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.

luciferofastora ,

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.

Bankenstein , in Sometimes VSCode just shows you a gal
darklamer , in Anyone here use assembly?
@darklamer@lemmy.dbzer0.com avatar

It’s now been 18 years since the last time an employer paid me to write assembly, but it’s only been a year or so since the last time I had to read assembly at work (in order to verify what the compiler really was doing).

NauticalNoodle , in Anyone here use assembly?

I’ve been studying Arm Aarch32 lately. I have a software development academic background but I have always been interested in Architecture.

nobleshift , in Anyone here use assembly?
@nobleshift@lemmy.world avatar

NASM FTW

Daxtron2 , in Came back to learn you have job security

Leaving 3 weeks worth of senior work to a junior is your own damn fault.

Aabbcc ,

The meme doesn’t say that happened

geekworking , in Anyone here use assembly?

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.

SidewaysHighways ,

Alright you and Joe McMillan had a great weekend we get it

Presi300 , in Anyone here use assembly?
@Presi300@lemmy.world avatar

Nah, I don’t hate myself that much.

  • All
  • Subscribed
  • Moderated
  • Favorites
  • [email protected]
  • random
  • lifeLocal
  • goranko
  • All magazines