Tự học lập trình Assembly là một trong những từ khóa được tìm kiếm nhiều nhất trên google về chủ đề tự học lập trình Assembly. Trong bài viết này, loltruyenky.vn sẽ viết bài Assembly là gì? Cách tự học lập trình Assembly mới nhất 2020
Assembly Language (hay viết tắt là ASM) là ngôn ngữ bậc thấp, chuẩn xác nó là ngôn ngữ thuộc thế hệ thứ 2 (2nd generation). ASM sử dụng những 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 các dãy 0 , 1.
Đang xem: Phần mềm lập trình assembly
những 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 tệp binary và một trình linker để đường link các thành phần lại , chỉ định nơi bắt đầu của chương trình , đây là việc cầm 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 theo thực tế nó đã làm 2. bước trên: dịch và đường link (xác định luôn nơi khởi chạy chương trình là main).
một trong những đặ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à tốn kém bộ nhớ ít hơn những chường viết bởi những 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, bí quyết chúng hoạt động , tương tác với nhau. VD như những thành phần căn bản trong máy tính, cách chúng marketing tin cho nhau:
ASM có thể tương tác rất sâu dưới hệ thống, chúng có khả năng giao tiếp trực tiếp với những phần cứng , tóm chúng hoạt động theo ý người lập trình. nó làm cho chúng ta có hẳn một ngành đưa tên là “lập trình nhúng”.
Thường thường khi học một phương ngữ lập trình chúng ta chỉ dễ dàng là cài đặt môi trường lập trình, công cụ biên dịch và dùng những editor hoặc IDE nếu như có thể học lập trình. Viết một chương trình dễ dàng rồi biên dịch , chạy thử trên những ngôn ngữ bậc cao (C, C++, Java) là rất giản đơn. nhưng với ASM thì bạn sẽ dễ bị “nản” vì chẳng thể dịch và chạy code ASM đúng như hướng dẫn.
lý do là ASM lập trình những chỉ thị cho phần cứng tuy nhiên chúng lại nương tựa vào kiến trúc CPU (ARM, x86-32, x86-64), hệ điều hành (Linux, Windows, Mac) , những tập chỉ thị mà nhà cung cấp phần cứng đưa rõ ra. đa số những chỉ dẫn, sách vở được viết cho kiến trúc iA-32. một vài 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 nhất thiết đổi source code lúc đầu. tuy nhiên thực tế thì việc làm này khó xảy ra vì chúng ta chỉ có khả năng thực hiện được điều trên nếu như không gọi tới những API của hệ điều hành. nói tới đây lại thấy yêu Java hơn, Java thực 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. Tất cả mọi thứ đã có máy ảo Java lo.
Xem thêm: cách chơi lol alpha không cần đăng ký
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 vài 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 đăng chỉ dẫn, doc của Apple thì như kinh thánh … Việc nhớ những thanh ghi, những 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ó !!! cụ thể Apple OS X Assembler Reference.
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 nói đến ta phải viết đúng chỉ thị của OS , CPU hiện trong. tất cả chỉ là các chỉ thị cho các thanh ghi chứ không hề có kiểu 1 lệnh in ra tổng cộng như C.
những người cần lập trình phần cứng, mạch điện tử, các chip vi giải quyết.các người lập trình compiler, hệ điều hành. (Trong đó có anh Chris Lattner, tác giả của LLVM và Swift mà mình rất ngưỡng mộ vì anh cực kì trẻ – SN 1978)Hacker chuyên nghiệp.Reverse Engineer: nếu như dịch là kỹ sư đảo thì không hay và cũng ko đủ ý. RE là các kỹ sư chuyên phân tích, mổ xẻ những chương trình để hiểu sâu cụ thể bên tại nó thế nào, RE thường hay ứng dụng tại an ninh: phát hiện mã độc, đánh giá thuật toán mã hoá … , các lĩnh vực khác có liên quan.
có thể dùng debug chương trình mà không cần source code.có thể sử dụng để tối ưu hoá chương trình: một số dân code ASM chuyên nghiệp sử dụng C để code và dịch ra ASM rồi edit lại để phù hợp với kiến trúc , các chỉ thị riêng , tối ưu của nhà sản xuất chip. lý do là các compiler chỉ dịch ra ASM chung nhất cho những dòng chip.
Một số tài liệu có sự liên quan tới ASM
Mình xin chia sẻ lại một số tài liệu mà trong thời gian qua mình sở hữu, để ai đấy có đang tìm hiểu ASM có thể xem xét thêm qua:
Introduction to 6 Bit Assembly Programming for Linux: Quyển này tinh gọn, rất lôi cuốn. Third edition có cho cả MacOS. Phiên bản này chỉ có cho Linux.Professional Assembly Language : Quyển này tác giả nói rất sâu về chế độ, tất cả các chỉ số register, chế độ vận hành phần cứng … Tiếc là tác giả viết cho kiến trúc IA-32 và phần code ASM cũng chỉ cho Linux x86-64 thôi.Hacking: The Art of Exploitation: dành cho ai thích hack, cuốn này nói cực kì sâu về kỹ thuật hacking đặc biệt là dùng ASM để can thiệp hệ thống.Practical Reverse Engineering: x86, x64, ARM, Windows Kernel, Reversing Tools, and Obfuscation: Quyển này cho những ai ham thích RE.
Assembly “hello, world” for OS X: Bài này viết ASM với assembler NASM. NASM trên MacOS ko có sẵn, phải cài thêm thông qua brew.x86 Assembly Guide: bài này mình hay sử dụng để tra cứu giúp nhanh các chỉ thị và thanh ghi (vì não cá vàng chưa thể nhớ nổi
)OS X Assembler Reference: Guide về Assembler cho OS X của Apple, mình sử dụng doc này để convert code bên Linux qua. thứ này thật sự không giúp mình nhiều, chủ yếu đuối coi phần Data Segment và memory padding để sử dụng thanh ghi EAX cho chuẩn xác. nếu như không chương trình sẽ chạy ra lỗi bus error.
Xem thêm: Cách Bỏ Chơi Điện Tử – Cách Giúp Con Cái Nghiện Game Hiệu Quả
Dù rằng dừng lại khá sớm với việc học ASM tuy nhiên mình cũng hài lòng với hậu quả đạt được. Mình mang lại được một mớ kiến thức kha khá về CPU, căn bản về việc những process cấp phát bộ nhớ. và đặc biệt là bây giờ khi cái màn hình debug trong XCode hiện lên 1 mớ ASM mình có thể biết được phần nào chứ không coi nó như thứ ngôn ngữ ngoài hành tinh nữa.