susam/hello
A 23-byte “hello, world” program assembled with DEBUG.EXE in MS-DOS
Thành tựu nổi bật
Những danh hiệu mới nhất của dự án
#1 Repository Của Tháng
#1 Repository Của Tháng
#1 Repository Của Tháng
🔤 "Hello, world" 23 byte trên MS-DOS — Nghệ thuật tối ưu Assembly
Chỉ 23 byte. Không framework. Không thư viện. Chỉ có CPU, DOS, và một đoạn mã tinh gọn.
Dự án susam/hello là một chương trình "hello, world" được viết bằng Assembly x86, chạy trên MS-DOS 6.22 và sử dụng trình gỡ lỗi DEBUG.EXE để dịch. Toàn bộ chương trình dài đúng 23 byte — một con số mà tác giả đã tính toán từng byte một. Chuỗi "hello, world" được in ra stdout nhờ ngắt DOS INT 21 với AH=09, và chương trình kết thúc bằng lệnh RET thay vì INT 20 để tiết kiệm đúng 1 byte.
Dự án không chỉ là một đoạn mã — nó đi kèm toàn bộ phiên DEBUG.EXE để tạo ra file HELLO.COM, file script HELLO.TXT để tái tạo, và lệnh printf trên Unix/Linux để sinh binary từ hex. Ngoài ra, README còn phân tích chi tiết sự khác biệt giữa INT 20 và RET khi kết thúc chương trình .COM, bao gồm cả hành vi của stack và trải nghiệm gỡ lỗi.
✨ Điểm nổi bật
- 23 byte chính xác: Mỗi byte đều có mục đích — không lãng phí một single byte nào trong mã máy.
- RET thay INT 20: Tiết kiệm 1 byte bằng cách lợi dụng stack initialization của .COM (SP=FFFE, nội dung 0000 tại FFFE-FFFF), khiến
RETnhảy đếnINT 20tại offset 0. - Nhiều cách tạo binary: Có thể tạo qua phiên DEBUG.EXE tương tác, qua
DEBUG < HELLO.TXT, hoặc quaprintf | xxd -r -ptrên Unix/Linux. - INT 21 AH=09: Dịch vụ DOS chuẩn để in chuỗi kết thúc bằng
$— đơn giản, trực tiếp, không cần hệ thống phụ. - Phân tích chi tiết RET vs INT 20: README giải thích rõ tại sao
RETkhông thể chạy lặp trong debugger (stack không được reset), và cách workaround bằngE FFFE 0 0. - Có boot sector version: Thư mục
ALTchứa các ví dụ không phụ thuộc DOS service, bao gồm cả boot sector in "hello, world" khi khởi động máy. - MIT License: Hoàn toàn tự do sử dụng, sửa đổi, phân phối.
💡 Vì sao đáng chú ý
Đây là một trong những bài tập tối ưu kích thước điển hình nhất trong thế giới Assembly. Việc dùng RET thay INT 20 có vẻ nhỏ — chỉ 1 byte — nhưng đòi hỏi hiểu sâu về cách DOS khởi tạo stack cho file .COM và cách bộ xử lý x86 đọc lệnh từ memory. README không chỉ cho code mà còn giải thích cơ chế bên dưới, biến một đoạn mã 23 byte thành một bài học về kiến trúc phần mềm.
Dự án phù hợp cho bất kỳ ai muốn tìm hiểu sâu về Assembly x86, DOS internals, hoặc đơn giản là thấy được giới hạn tối thiểu của một chương trình có thể chạy được trên hệ điều hành thực. Đây cũng là nền tảng để khám phá thêm project susam/reboot — chương trình reboot chỉ 5 byte.
#Assembly #MS-DOS #HelloWorld #X86 #TiniX
Similar Projects
Discover other similar projects and AI models.
DOSBox Staging is a modern continuation of DOSBox with advanced features and current development practices.
mmBERT: A Modern Multilingual Encoder !License: MIT(https://img.shields.io/badge/License-MIT-yellow.svg)(https://opensource.org/licenses/MIT) !Paper(https://img.shields.io/badge/Paper-Arxiv-red)(https://arxiv.org/abs/2509.06888) !Model(https://img.s...
GlotLID !GlotLID(https://img.shields.io/badge/🤗-Open%20In%20Spaces-blue.svg)(https://huggingface.co/spaces/cis-lmu/glotlid-space) Description GlotLID is a Fasttext language identification (LID) model that supports more than 2000 labels. Latest: Glo...
mmBERT: A Modern Multilingual Encoder !License: MIT(https://img.shields.io/badge/License-MIT-yellow.svg)(https://opensource.org/licenses/MIT) !Paper(https://img.shields.io/badge/Paper-Arxiv-red)(https://arxiv.org/abs/2509.06888) !Model(https://img.s...
A FREE comprehensive reverse engineering tutorial covering x86, x64, 32-bit/64-bit ARM, 8-bit AVR and 32-bit RISC-V architectures.