I once made a blog about how assembly is bloated so today I decided to try fasm, it was amazing, it's almost as efficient as C generated ELF,
For example, using NASM (or YASM but the difference is only 0.1 KB if not less) a Hello world program would look like this:
<code> <pre>
BITS 64
segment .text global _start
_start: mov rax, 1 mov rdi, 1 mov rsi, m mov rdx, ml syscall
mov rax, 60
mov rdi, 0
syscall
segment .rodata m: db "Hello world!", 10 ml: equ $ - m
</pre> </code>
And when compiled using:
$ nasm -felf64 a.asm && ld -o a a.o
Where a.asm
is the assembly source code you see above you get a 8.7 KB
binary
So now let's do the same but using FASM:
<code> <pre>
format ELF64 executable 3 segment readable executable
_start: mov rax, 1 mov rdi, 1 mov rsi, m mov rdx, ml syscall
mov rax, 60
mov rdi, 0
syscall
segment readable m: db "Hello world!", 10 ml = $ - m
</pre> </code>
The code hasn't changed much but when we compile this code using:
$ fasm a.asm && chmod a+rx ./a
Where a.asm
is the assembly source code you see above you get a 235 B
binary
That's literally 8.465 KB
improvement for only changing 5 lines of code... That's only one byte larger than out source code -- 234 B
Crazy how fast, small and nice this assembler is, give it a try! :)