In Praise of the Disassembler
queue.acm.org
queue.acm.org
This over-simplification is getting tiring. What's a typedef struct in assembly again? Or an union?
Like it or not, C _is_ a high level language.
Except on a proper Macro Assembler my code doesn't vanish just because I missed a condition that made use of UB.
I find these tropes are often perpetuated by people who program but are basically non-programmers e.g. the guy who taught me C at university (I already knew C) was one of those people who thinks everything fast must be implemented in C because his area of work hasn't moved to C++ yet.
But people forget how high-level assembly can be, especially if using a macro assembler (which almost anyone does).
The line between “my language handles this for me” and “my macro/function handles this for me” gets blurred pretty easily.
What actually makes C a high-level language is the abstract memory model, not the structured programming features or type system.
(also, on today's CPUs, even assembly code is a high-level language)
It dealt well with the "struct fields are just glorified offsets" side of the picture, but you still had to be very aware of the width of the operands.
That doesn't make C high-level. It makes C some kind or weird chimera whose nature changes depending on what subject you are talking about.
[section discard]
[org 0]
node:
.next: dd 0
.prev: dd 0
.foo: times(foo.len) db 0
.bar: dw 0
.len:
:)I know somebody else who sticks to the plain assembly listing view. People have their preferences.