Ngôn ngữ hội là gì?

Đôi khi được gọi là lắp ráp hoặc ASM, ngôn ngữ lắp ráp là ngôn ngữ lập trình cấp thấp.

Các chương trình được viết bằng ngôn ngữ lắp ráp được biên dịch bởi trình biên dịch chương trình. Mỗi trình biên dịch có ngôn ngữ lắp ráp riêng, được thiết kế cho một kiến ​​trúc máy tính cụ thể.

Ngôn ngữ máy chỉ là một chuỗi các con số, không dễ để con người đọc được. Sử dụng ASM, lập trình viên có thể viết các chương trình có thể đọc được tương ứng chính xác với ngôn ngữ máy.

Nhược điểm là mọi thứ máy tính làm phải được mô tả rõ ràng, chi tiết chính xác. Ưu điểm là lập trình viên có quyền kiểm soát tối đa đối với những gì máy tính đang làm.

Tại sao ASM là ngôn ngữ "cấp thấp"?

Hội được gọi là ngôn ngữ lập trình cấp thấp vì có (gần) một mối quan hệ một-một giữa những gì nó bảo máy tính làm và máy tính làm gì. Nói chung, một dòng của chương trình lắp ráp chứa tối đa một lệnh cho máy tính.

ASM khác với ngôn ngữ "cấp cao" như thế nào?

Các ngôn ngữ cấp cao cung cấp sự trừu tượng của các hoạt động cấp thấp cho phép lập trình viên tập trung hơn vào việc mô tả những gì họ muốn làm và ít hơn về cách thực hiện . Lập trình theo cách này thuận tiện hơn và làm cho các chương trình dễ đọc hơn với sự hy sinh của điều khiển cấp thấp.

Các chương trình được viết bằng ngôn ngữ cấp cao sẽ không bao giờ phù hợp với tốc độ và hiệu quả thô của các chương trình được viết trong lắp ráp. Ví dụ về các ngôn ngữ cấp cao bao gồm Python, Java, JavaScript, Clojure và Lisp.

Ngôn ngữ "trung cấp" là gì?

Các ngôn ngữ cấp trung hoặc cấp thấp cung cấp một số khái niệm trừu tượng cấp cao để giúp cuộc sống của lập trình viên dễ dàng hơn, trong khi vẫn cung cấp quyền truy cập vào các hoạt động cấp thấp. Chúng thường được sử dụng để viết các hệ điều hành, vì vậy đôi khi chúng được gọi là ngôn ngữ lập trình hệ thống .

Các chương trình được viết bằng ngôn ngữ cấp trung cũng có thể thực hiện tốt hoặc gần như là các chương trình được viết bằng ngôn ngữ lắp ráp. Ví dụ về các ngôn ngữ lập trình cấp trung bao gồm C, C ++, Ada, Nim và Rust.

ASM có di động không?

Không. Bởi vì ngôn ngữ lắp ráp được gắn với một kiến ​​trúc máy tính cụ thể, chúng không thể mang theo được. Một chương trình được viết bằng một ngôn ngữ lắp ráp sẽ cần phải được viết lại hoàn toàn để nó chạy trên một loại máy khác.

Tính di động là một trong những lợi thế chính của các ngôn ngữ cấp cao hơn. Ngôn ngữ lập trình C thường được gọi là "lắp ráp di động" vì trình biên dịch C tồn tại cho gần như mọi kiến ​​trúc hệ thống hiện đại. Một chương trình được viết bằng C có thể yêu cầu một số thay đổi trước khi nó được biên dịch trên một máy tính khác, nhưng ngôn ngữ cốt lõi là di động.

Nói chung, ngôn ngữ cấp càng cao thì càng cần ít thay đổi để ngôn ngữ này chạy trên kiến ​​trúc khác. Các ngôn ngữ cấp thấp nhất - ngôn ngữ máy và ngôn ngữ lắp ráp - không thể mang theo được.

Ví dụ: Xin chào, Thế giới! trong bản lắp ráp 32 bit, dành cho Windows

Đây là "Hello, World" được viết cho bộ xử lý Intel 32 bit. Nó cũng sẽ chạy trên bộ xử lý 64 bit. Chúng tôi sẽ biên dịch và chạy nó trên Windows 10.

 toàn cầu _main extern _printf phần .text _main: cuộc gọi tin nhắn đẩy _printf thêm đặc biệt, 4 tin nhắn ret: db 'Hello, World!', 10, 0 

Để bắt đầu, hãy mở Notepad. Sao chép và dán mã ở trên vào một tệp văn bản mới và lưu tệp dưới dạng hello.asm .

Để biên dịch lắp ráp, chúng tôi sẽ sử dụng NASM, Trình biên dịch Netwide. Nó có thể được tải xuống tại //www.nasm.us/.

 nasm -f win32 xin chào 

Khi bạn chạy lệnh này, NASM tạo một tệp đối tượng. Một tệp đối tượng chứa mã máy, nhưng không hoàn toàn là một tệp thực thi. Tệp đối tượng của chúng tôi được gọi là hello.obj .

Để tạo tệp thực thi, chúng tôi sẽ sử dụng phiên bản 32 bit của MinGW (Minimal GNU cho Windows) sẽ cung cấp trình biên dịch gcc. Nó có thể được tải xuống tại //www.mingw.org/.

 gcc -o hello.exe xin chào.obj 
 xin chào 
 Chào thế giới! 

Ví dụ: Xin chào, Thế giới! trong phiên bản 64 bit, dành cho Linux

Đây là "Hello, World" được viết cho bộ xử lý Intel 64 bit. Chúng tôi sẽ biên dịch và chạy nó trên Linux 64 bit.

 printf bên ngoài; hàm printf C, được gọi là phần .data; Phần dữ liệu, thông báo biến khởi tạo: db "Xin chào, thế giới!", 0; Chuỗi C kết thúc với 0 fmt: db "% s", 10, 0; Định dạng printf, phần "\ n", '0' .text; Bắt đầu phần mã toàn cầu chính; các điểm nhập gcc tiêu chuẩn chính :; nhãn chương trình cho điểm vào rbp; thiết lập khung stack, phải được căn chỉnh Mov rdi, fmt Mov rsi, dir Mov rax, 0; cũng có thể là: xor rax, rax gọi printf; Gọi hàm C printf pop rbp; khôi phục stack Mov rax, 0; bình thường, không có lỗi, trả về giá trị ret; trở về 

Sao chép và dán chương trình này vào một tệp mới gọi là hello.asm .

Sau đó, biên dịch lắp ráp với NASM, mà bạn có thể cài đặt với trình quản lý gói của mình. Chẳng hạn, trên Ubuntu hoặc Debian, bạn có thể cài đặt NASM bằng apt:

 cập nhật sudo apt && sudo apt cài đặt nasm 

Chạy lệnh này để tạo tệp đối tượng của bạn:

 nasm -f elf64 xin chào 

Tệp đối tượng được đặt tên hello.o .

Tiếp theo, sử dụng gcc để liên kết tệp đối tượng này với các thư viện cần thiết trên máy tính của bạn và biên dịch nó thành tệp thực thi có tên hello :

 gcc xin chào.o -o xin chào 

Cuối cùng, chạy tệp thực thi:

 ./xin chào 
 Chào thế giới! 

Để tham khảo, đây là cùng một chương trình, được viết bằng C:

 #include int main () {char dir [] = "Xin chào thế giới \ n"; printf ("% s \ n", tin nhắn); trả về 0; } 

  • Xem các thói quen gỡ lỗi cho các ví dụ khác về mã lắp ráp cấp thấp và thông tin bổ sung về những gì mỗi thói quen làm.
  • Để biết thêm ví dụ về ngôn ngữ lắp ráp, xem trang web Happy Codings.

2GL, Trình biên dịch, Ngôn ngữ cấp thấp, Ngôn ngữ máy, Thuật ngữ lập trình