Một thí nghiệm gần đây kiểm tra khả năng tạo mã assembly x86 của Claude đã gây ra cuộc thảo luận trong cộng đồng về tình trạng hiện tại của các mô hình ngôn ngữ lớn khi làm việc với các ngôn ngữ lập trình cấp thấp. Bài kiểm tra bao gồm việc tạo một trình tạo fractal Mandelbrot dạng ASCII art, đòi hỏi nhiều lần lặp và gỡ lỗi tự động để đạt được kết quả hoạt động.
![]() |
---|
Ảnh chụp màn hình này làm nổi bật những thách thức kỹ thuật trong việc tạo mã assembly x86 cho một trình tạo fractal Mandelbrot sử dụng các mô hình ngôn ngữ lớn như Claude |
Thách Thức Trong Việc Tạo Mã Assembly
Cộng đồng đã xác định được một số vấn đề thường gặp khi sử dụng LLM cho lập trình assembly. Các nhà phát triển báo cáo rằng những mô hình này thường xuyên tạo ra mã không thể biên dịch được, thường tạo ra các chi tiết thanh ghi phần cứng không có thật và tạo ra các triển khai không hiệu quả. Việc quản lý thanh ghi giữa các chương trình con dường như là một điểm yếu đặc biệt, vì các mô hình gặp khó khăn trong việc duy trì các quy ước nhất quán mà các lập trình viên assembly con người tự nhiên phát triển.
Trải nghiệm thay đổi đáng kể tùy thuộc vào nhiệm vụ cụ thể. Công việc dịch thuật giữa các ngôn ngữ assembly, chẳng hạn như chuyển mã từ cú pháp x86 NASM sang cú pháp RISC-V GAS, cho thấy kết quả tốt hơn nhiều vì nó chủ yếu liên quan đến việc chuyển đổi trực tiếp thay vì tạo mã gốc.
Các Vấn Đề Phổ Biến Của LLM Trong Assembly:
- Mã code không thể biên dịch được
- Chi tiết thanh ghi phần cứng bị ảo giác hóa
- Sinh mã code kém hiệu quả
- Quản lý thanh ghi kém giữa các chương trình con
- Quy ước gọi hàm không nhất quán
Cải Thiện Trong Các Lệnh Chuyên Biệt
Các phiên bản gần đây của các mô hình AI cho thấy những cải thiện đáng chú ý trong việc xử lý các hoạt động SIMD (Single Instruction, Multiple Data). Claude 4 Sonnet thể hiện hiệu suất tốt hơn đáng kể với các hoạt động vector hóa so với các phiên bản trước đó, thường tạo ra các vòng lặp vô hướng trong khi tuyên bố đã vector hóa mã. Các mô hình trước đây cũng sẽ đưa ra những quyết định không hợp lý về việc sử dụng tập lệnh, chẳng hạn như thêm các điều kiện không cần thiết cho SSE khi hỗ trợ AVX2 được chỉ định rõ ràng.
Những lần tôi thử nghiệm, tôi nhận thấy chúng khá kém trong việc theo dõi các thanh ghi khi chúng di chuyển giữa các chương trình con.
Các lĩnh vực thành công của LLM trong Assembly:
- Dịch chuyển giữa các ngôn ngữ assembly (ví dụ: từ x86 NASM sang RISC-V GAS)
- Các hàm nội tại SIMD (đã cải thiện đáng kể trong Claude 4 Sonnet)
- Các thuật toán đơn giản, được tài liệu hóa tốt với các ví dụ hiện có
- Các tác vụ chuyển đổi và di chuyển mã nguồn
Dữ Liệu Huấn Luyện và Các Chỉ Báo Chất Lượng Mã
Chất lượng của mã assembly được tạo ra tiết lộ những hiểu biết thú vị về dữ liệu huấn luyện. Các nhà phát triển có kinh nghiệm có thể phát hiện các dấu hiệu đặc trưng của sự thiếu kinh nghiệm trong mã được tạo ra, chẳng hạn như sử dụng mov ecx, 0
thay vì xor ecx, ecx
thông thường hơn để xóa thanh ghi. Những mẫu này cho thấy việc tiếp xúc hạn chế với các sản phẩm demoscene và các ví dụ mã assembly chất lượng cao khác trong quá trình huấn luyện.
Ứng Dụng Thực Tế và Hạn Chế
Mặc dù trình tạo Mandelbrot cuối cùng đã hoạt động, cộng đồng lưu ý rằng các fractal ASCII art đại diện cho những ví dụ tương đối đơn giản với nhiều mã hiện có để tham khảo. Các nhiệm vụ assembly phức tạp hơn, đặc biệt là những nhiệm vụ liên quan đến khởi tạo phần cứng, driver thiết bị, hoặc chuyển đổi từ real-mode sang long-mode, tiếp tục thách thức đáng kể các mô hình AI hiện tại.
Cuộc thảo luận nhấn mạnh rằng LLM hiện tại hoạt động tốt hơn như các công cụ dịch thuật cho mã assembly thay vì các trình tạo mã gốc, đặc biệt là đối với các triển khai chuyên biệt hoặc cụ thể cho phần cứng nơi độ chính xác và hiệu quả là quan trọng.
Tham khảo: Mandelbrot in x86 assembly by Claude