Ngôn ngữ assembly là gì ?

Một phần của tài liệu Bài giảng kiến trúc máy tính pot (Trang 116 - 118)

Các chương trình thực hiện chuyển đổi chương trình của người sử dụng được viết bằng ngôn ngữ nào đó sang một ngôn ngữ khác được gọi là chương trình dịch( translator). Ngôn ngữ được sử dụng để viết chương trình nguồn được gọi là ngôn ngữ nguồn còn ngôn ngữ chương trình nguồn chuyển đổi sang gọi là ngôn ngữ

Dựa vào mối quan hệ giữa ngôn ngữ nguồn và ngôn ngữ đích có thể chia các chương trình dịch thành hai nhóm. Khi ngôn ngữ nguồn về căn bản là một sự biểu diễn bằng ký hiệu cho một ngôn ngữ máy bằng số thì chương trình dịch được gọi là assmbler và ngôn ngữ nguồn được gọi là ngôn ngữ assembly. Khi ngôn ngữ nguồn là một ngôn ngữ bậc cao như là C hoặc Pascal và ngôn ngữ đích là một ngôn ngữ máy bằng số hoặc là một biểu diễn bằng ký hiệu cho một ngôn ngữ như vậy thì chương trình dịch được gọi là compiler.

Ngôn ngữ assembly thuần khiết là ngôn ngữ trong đó mỗi chỉ thị của nó khi được dịch sinh ra đúng một chỉ thị máy. Nói cách khác, có tương ứng một – một giữa các chỉ thị máy và các chỉ thị trong ngôn ngữ assemblt. Nếu mỗi dòng trong chương trình assembly chứa một chỉ thị assembly và mỗi word máy chứa một chỉ thị máy, thì chương trình assembly dài n dòng sẽ sinh ra một chương trình ngôn ngữ máy dài n word.

Sử dụng ngôn ngữ assembly để lập trình dễ hơn sử dụng ngôn ngữ máy rất nhiều. Việc sử dụng tên và địa chỉ bằng ký hiệu thay cho số nhị phân( hoặc số hệ 8, hệ 16) tạo nên một sự khác biệt rất lớn. Mọi người đều có thể nhớ được các ký hiệu viết tắt cho cộng( add), trừ( substract), nhân( multiply) và chia( divide) là ADD, SUB, MUL và DIV; nhưng ít người có thể nhớ được các chỉ thị máy cho các phép toán đó là 24576, 57344, 28672 và 29184( cho máy PDP- 11). Người lập trình bằng ngôn ngữ assembly chỉ cần nhớ các tên bằng ký hiệu gợi nhớ ADD, SUB, MUL và DIV, bởi vì assembler sẽ chỉ dịch chúng sang các chỉ thị máy. Tuy nhiên muốn có ai đó lập trình bằng ngôn ngữ máy thì họ cần phải nhớ, nếu không thì sẽ phải liên tục tra cứu các giá trị này.

Đối với địa chỉ cũng có thể rút ra các nhận xét tương tự. Người lập trình bằng ngôn ngữ assembly có thể đặt tên bằng ký hiệu gợi nhớ cho các vị trí nhớ và giao phó cho assembler lo cung cấp đúng các gía trị bằng số; trong khi đó người lập trình bằng ngôn ngữ máy luôn luôn phải làm việc với các giá trị bằng số của các địa chỉ.

Hệ quả là từ khi assembler ra đời cho đến nay không còn một ai viết chương trình bằng ngôn ngữ máy nữa.

Ngoài ánh xạ môt – một của các chỉ thị assembly vào các chỉ thị máy, ngôn ngữ assembly còn có một tính chất khác nữa làm cho nó khác hẳn các ngôn ngữ lập trình bậc cao, đó là người lập trình bằng ngôn ngữ assembly có thể truy cập tới tất cả các đặc điểm và các chỉ thị có trong máy đích. Người lập trình bằng ngôn ngữ bậc cao không làm được như vậy. Thí dụ nếu máy đích có một bit báo tràn

tiếp được. Nếu ở bàn điều khiển của một máy tính có các công tắc thì chương trình bằng ngôn ngữ assembly có thể đọc trạng thái của chúng. Một chương trình như vậy có thể thi hành từng chỉ thị trong tập chỉ thị của máy đích, còn chương trình bằng ngôn ngữ bậc cao không thể làm như vậy.

Một sự khác nhau quan trọng nữa giữa chương trình assembly và chương trình bằng ngôn ngữ bậc cao, là chương trình bằng ngôn ngữ assembly chỉ có thể chạy được trên một họ máy, trong khi đó chương trình được viết bằng ngôn ngữ bậc cao nói chung có thể chạy được trên nhiều họ máy, đây chính là một ưu điểm lớn của nó so với ngôn ngữ assembly.

Tóm lại tất cả các việc có thể thực hiện bằng ngôn ngữ máy đều có thể thực hiện được bằng ngôn ngữ assembly, tuy nhiên ngôn ngữ bậc cao không làm được như vạy một cách có hiệu quả. Các ngôn ngữ dùng cho lập trình hệ thống thường là giao của ngôn ngữ bậc cao và ngôn ngữ assembly, trong đó cú pháp là của ngôn ngữ lập trình bậc cao nhưng lại truy cập được máy bằng ngôn ngữ assembly.

Một phần của tài liệu Bài giảng kiến trúc máy tính pot (Trang 116 - 118)