Monday, April 25, 2011

Mã máy (Machine Language) - Hợp ngữ (Assembly language)

1) Mã máy là gì?

Mã máy còn gọi là ngôn ngữ máy. Tên tiếng Anh là Machine language hay machine code. Mã máy là một loại ngôn ngữ lập trình mà câu lệnh được biểu diễn bằng các con số nhị phân 0 và 1.
Hình 1: Mã máy được lưu trữ trong memory điều khiển hoạt động của CPU
Đây là ngôn ngữ lập trình thế hệ đầu tiên, tuy khó sử dụng nhưng ngôn ngữ máy là ngôn ngữ duy nhất mà CPU có thể hiểu và thực thi trực tiếp.

Mọi ngôn ngữ muốn thực thi được trên CPU đều phải được dịch sang mã máy, kể cả Assembly language.
Mã máy là đặc trưng cho từng hãng CPU khác nhau, điều đó lý giải vì sao chúng ta cần các trình biên dịch khác nhau trên những máy tính có CPU của những hãng sản xuất khác nhau. Ví dụ Xcode dùng cho CPU của Apple và Code::Block dùng cho CPU của Intel.

2) Hợp ngữ là gì?

Vì việc lập trình bằng mã máy rất cực khổ và không mấy hiệu quả do đó hợp ngữ ra đời. Hợp ngữ, tên tiếng anh là Assembly language (ASM), là ngôn ngữ sử dụng các từ khóa gợi nhớ như add, sub, mult và div ... để biểu diễn các câu lệnh, vì thế việc lập trình trở nên tự nhiên và dễ dàng hơn.

Mỗi câu lệnh ASM sẽ  tương ứng với một câu lệnh mã máy với chiều dài[1] cố định. 
Ví dụ: Lệnh add (cộng có giấu) trong CPU MIPS 64bit được viết bằng mã máy như sau:
       
00000010001100101000000000100000
Lệnh tương đương được biết bằng ASM như sau:
       
add $s0, $s1, $s2
Dễ dàng thấy, viết một câu lệnh bằng ASM trực quan hơn rất nhiều so với một câu lệnh tương đương bằng mã máy, tuy vậy, ASM vẫn chỉ là một ngôn ngữ bậc thấp, phụ thuộc vào phần cứng và chưa hỗ trợ cấu trúc để phát triển các chương trình lớn có cấu trúc phức tạp.
--------------------------------------------------------------------------------------------------------------------------
[1]: Chiều dài của câu lệnh mã máy được đo bằng bít, ví dụ CPU32 bit thì chiều dài câu lệnh mã máy sẽ là 32 bít.

5 comments: