> размером 512 байт Неа, см:
>> 2 passes, 56 bytes
Специально считерил, "срезав" (см. последние три строчки - ";" в интел-синтаксисе комментарий) конец и дав подходящую команду для записи с помощью dd.
В принципе, можно и сам код еще (существенно) сделать меньше, но тогда оно может резко стать "qemu-only".
Но даже при размере в 512 байт оно выигрывает по размеру общих зависимостей (ни ld-elf, ни ядра не нужно) :P
Кстати, могу еще предложить:
cat hello.asm
org 100h
use16mov dx, msg
mov ah, 09h
int 21h
int 20h
msg db 'Hello World!',0Ah,'$'
% fasm hello.asm
flat assembler version 1.73.09 (16384 kilobytes memory)
2 passes, 23 bytes.
> (на некотором железе не запустится),
Оно ж уже и не модно, давно. Тем более и на "том" железе была куча проблем и проблемок (а так же костылей, костыликов и подпорочек -- достаточно откопать LILO или глянуть (возможно, в старый вариант) GRUB).
Хотя замена старых костылей на "молодежные" PE + FAT32 вообще за гранью добра и зла …
> было "Smallest x86 ELF Hello World" (50 байт + файловый заголовок).
Изначально речь шла о (грубом и ориентировочном) размере в довольно узких рамках ;)
см.
>> компилируется в 113 килобайт, в отличие от мегабайтов Хаскеля
На самом деле тут еще желательно знать, что там линкуется статистически, а что динамически, т.к. тот же HelloWorld на Си при "gcc -static -s" запросто может выдать бинарник на 500КБ c гаком, а для плюсов и на все полтора, но те кто обсуждают, скорее всего более-менее в курсе или же могут посмотреть.
Однако, одно дело "стандартный" бинарник с использованием стандартной библиотеки/рантайма и совершенно другое -- "минимальный бинарник", с вставками ASM и прямыми сискол-вызовами ядра.
Оно конечно прикольно, но вот желающих писать реальный софт таким макаром почему-то особо не видно и практическая ценность таких замеров примерно на том же уровне, что и замер кое-чего другого ;)