Assembler Là Gì ? Lập Trình Viên Có Nên Học Assembly Không

Assembly là dạng ngôn ngữ lập trình bậc cao, nó là dạng ngôn ngữ theo kiểu mẫu gợi nhớ (Mnemonic), hay dạng kí hiệu, của ngôn ngữ máy. Assembly giúp mọi người nhìn rõ hơn mối quan hệ giữa các thành phần chức năng bên trong máy tính và hệ điều hành.

Bạn đang xem: Assembler là gì

Vậy Assemly Language là gì?

Nếu như các bạn có tìm hiểu về dòng ngôn ngữ này thì có thể thấy cấu trúc dữ liệu và giải thuật của nó toàn là 0 và 1 nên rất khó đọc và khó hiểu. Do đó, các nhà thiết kế thuật toán đã sáng tạo ra vi xử lý để đưa ra tập lệnh hợp ngữ gần với ngôn ngữ tự nhiên hơn.

Tuy nhiên, các dòng lệnh này vẫn phù hợp với phần cứng rất khoa học, nhờ đó việc tiếp cận với lập trình hợp ngữ giúp chúng ta hiểu rõ hơn về kiến trúc và tổ chức hoạt động của phần cứng.

Trong nội dung của bài viết ngày hôm nay, chúng ta chỉ tìm hiểu khái quát về ngôn ngữ lập trình Assembly, để lập trình chạy trên các máy IBM-PC: Sử dụng họ vi xử lý này và hoạt động trong sự phối hợp với hệ điều hành MS_DOS.

Assembly Language viết tắt là ASM Language

Assembly Language (ASM), tiếng Việt là hợp ngữ. Mục đích của mình học ASM chỉ cơ bản là muốn hiểu thêm về người bạn thân thiết nhất của mình, cái máy tính mà suốt ngày mình ngồi trước nó. Mình chỉ thật sự muốn biết là đằng sau những dòng lệnh mình code thường ngày thì bên dưới nó làm cái gì ?!.

Thật tiếc là sau khi đã tìm hiểu được một số khái niệm về kiến trúc CPU, các loại Registers (thanh ghi), Data Segments, Data Moving thì mình buộc phải bỏ cuộc ở Control Flow.

Lý do đầu tiên là … do mình dở, mình thấy nó thật sự quá khó với mình, vốn là dân code ứng dụng với ngôn ngữ bậc cao (high level language) và chưa biết gì về Computer Scientic.

Ngôn ngữ lập trình Assembly là gì, có tác dụng gì, có nên học Assembly không?

Thứ hai là cách tiếp cận bottom-up (từ lý thuyết lên) này cũng không tốt. Mình nghĩ là trong tương lai nếu có dự án nào cần tới ASM thì mình sẽ có thể vừa học và practice tốt hơn (hướng tiếp cận top-down hay còn gọi là end to end).

Assembly Language (hay viết tắt là ASM) là ngôn ngữ bậc thấp, chính xác nó là ngôn ngữ thuộc thế hệ thứ 2 (2nd generation). ASM sử dụng các từ gợi nhớ (mnemonics) để viết các chỉ thị (instructions) lập trình cho máy tính thay vì bằng những dãy 0 và 1.

Các ASM sẽ cần một chương trình Assembler phù hợp (NASM, AS, DASM) để dịch chúng thành những file binary và một trình linker để link các thành phần lại và chỉ định nơi bắt đầu của chương trình và đây là việc bắt buộc.

VD: Hàm main trong C mặc định là nơi chương trình khởi chạy. Lệnh dịch source C ra binary trên thực tế nó đã làm 2 bước trên: dịch và link (xác định luôn nơi khởi chạy chương trình là main).

Một trong các đặc tính của chương trình viết trực tiếp bằng ASM là: chúng có tốc độ thực thi cao và tiêu tốn bộ nhớ ít hơn các chường viết bởi các ngôn ngữ lập trình bậc cao.

Việc học ASM cũng sẽ giúp chúng ta hiểu thêm về kiến trúc phần cứng máy tính, cách chúng hoạt động và tương tác với nhau. VD như các thành phần cơ bản trong máy tính, cách chúng truyền thông tin cho nhau:

ASM có thể tương tác rất sâu dưới hệ thống, chúng có thể giao tiếp trực tiếp với các phần cứng và bắt chúng hoạt động theo ý người lập trình. Vì thế mà chúng ta có hẳn một ngành mang tên là “lập trình nhúng”.

Một trong các ưu thế của dòng ngôn ngữ này đó là chương trình viết trên nó có kích thước nhỏ hơn và tốc độ nạp/thực hiện chương trình nhanh hơn so với viết (chương trình cùng chức năng) trên các ngôn ngữ lập trình bậc cao.

Bên cạnh đó, hầu như mọi ngôn ngữ lập trình bậc cao thông dụng nhất hiện nay đều cho phép viết (“nhúng”) mã lệnh hợp ngữ trong nó. Vấn đề này có thể hỗ trợ lập trình viên khai thác tất cả ưu điểm của các ngôn ngữ lập trình.

Assembly rất mạnh trong những hoạt động thọc sâu vào các yếu tố bên trong hệ thống công nghệ web giới thiệu công ty, trong khi đó ngôn ngữ bậc cao mạnh trong các thao tác xử lý dữ liệu và thiết kế giao diện.

Như vậy sẽ là rất thuận lợi nếu sử dụng ngôn ngữ bậc cao để viết chương trình xử lý thông tin hệ thống, khi đó nhiệm vụ truy xuất hệ thống (thanh ghi, bộ nhớ, cổng vào/ra, thiết bị,…) để lấy dữ liệu sẽ được giao cho các đoạn mã lệnh hợp ngữ được nhúng trong chương trình này.

Assembly có 2 tính năng để tương tác cùng hệ thống

· Nhập trực tiếp từng lệnh/đoạn lệnh vào bộ nhớ rồi cho phép thực hiện ngay trên bộ nhớ mà không cần qua bước biên dịch chương trình. Chương trình gỡ rối Debug (đi kèm hệ điều hành MS_DOS: Debug . exe) là một trong những chương trình hỗ trợ chế độ này cho hợp ngữ 16 bít;

· Viết chương trình hợp ngữ, rồi sau đó sử dụng các chương trình biên dịch để dịch nó sang chương trình thực thi (dạng EXE hoặc COM) và cho thực hiện chương trình này.

Ngôn ngữ lập trình Assembly là gì, có tác dụng gì, có nên học Assembly không?

Các lập trình viên có 2 lựa chọn cho trình biên dịch hợp ngữ

· Trình biên dịch hợp ngữ cho những ứng dụng chạy trên nền hệ điều hành 16 bít MS_DOS; Trình biên dịch hợp ngữ 32 bít, MASM32 (Macro Assembler 32 bít).

· Trình biên dịch hợp ngữ cho những ứng dụng chạy trên nền hệ điều hành 32 bít MS_Windows.

Trong thực tế, để chuyển một chương trình hợp ngữ sang dạng chương trình thực thi EXE 16 bít hoặc COM 16 bít thì cần phải có sự hỗ trợ của chương trình tiện ích của hệ điều hành MS_DOS: Link (Link . exe) và EXE2Bin (EXE2Bin . com).

Chương trình hợp ngữ 16 bít sử dụng hệ thống các ngắt mềm (Interrupt) của BIOS và DOS như là thư viện lập trình của nó, trong khi đó chương trình hợp ngữ 32 bít sử dụng tập hàm API làm thư viện lập trình của nó.

Kết luận : đây là những thông tin quan trọng bạn cần biết về dòng ngôn ngữ lập trình bậc cao Assembly. Kiến thức này chỉ khái quát nền tảng của Assembly, để tìm hiểu sâu bạn cần trang bị thêm nhiều tài liệu chuyên ngành khác, những tài liệu này bạn có thể tìm kiếm trên Google hoặc các diễn đàn chuyên về lập trình. Chúc các bạn thành công !!!

Cái khó của việc học ASM ra sao?

Thông thường khi học một ngôn ngữ lập trình chúng ta chỉ đơn giản là cài đặt môi trường lập trình, công cụ biên dịch và sử dụng các editor hoặc IDE nếu có thể học lập trình.

Viết một chương trình đơn giản rồi biên dịch và chạy thử trên các ngôn ngữ bậc cao (C, C++, Java) là rất dễ dàng. Nhưng với ASM thì bạn sẽ dễ bị “nản” vì không thể dịch và chạy code ASM đúng như hướng dẫn.

Lý do là ASM lập trình các chỉ thị cho phần cứng tuy nhiên chúng lại lệ thuộc vào kiến trúc CPU (ARM, x86-32, x86-64), hệ điều hành (Linux, Windows, Mac) và các tập chỉ thị mà nhà sản xuất phần cứng đưa ra.

Đa số các hướng dẫn, sách vở được viết cho kiến trúc iA-32. Một số hướng dẫn mới gần đây hơn thì viết cho kiến trúc x86-64 trên Linux, sử dụng Assembler của GNU.

Ngôn ngữ lập trình Assembly là gì, có tác dụng gì, có nên học Assembly không?

Khác với ngôn ngữ C, về lý thuyết chúng ta có thể dịch lại mà không cần đổi source code ban đầu. Tuy nhiên thực tế thì điều này khó xảy ra vì chúng ta chỉ có thể làm được điều trên nếu không gọi tới các API của hệ điều hành.

Nói tới đây lại thấy yêu Java hơn, Java thật sự là cuộc cách mạng viết một lần, chạy mọi nơi và cũng chẳng cần phải dịch lại. Mọi thứ đã có máy ảo Java lo.

Thêm một khó khăn nữa cho những người học ASM trên máy Mac như mình. Apple chỉ định riêng bộ linker (Match-O) cho ASM, chúng sử dụng một số chỉ thị riêng, padding memory riêng (có 4 lớp padding).

Việc viết ASM cho máy Mac thật sự có rất ít bài viết hướng dẫn, doc của Apple thì như kinh thánh … Việc nhớ các thanh ghi, các chỉ thị thôi đã đuối lắm rồi, thêm Apple hành nữa thật là khó càng thêm khó !!!

Leave a Reply

Your email address will not be published. Required fields are marked *