Assembly là một trong những ngôn ngữ lập trình lâu đời nhất trên thế giới. Ngày nay, có thể các lập trình viên hoặc các chuyên gia công nghệ thông tin không làm việc trực tiếp trên Assembly nhiều như trước kia. Nhưng Assembly vẫn có một vai trò tương đối quan trọng, bởi đây là ngôn ngữ lập trình gần gũi nhất với ngôn ngữ máy. Việc nắm vững về Assembly sẽ cho phép bạn hiểu rõ về chức năng, cấu trúc và cách vận hành của phần cứng máy tính, từ đó nâng cao hiệu quả công việc lập trình. Trong bài viết này, ICANTECH sẽ giúp các bạn tìm hiểu những kiến thức cơ bản về ngôn ngữ Assembly.
Bộ vi xử lý của máy tính được ví như bộ não của con người, nó quản lý các quá trình biến đổi số học, logic và điều khiển mọi hoạt động của máy tính. Mỗi họ vi xử lý có một tập hướng dẫn riêng để thực hiện các hoạt động như nhận tín hiệu từ bàn phím, chuột, đọc dữ liệu từ ổ cứng, hiển thị thông tin trên màn hình...Các bộ vi xử lý chỉ hiểu những hướng dẫn dạng ngôn ngữ máy, là các chuỗi 1 và 0, việc lập trình với các chuỗi số này quá trừu tượng và phức tạp. Bởi vậy, ngôn ngữ Assembly được phát triển sử dụng tập lệnh gần gũi với ngôn ngữ máy nhưng lại biểu diễn dưới dạng mã dễ hiểu hơn nhiều.
Ngôn ngữ Assembly hay hợp ngữ Assembly là ngôn ngữ lập trình có thể làm việc trực tiếp với phần cứng của máy tính. Ngôn ngữ này cho phép các lập trình viên viết mã lệnh điều khiển máy tính bằng cách sử dụng các ký tự và biểu thức đơn giản, dễ hiểu. Assembly thường đóng vai trò trung gian, giúp phát triển các ngôn ngữ lập trình bậc cao. Vốn là một ngôn ngữ bậc thấp, gần với ngôn ngữ máy nên Assembly sẽ mạnh hơn các ngôn ngữ cấp cao như C++, Python hay Java ở tốc độ thực thi chương trình và kiểm soát tài nguyên phần cứng.
Như đã trình bày ở trên, Assembly có khả năng thực thi nhanh hơn các ngôn ngữ lập trình bậc cao. Bên cạnh đó, trong một chương trình được viết bằng Assembly sẽ đòi hỏi ít instruction hơn để hoàn thành một tác vụ so với các ngôn ngữ khác. Điều này cho phép các lập trình viên dễ dàng tối ưu hóa code phù hợp nhất với phần cứng sẽ chạy chương trình. Một lợi ích khác của Assembly là cho phép các lập trình viên truy cập trực tiếp vào tài nguyên phần cứng của máy tính, chẳng hạn như bộ nhớ và các cổng vào/ra. Assembly là một trong những ngôn ngữ lý tưởng để lập trình hệ thống, bao gồm cả việc viết code tương tác với hệ điều hành và các thiết bị phần cứng của máy tính.
Assembly có một số nhược điểm sau: Các chương trình lớn nếu được viết bằng Assembly thường yêu cầu phần cứng có khả năng xử lý, tính toán mạnh hơn và không thể chạy trên máy tính cấu hình yếu. Một số người sẽ thấy cú pháp câu lệnh của Assembly khó nhớ hơn và có thể mất nhiều thời gian hơn để viết code vì nó phức tạp hơn nhiều ngôn ngữ khác. Ngoài ra, chương trình viết bởi Assembly thường không thể chuyển đổi được giữa các thiết bị có cấu trúc phần cứng khác nhau.
Các ưu điểm và nhược điểm của Assembly có thể tóm tắt trong bảng sau:
Thực tế, máy tính chỉ có thể thực thi các mệnh lệnh của con người khi mệnh lệnh ấy được thể hiện dưới dạng mã nhị phân, bao gồm các số 1 và 0.
Quá trình này về bản chất là việc chuyển mã nhị phân thành các trạng thái “đóng” hoặc “mở” dòng điện đi qua các linh kiện điện tử trong máy tính. Tất nhiên, không có một lập trình viên nào có thể viết chương trình phần mềm bằng cách làm việc trực tiếp với các số 1 và 0. Thay vào đó, lập trình viên phải dựa vào các ký tự hay quy ước tượng trưng khác nhau để có thể diễn đạt mệnh lệnh của mình theo định dạng trực quan hơn. Cụ thể, hiện nay các lập trình viên thường sử dụng các ngôn ngữ lập trình bậc cao để đưa ra các lệnh với máy tính. Tuy nhiên, cuối cùng thì những mã lệnh bậc cao này cần được dịch sang ngôn ngữ máy. Thay vì thực hiện thủ công, họ sẽ dựa vào các hợp ngữ như Assembly để tự động dịch giữa các ngôn ngữ bậc cao và ngôn ngữ máy. Thực tế, từ Assembly vẫn phải qua một bước dùng trình hợp dịch để chuyển sang ngôn ngữ máy. Có hai loại trình hợp dịch:
Khi bạn viết code bằng bất kỳ ngôn ngữ lập trình nào, bạn phải phải tuân theo một thứ tự quy tắc cụ thể, cấu trúc cú pháp của ngôn ngữ ấy. Trong Assembly cũng vậy, cú pháp của Assembly chứa các tiêu chí như: số lượng ký tự tối đa được phép, dòng mã lệnh phải bắt đầu bằng ký hiệu nào, ý nghĩa của một ký tự là gì…
Label là một ký hiệu đại diện cho một địa chỉ, nơi lưu trữ mã nguồn hoặc dữ liệu. Mục đích chính của Label là làm đích đến khi được tham chiếu trong một câu lệnh. Có 2 loại Label: Symbolic Label bao gồm một mã định danh theo sau là dấu hai chấm; còn Numeric Label bao gồm một chữ số theo sau là dấu hai chấm.
Toán tử là các biểu thức logic xảy ra sau trường Label, trước toán tử phải có ít nhất một ký tự khoảng trống (space). Các toán tử có thể là opcode hoặc directive.
Directive là những hướng dẫn dành cho lập trình viên Assembly, cho biết những hành động nào phải diễn ra trong quá trình code. Chúng có vai trò quan trọng trong việc khai báo hoặc dành bộ nhớ cho các biến. Ngoài ra, Directive cũng được sử dụng để chia chương trình thành các phần khác nhau.
Bên dưới là một đoạn mã lệnh được viết bằng ngôn ngữ Assembly để hiển thị lời chào: “Hello, ICANTECH”:
section .data
hello: db 'Hello, ICANTECH',10
helloLen: equ $-hello
section .text
global _start
_start:
mov eax,4
mov ebx,1
mov ecx,hello
mov edx,helloLen
int 80h
mov eax,1
mov ebx,0
int 80h;
Như vậy trong bài viết này, ICANTECH đã giúp các bạn tìm hiểu về ngôn ngữ lập trình Assembly. Hiểu rõ về Assembly sẽ mang lại những ích lợi nhất định cho các bạn trong lập trình, đặc biệt là kiến thức về kiểm soát tài nguyên phần cứng. Chúc các bạn thành công!
Nếu bạn đang quan tâm đến học lập trình thì hãy tham khảo ngay các khóa học lập trình online tại ICANTECH nhé!
Nguồn ảnh: ICANTECH.