this post was submitted on 22 Jun 2024
543 points (96.3% liked)
Programmer Humor
19623 readers
1120 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
- Keep content in english
- No advertisements
- Posts must be related to programming or programmer topics
founded 1 year ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
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.