• Thứ Năm, 13/04/2006 09:32 (GMT+7)

    Lập trình Assembly

    Câu hỏi :
    Có phải ngôn ngữ dùng trong lập trình hệ thống là assembly hay ngôn ngữ máy? Chức năng của các thanh ghi fs, gs?


    Trả lời :

    Lập trình hệ thống không nhất thiết phải lập trình bằng ngôn ngữ assembly hay ngôn ngữ máy. Thật vậy, tuyệt đại đa số các module chức năng cấu thành hệ điều hành Windows, Unix, Linux... đều được viết bằng ngôn ngữ C. Ưu điểm của các ngôn ngữ cấp cao là rõ ràng, dễ đọc, dễ diễn đạt giải thuật, diễn đạt giải thuật cô đọng... Như vậy, nếu chưa thật cần thiết phải dùng assembly hay ngôn ngữ máy, bạn nên dùng 1 ngôn ngữ cấp cao như C, C++ để viết các ứng dụng của bạn (mà bạn gọi là lập trình hệ thống).

    Ngược lại, ngôn ngữ assembly hay ngôn ngữ máy không nhất thiết chỉ để dùng cho lập trình hệ thống mà có thể được dùng để viết ứng dụng bất kỳ. Tuy nhiên do nhược điểm của assembly và ngôn ngữ máy là quá yếu để diễn đạt giải thuật nên rất ít người dùng chúng trực tiếp. Như trên đã nói, ngay cả khi viết hệ điều hành hay các hệ thống nhúng (chương trình điều khiển thiết bị và được ghi trên ROM của thiết bị đó), người ta cũng cố gắng dùng ngôn ngữ cấp cao như C, trừ những đoạn code đặc biệt mới dùng assembly hay mã máy.

    Trong trường hợp buộc phải dùng assembly hay mã máy, bạn phải lưu ý rằng các ngôn ngữ này phụ thuộc hoàn toàn vào CPU được dùng. Bạn không thể viết đoạn code assembly hay mã máy mà có thể chạy trên nhiều loại CPU được. Riêng đối với CPU Intel từ 80386 trở lên, nó có thể hoạt động ở 1 trong 3 chế độ quản lý bộ nhớ khác nhau như: Real-mode (chế độ mặc định khi bị reset ban đầu), protected-mode (quản lý theo segment) và 386-enchanced mode (quản lý vừa theo segment, vừa theo page, đây là chế độ quản lý bộ nhớ hoàn hảo nhất). Thí dụ khi mới boot máy hay khi máy được boot và chạy MSDOS, CPU Intel sẽ chạy ở chế độ Real-mode, còn khi máy đang chạy Linux, Windows XP... thì CPU Intel chạy ở chế độ 386-enchanced mode. Nếu bạn lập trình bằng ngôn ngữ cấp cao, bạn không cần biết chế độ quản lý bộ nhớ nào sẽ được dùng để chạy ứng dụng. Còn nếu lập trình bằng assembly hay mã máy, bạn cần phải nắm vững các chế độ quản lý bộ nhớ của CPU, phải quyết định chế độ quản lý nào sẽ dùng để chạy ứng dụng, từ đó mới bắt đầu viết lệnh tương thích với chế độ quản lý bộ nhớ mong muốn. Thí dụ nếu bạn lập trình ở chế độ real-mode (1 trong những chế độ 16-bit), bạn chỉ có thể dùng các thanh ghi 16-bit của CPU như ax, bx, cx, dx, ds, cs, es, ss). Còn nếu bạn lập trình ở chế độ 386-enchanced mode, bạn có thể dùng các thanh ghi 32 bit của CPU, trong đó có 2 thanh ghi fs, gs như bạn đề cập. Lưu ý rằng các ứng dụng viết ở chế độ 32bit chỉ có thể chạy trên môi trường Windows (hay Linux), chứ không thể chạy trên MSDOS được. Chi tiết về các chế độ quản lý bộ nhớ cũng như tập lệnh CPU ở từng chế độ quản lý bộ nhớ được trình bày trong tài liệu kỹ thuật giới thiệu CPU tương ứng. Bạn có thể tìm tài liệu kỹ thuật trên Internet hay liên hệ trực tiếp với các đại lý của Intel.

    Chuyên mục: Lập trình