Assembly Là Gì? Cách Tự Học Lập Trình Assembly Mới Nhất 2020 - Coder

Trang Chủ Lập Trình Assembly là gì? Cách tự học lập trình Assembly mới nhất 2020 Cv.com.vn Bởi Cv.com.vn 06/02/2020 Trong Lập Trình, Tài Liệu 0Tải Xuống (48)

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  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  đườ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  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  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 đơnnhưng với ASM thì bạn sẽ dễ bị “nản” vì chẳng thể dịch  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 đầutuy 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  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 $0x2000004 %eaxmovl $1 %edimovq str@GOTPCREL(%rip), %rsimovq $100, %rdxsyscallmovl $0, %ebxmovl $0x2000001, %eaxsyscall
dùng GNU Assembler, linker , chạy thử:
123.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 nói đến ta phải viết đúng chỉ thị của OS , CPU hiện trongtấ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.

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:
  1. 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.
  2. 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  Swift mà mình rất ngưỡng mộ vì anh cực kì trẻ – SN 1978)
  3. Hacker chuyên nghiệp.
  4. Reverse Engineer: nếu như dịch là kỹ sư đảo thì không hay  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à:
  1. có thể dùng debug chương trình mà không cần source code.
  2. 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  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:
  1. 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.
  2. 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  phần code ASM cũng chỉ cho Linux x86-64 thôi.
  3. 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.
  4. Practical Reverse Engineering: x86, x64, ARM, Windows Kernel, Reversing Tools, and Obfuscation: Quyển này cho những ai ham thích RE.
** Sách tiếng Việt mình thấy có vài cuốn tuy nhiên mở vài trang đọc thực sự không hiểu gì !!!Bài viết:
  1. 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.
  2. x86 Assembly Guide: bài này mình hay sử dụng để tra cứu giúp nhanh các chỉ thị  thanh ghi (vì não cá vàng chưa thể nhớ nổi @@)
  3. 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  memory padding để sử dụng thanh ghi EAX cho chuẩn xácnếu như không chương trình sẽ chạy ra lỗi bus error.
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ớ.  đặ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?.Xem thêm:  Những ngôn ngữ lập trình trí tuệ nhân tạo c++ phổ biến nhất hiện nayChúc các bạn học tốt.Nguồn: https://techtalk.vn/ Tags: assembly codecác lệnh trong assemblycách chạy chương trình assemblychương trình assembly mẫukhoá học assemblylập trình assembly cho armphần mềm lập trình assemblyvì sao dùng ngôn ngữ c cho vi điều khiển Bài Viết Trước

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 Theo

Hướ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 Theo Tải Xuống (15)

Hướ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 Tin

Từ khóa » Tự Học Assembly