this post was submitted on 22 Jun 2024
549 points (96.1% liked)

Programmer Humor

19564 readers
590 users here now

Welcome to Programmer Humor!

This is a place where you can post jokes, memes, humor, etc. related to programming!

For sharing awful code theres also Programming Horror.

Rules

founded 1 year ago
MODERATORS
 
you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 4 points 4 months ago

Assembly is a direct mapping to instructions. It just converts the text into machine code directly,

Kinda... yes and no? At least with x86 there's still things like encoding selection going on, there's not a 1:1 mapping between assembly syntax and opcodes.

Also assemblers, at least those meant for human consumption (mostly nasm nowadays) tend to have powerful macro systems. That's not assembly as such, of course.

But I think your "a compiler changes the structure of the code" thing is spot-on, an assembler will not reorder instructions, it won't do dead code elimination, but I think it's not really out of scope of an assembler to be able to do those things -- compilers weren't doing them for the longest time, either.

I think a clearer division would be that compilers deal with two sets of semantics: That of the source language, and that of the CPU. The CPU semantics don't say things like "result after overflow is undefined", that's C speaking, and compilers can use those differences to do all kind of shennanigans. With assemblers there's no such translation between different language semantics, it's always the CPU semantics.