Are you tired of executing your C compiler on your source code to get your binaries? With ppasm's fully-preprocessor x86_64 assembler, you can skip the compiler and move straight to the action!
Let's take a look at some of ppasm's killer features:
| ppasm | literally any C compiler | 
|---|---|
| 4 phases of compilation, super speedy! | 8 phases of compilation, slow and boring... | 
| No types at all, maximum productivity! | Static type system, kills prototyping speed... | 
| Full-blown functional language for macros! | Crappy old macro system, a complete pain... | 
| Unlimited flexibility, anything is possible! | Restricted semantics, C standard controls you... | 
TODO: Comparison with NASM syntax
Let's take a simple example of a factorial. As a C program, this might look like:
unsigned int fac(unsigned int n) {
	unsigned int acc = n;
	while (--n) acc *= n;
	return acc;
}and in NASM assembly, this might be represented as:
fac:
	mov eax, edi
	mov edx, edi
	sub edx, 1
	je .end
loop:
	imul eax, edx
	sub edx, 1
	jne .loop
	ret
end:
	mov eax, 1
	retBut compiling that would take significant effort! One would have to invoke the entire C compiler (a heavyweight tool!) to produce a binary from the first snippet, and one would need to get a third-party assembler to do anything useful with the second. Not so with ppasm:
#include <ppasm/ppasm.h>
assemble (
	mov (eax, edi),
	mov (edx, edi),
	sub (edx, 1),
	je (8R),
	label (8L, imul (eax, edx)),
	sub (edx, 1),
	jne (8L),
	label (8R, mov (eax, 1)),
	ret
)By simply running this through your C preprocessor, the program will be compiled into a string containing the raw-escaped bytes of the assembled instructions! To get the final binary file, all one needs to do is run printf "%b" on the output and redirect the resulting binary stream into your file of choice!