[fpc-pascal] What's in Hello World
Nikolay Nikolov
nickysn at gmail.com
Thu Jan 11 20:03:48 CET 2024
On 1/7/24 14:21, Ingemar Ragnemalm via fpc-pascal wrote:
>
> Just for comparison, I fired up Think Pascal and made Hello world!
>
> Plain Hello world, closes so quickly that you don't have time to see
> it: 4625 bytes.
>
> Including ShowText and while not Button do; 4639 bytes.
>
> Yes, less than 5k! Progress?
>
Nah! It's bloat, bloat, bloat, horrible bloat!!! I'm not impressed. :)
Nothing beats assembler for DOS:
; nasm asmhello.asm -o asmhello.com
bits 16
cpu 8086
org 100h
mov dx, msg
mov ah, 9
int 21h
ret
msg: db 'Hello, world!', 13, 10, '$'
The produced executable is only 24 bytes (8 bytes of code and 16 bytes
of data):
BA 08 01 B4 09 CD 21 C3 48 65 6C 6C 6F 2C 20 77 6F 72 6C 64 21 0D 0A 24
You can write this down on a sheet of paper, or memorize it and recite
it from memory. Try doing that with 4639 bytes :)
Note that noobs will use the following way to terminate the program:
mov ax, 4c00h
int 21h
But that increases the binary size to 28 bytes. We can put a 'ret'
instruction instead, and that works, because DOS puts a 0000h word on
top of the stack, and that points to CS:0000h, which is the beginning of
the PSP. And that starts with an int 20h, which is the oldschool (MS-DOS
version 1) way of terminating a process, which requires CS to point to
the PSP, which it does, because we're a .com file.
Nikolay
More information about the fpc-pascal
mailing list