Assembly Là Gì? Cách Tự Học Lập Trình Assembly Mới Nhất 2020 - Coder
Có thể bạn quan tâm
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, coder.com.vn sẽ viết bài Assembly là gì? Cách tự học lập trình Assembly mới nhất 2020
Vậy Assemly Language là gì ?
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.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”.Cái khó của việc học ASM
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.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.VD: Một chương trình in ra “Hello World” viết bằng ASM trên Mac OS như sau:123.45.6.78.9.101112131415161718 | .section __DATA,__datastr:.asciz “Hello world!\n”.section __TEXT,__text.globl _main_main:movl $0x2000004và %eaxmovl $1và %edimovq str@GOTPCREL(%rip), %rsimovq $100, %rdxsyscallmovl $0, %ebxmovl $0x2000001, %eaxsyscall |
123. | as hello.asm -o hello.old hello.o -o hello -e _main./hello |
ASM khó vậy thì học để làm gì ?!?
ASM sẽ chẳng có ý nghĩa gì nếu như chúng ta không thuộc tập sau đây:- 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.
Xem thêm: SQL Injection là gì? Hướng dẫn cách kiểm tra SQL Injection mới nhất 2020
Một số lợi ích khác của ASM là:- 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:Ebook:- 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.
Mức lương của lập trình viên Việt Nam hiện nay là bao nhiêu?
Bài Viết Tiếp TheoHướng dẫn cách học lập trình hiệu quả cho người mới bắt đầu
Bài Viết Tiếp TheoHướng dẫn cách học lập trình hiệu quả cho người mới bắt đầu
CODER
Cần Hỗ TrợChuyên mục
- Tool
- Blog
- Tài Liệu
- Lập Trình
- Việc Làm
- Công Nghệ
Phần mềm - Công cụ
- Brands
- Alosoft
- Seeding
- Top Việc
- Tổng Hợp
- Quản Trị Nhân Sự
Liên kết
- Top Vui
- Xe Mô Tô
- Quản Lý Kho
- Blog Việc Làm
- Giải Pháp Việc Làm
- Phần Mềm Miễn Phí
Coder.com.vn là blog cá nhân, mọi thông tin đều mang tính chất tham khảo. Do đó, chúng tôi không chịu bất cứ trách nhiệm nào đối với việc sử dụng các thông tin trên website.Xem thêm Miễn Trừ Trách Nhiệm
- Trang Chủ
- Lập Trình
- Công Nghệ
- Tool
- Tài Liệu
- Việc Làm
- Blog
© 2024 JNews - Premium WordPress news & magazine theme by Jegtheme.
Họ và tên Số điện thoại Thông tin cần hỗ trợ Gửi Thông TinTừ khóa » Tự Học Assembly
-
Lập Trình Viên Có Nên Học Assembly Không? | TopDev
-
[ASSEMBLY] BÀI 1: NHẬP MÔN ASSEMBLY VỚI HELLO WORD
-
Tôi đã Học Assembly 32bit Như Thế Nào (Phần 1) - Viblo
-
Bước đầu Với Lập Trình Assembly Trên Vi Xử Lý Intel 8086/8088
-
(Tải Về) Tài Liệu Lập Trình Hợp Ngữ Assembly Tiếng Việt - Du Học
-
[PDF] Chương 1. NGÔN NGỮ ASM VÀ CÁCH LẬP TRÌNH (25 Tiết)
-
Lập Trình Assembly Là Gì? Có Nên Học Assembly Hay Không? - Teky
-
Assembly Là Gì? Tìm Hiểu Về Ngôn Ngữ Assembly Từ A - Z - FPT Cloud
-
Ngôn Ngữ Lập Trình Assembly
-
Tự Học Assembly | How Kteam
-
Khóa Học Assembly Language Từ Đầu Như Thế Nào? Cách Tự ...
-
Học Assembly Language Từ đầu Như Thế Nào? - Dev Chat
-
Assembly Là Ngôn Ngữ Lập Trình Gì?
-
Cách Học + Tài Liệu Assembly - YouTube