- Trang chủ
- Giới thiệu
- Du học
- Đào tạo ngắn hạn
- Đào tạo chuyên sâu
- Tin Tức
- Học viên
- Kiến thức
- Tin THPT
- Liên hệ
Assembly là một ngôn ngữ nghe khá lạ tai. Chắc hẳn vẫn còn các bạn thắc mắc xem mình có nên học ngôn ngữ này không đúng không nhỉ? Vậy hôm nay hãy cùng Viện Công nghệ thông tin ITPlus tìm hiểu về ngôn ngữ này để đưa ra lựa chọn phù hợp nhất với bản thân mình bạn nhé!
Assemly Language là gì ?
Assembly Language (hay viết tắt là ASM) là ngôn ngữ bậc thấp, là ngôn ngữ thuộc thế hệ thứ 2. ASM sử dụng các từ gợi nhớ để viết các chỉ thị 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).
ASM sở hữu đặc tính của chương trình viết trực tiếp 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. Ngôn ngữ này giúp chúng ta hiểu thêm về kiến trúc phần cứng máy tính cũng như cách chúng hoạt động và tương tác với 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”.
Cái khó của việc học ASM
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.
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 đó là 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ó !!!
VD: Một chương trình in ra “Hello World” viết bằng ASM trên Mac OS như sau:
.section __DATA,__data
str:
.asciz "Hello world!\n"
.section __TEXT,__text
.globl _main
_main:
movl $0x2000004, %eax
movl $1, %edi
movq str@GOTPCREL(%rip), %rsi
movq $100, %rdx
syscall
movl $0, %ebx
movl $0x2000001, %eax
syscall
Sử dụng GNU Assembler, linker và chạy thử:
as hello.asm -o hello.old hello.o -o hello -e _main./hello
Như các bạn đã thấy việc in một đoạn text ra màn hình với ASM khá phức tạp, đó là chưa kể ta phải viết đúng chỉ thị của OS và CPU hiện tại. Tất cả chỉ là các chỉ thị cho các thanh ghi chứ không có kiểu 1 lệnh in ra tất cả như C.
Có nên học Assembly không?
Nếu không thuộc một trong những thành phần sau thì ASM sẽ không mang lại cho bạn quá nhiều ý nghĩa
Một số lợi ích khác của ASM là:
Với những kiến thức thu được từ việc học ASM, Viện CNTT ITPLus nghĩ rằng nếu bạn thực sự yêu thích và tò mò về ngôn ngữ này thì đừng chần chừ mà hãy tìm hiểu về nó luôn nhé. Chúng mình mong rằng những kiến thức chia sẻ bên trên có thể giúp cho bạn có một định hướng tốt hơn nha!
------------------------------------------------------------------------------------------------------
Hiện tại, Viện CNTT ITPlus có tổ chức các khóa học thiết kế chuyên nghiệp, bạn có thể tham khảo tại:
Ban Truyền thông ITPlus