Menu
CoddyTech

Assembly Playground

Viết, chạy và chia sẻ đoạn code. Không cần thiết lập.

Coddymain.asm
Output
Click Run to see the output here.

Chạy Assembly online ngay trên trình duyệt

Đây là trình biên dịch Assembly online miễn phí cho code x86-64 viết theo cú pháp NASM. Gõ chương trình, nhấn Chạy, Coddy sẽ biên dịch bằng nasm -f elf64, liên kết bằng ld rồi chạy tệp thực thi Linux trên máy chủ, sau đó hiển thị stdout, stderr và mã thoát. Bạn không cần cài gì: không NASM, không trình liên kết, không máy ảo, không trình biên dịch chéo.

Chương trình mẫu là một điểm vào _start hoàn chỉnh: đọc một dòng từ đầu vào chuẩn rồi in lời chào bằng các syscall thô read, write và exit, không dùng libc. Đó chính là cách Assembly thật sự hoạt động: bạn đưa đối số vào rax/rdi/rsi/rdx, gọi syscall, và kernel lo phần còn lại. Dùng ô stdin bên dưới trình soạn thảo để truyền đầu vào cho chương trình mỗi lần Chạy, giống hệt khi pipe dữ liệu vào một tệp nhị phân thật.

Điều gì làm Assembly playground này hữu ích

  • Bộ công cụ NASM x86-64 thật. Mã nguồn được biên dịch bằng nasm -f elf64 và liên kết bằng ld trên Linux, đúng những lệnh bạn gõ trên máy mình, nên kết quả ở đây khớp với kết quả trên máy thật.
  • Gọi thẳng syscall của Linux. Chương trình mẫu dùng read, write và exit qua lệnh syscall mà không có libc chen vào, để bạn thấy rõ thanh ghi truyền đối số và giá trị trả về ra sao.
  • Hỗ trợ đầu vào chuẩn. Truyền dữ liệu cho chương trình qua ô stdin và đọc bằng syscall 0, rất tiện cho bài tập kinh điển "đọc tên, in lời chào" và nhiều bài khác.
  • Không cần thiết lập, phản hồi tức thì. Không cài NASM, không phải nhớ cờ của trình liên kết, không lỗi quyền truy cập: mở trang là trình soạn thảo đã sẵn sàng. Lỗi từ trình biên dịch và trình liên kết hiện ngay ở phần đầu ra.

Bạn có thể thử gì trong Assembly playground

  • In một chuỗi cố định bằng một syscall write, rồi kết thúc gọn gàng bằng exit(0): chương trình x86-64 hoàn chỉnh nhỏ nhất, cũng là cách nhanh nhất để hiểu _start và syscall phối hợp với nhau thế nào.
  • Đọc từ stdin vào một bộ đệm .bss, bỏ ký tự xuống dòng ở cuối và in lại: mẫu code nằm sau gần như mọi bài tập Assembly có đầu vào.
  • Cộng hai số trong thanh ghi rồi tự đổi kết quả thành các chữ số ASCII để write ra màn hình. Đây là lúc bạn nhận ra Assembly không có print, chỉ có byte và syscall.

Câu hỏi thường gặp về trình biên dịch Assembly online

Playground này dùng trình biên dịch Assembly và cú pháp nào?
Playground dùng NASM (Netwide Assembler) với cú pháp Intel, nhắm tới Linux x86-64. Code được biên dịch bằng nasm -f elf64 và liên kết bằng ld. Nếu bạn quen cú pháp AT&T/GAS (kiểu %rax, movq), hãy viết lại theo kiểu Intel của NASM: mov rax, 1, section .text, global _start.
Có cần cài NASM hay trình liên kết không?

Không. Toàn bộ bộ công cụ chạy trên máy chủ trong một container cách ly. Bạn viết NASM trên trình duyệt, nhấn Chạy, Coddy sẽ biên dịch và liên kết chương trình giúp bạn. Không cần cài gì trên máy: không NASM, không ld, không máy ảo Linux.

Đọc đầu vào trong Assembly ở đây như thế nào?
Dùng syscall read (số 0): đặt 0 vào rax (sys_read), 0 vào rdi (stdin), địa chỉ bộ đệm vào rsi và số byte tối đa vào rdx, rồi thực thi syscall. Mọi thứ bạn gõ trong ô stdin bên dưới trình soạn thảo sẽ được chuyển cho chương trình khi Chạy. Chương trình mẫu có đủ cả quy trình, gồm cả bước bỏ ký tự xuống dòng ở cuối.
Vì sao chương trình cần _start thay vì main?
Vì chương trình mẫu liên kết bằng ld mà không có C runtime. main là quy ước của libc: code khởi động của C gọi nó sau khi chuẩn bị xong mọi thứ. Khi liên kết trần bằng ld thì không có libc, nên kernel nhảy thẳng tới nhãn _start, đó là lý do mọi chương trình ở đây đều khai báo global _start. Bạn phải tự kết thúc chương trình đúng cách bằng syscall exit (số 60) ở cuối.
Người mới bắt đầu có học Assembly bằng trình biên dịch này được không?

Được. Bắt đầu từ chương trình chào hỏi, đổi chuỗi và xem đầu ra thay đổi. Sau đó thử đọc đầu vào, tính toán trong thanh ghi và tự đổi số thành chữ. Vì không cần thiết lập và mỗi lần Chạy đều có phản hồi ngay, bạn có thể thử đi thử lại thật nhanh, và đó là cách nhanh nhất để hiểu trực quan về thanh ghi, bộ nhớ và syscall.

Công cụ hữu ích cho Assembly

Các công cụ miễn phí chạy trên trình duyệt, dùng tốt cùng Playground Assembly, tất cả đều thuộc Coddy.