Ngôn ngữ lập trình Assembly là gì, có nên học Assembly không?

Related Articles

Theo dõi Massageishealthy trên Google News

Assembly là dạng ngôn ngữ lập trình bậc cao, nó là dạng ngôn ngữ theo kiểu mẫu gợi nhớ (Mnemonic), hay dạng kí hiệu, của ngôn ngữ máy. Assembly giúp mọi người nhìn rõ hơn mối quan hệ giữa các thành phần chức năng bên trong máy tính và hệ điều hành.

Có thể khẳng định, việc tiếp xúc này sẽ giúp các bạn nắm vững kiến trúc máy tính, tổ chức hoạt động bên trong máy tính và hệ điều hành.

Ngôn ngữ lập trình Assembly là gì, có nên học Assembly không?

Vậy Assemly Language là gì?

Nếu như những bạn có tìm hiểu và khám phá về dòng ngôn ngữ này thì hoàn toàn có thể thấy cấu trúc tài liệu và giải thuật của nó toàn là 0 và 1 nên rất khó đọc và khó hiểu. Do đó, những nhà phong cách thiết kế thuật toán đã phát minh sáng tạo ra vi giải quyết và xử lý để đưa ra tập lệnh hợp ngữ gần với ngôn ngữ tự nhiên hơn .

Tuy nhiên, những dòng lệnh này vẫn tương thích với phần cứng rất khoa học, nhờ đó việc tiếp cận với lập trình hợp ngữ giúp tất cả chúng ta hiểu rõ hơn về kiến trúc và tổ chức triển khai hoạt động giải trí của phần cứng .

Trong nội dung của bài viết ngày ngày hôm nay, tất cả chúng ta chỉ tìm hiểu và khám phá khái quát về ngôn ngữ lập trình Assembly, để lập trình chạy trên những máy IBM-PC : Sử dụng họ vi giải quyết và xử lý này và hoạt động giải trí trong sự phối hợp với hệ quản lý MS_DOS .

Assembly Language viết tắt là ASM Language

Assembly Language ( ASM ), tiếng Việt là hợp ngữ. Mục đích của mình học ASM chỉ cơ bản là muốn hiểu thêm về người bạn thân thương nhất của mình, cái máy tính mà suốt ngày mình ngồi trước nó. Mình chỉ thật sự muốn biết là đằng sau những dòng lệnh mình code thường ngày thì bên dưới nó làm cái gì ? ! .

Thật tiếc là sau khi đã khám phá được một số ít khái niệm về kiến trúc CPU, những loại Registers ( thanh ghi ), Data Segments, Data Moving thì mình buộc phải bỏ cuộc ở Control Flow .

Lý do tiên phong là … do mình dở, mình thấy nó thật sự quá khó với mình, vốn là dân code ứng dụng với ngôn ngữ bậc cao ( high level language ) và chưa biết gì về Computer Scientic .

Ngôn ngữ lập trình Assembly là gì, có tác dụng gì, có nên học Assembly không?

Thứ hai là cách tiếp cận bottom-up ( từ triết lý lên ) này cũng không tốt. Mình nghĩ là trong tương lai nếu có dự án Bất Động Sản nào cần tới ASM thì mình sẽ hoàn toàn có thể vừa học và practice tốt hơn ( hướng tiếp cận top-down hay còn gọi là end to end ) .

Assembly Language ( hay viết tắt là ASM ) là ngôn ngữ bậc thấp, đúng mực nó là ngôn ngữ thuộc thế hệ thứ 2 ( 2 nd generation ). ASM sử dụng những từ gợi nhớ ( mnemonics ) để viết những thông tư ( instructions ) 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 tương thích ( NASM, AS, DASM ) để dịch chúng thành những file binary và một trình linker để link những thành phần lại và chỉ định nơi khởi đầ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).

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ó vận tốc thực thi cao và tiêu tốn 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 tất cả chúng ta hiểu thêm về kiến trúc phần cứng máy tính, cách chúng hoạt động giải trí và tương tác với nhau. VD như những thành phần cơ bản trong máy tính, cách chúng truyền thông tin cho nhau :

ASM hoàn toàn có thể tương tác rất sâu dưới mạng lưới hệ thống, chúng hoàn toàn có thể tiếp xúc trực tiếp với những phần cứng và bắt chúng hoạt động giải trí theo ý người lập trình. Vì thế mà tất cả chúng ta có hẳn một ngành mang tên là “ lập trình nhúng ” .

Một trong những lợi thế của dòng ngôn ngữ này đó là chương trình viết trên nó có kích cỡ nhỏ hơn và vận tốc nạp / triển khai chương trình nhanh hơn so với viết ( chương trình cùng tính năng ) trên những ngôn ngữ lập trình bậc cao .

Bên cạnh đó, phần đông mọi ngôn ngữ lập trình bậc cao thông dụng nhất lúc bấy giờ đều được cho phép viết ( “ nhúng ” ) mã lệnh hợp ngữ trong nó. Vấn đề này hoàn toàn có thể tương hỗ lập trình viên khai thác toàn bộ ưu điểm của những ngôn ngữ lập trình .

Assembly rất mạnh trong những hoạt động thọc sâu vào các yếu tố bên trong hệ thống công nghệ web giới thiệu công ty, trong khi đó ngôn ngữ bậc cao mạnh trong các thao tác xử lý dữ liệu và thiết kế giao diện.

Như vậy sẽ là rất thuận tiện nếu sử dụng ngôn ngữ bậc cao để viết chương trình giải quyết và xử lý thông tin mạng lưới hệ thống, khi đó trách nhiệm truy xuất mạng lưới hệ thống ( thanh ghi, bộ nhớ, cổng vào / ra, thiết bị, … ) để lấy tài liệu sẽ được giao cho những đoạn mã lệnh hợp ngữ được nhúng trong chương trình này .

Assembly có 2 tính năng để tương tác cùng hệ thống

· Nhập trực tiếp từng lệnh / đoạn lệnh vào bộ nhớ rồi được cho phép triển khai ngay trên bộ nhớ mà không cần qua bước biên dịch chương trình. Chương trình tháo gỡ Debug ( đi kèm hệ quản lý và điều hành MS_DOS : Debug. exe ) là một trong những chương trình tương hỗ chính sách này cho hợp ngữ 16 bít ;

· Viết chương trình hợp ngữ, rồi sau đó sử dụng những chương trình biên dịch để dịch nó sang chương trình thực thi ( dạng EXE hoặc COM ) và cho triển khai chương trình này .

Ngôn ngữ lập trình Assembly là gì, có tác dụng gì, có nên học Assembly không?

Các lập trình viên có 2 lựa chọn cho trình biên dịch hợp ngữ

· Trình biên dịch hợp ngữ cho những ứng dụng chạy trên nền hệ quản lý 16 bít MS_DOS ; Trình biên dịch hợp ngữ 32 bít, MASM32 ( Macro Assembler 32 bít ) .

· Trình biên dịch hợp ngữ cho những ứng dụng chạy trên nền hệ quản lý và điều hành 32 bít MS_Windows .

Trong thực tiễn, để chuyển một chương trình hợp ngữ sang dạng chương trình thực thi EXE 16 bít hoặc COM 16 bít thì cần phải có sự tương hỗ của chương trình tiện ích của hệ điều hành quản lý MS_DOS : Link ( Link. exe ) và EXE2Bin ( EXE2Bin. com ) .

Chương trình hợp ngữ 16 bít sử dụng mạng lưới hệ thống những ngắt mềm ( Interrupt ) của BIOS và DOS như thể thư viện lập trình của nó, trong khi đó chương trình hợp ngữ 32 bít sử dụng tập hàm API làm thư viện lập trình của nó .

Kết luận : đây là những thông tin quan trọng bạn cần biết về dòng ngôn ngữ lập trình bậc cao Assembly. Kiến thức này chỉ khái quát nền tảng của Assembly, để tìm hiểu sâu bạn cần trang bị thêm nhiều tài liệu chuyên ngành khác, những tài liệu này bạn có thể tìm kiếm trên Google hoặc các diễn đàn chuyên về lập trình. Chúc các bạn thành công !!!

Cái khó của việc học ASM ra sao?

Thông thường khi học một ngôn ngữ lập trình tất cả chúng ta chỉ đơn thuần là setup môi trường tự nhiên lập trình, công cụ biên dịch và sử dụng những editor hoặc IDE nếu hoàn toàn có thể học lập trình .

Viết một chương trình đơn thuần rồi biên dịch và chạy thử trên những ngôn ngữ bậc cao ( C, C + +, Java ) là rất thuận tiện. 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 những thông tư cho phần cứng tuy nhiên chúng lại chịu ràng buộc vào kiến trúc CPU ( ARM, x86-32, x86-64 ), hệ quản lý và điều hành ( Linux, Windows, Mac ) và những tập thông tư mà nhà phân phối phần cứng đưa ra .

Đa số những 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 .

Ngôn ngữ lập trình Assembly là gì, có tác dụng gì, có nên học Assembly không?Khác với ngôn ngữ C, về kim chỉ nan tất cả chúng ta hoàn toàn có thể dịch lại mà không cần đổi source code khởi đầu. Tuy nhiên trong thực tiễn thì điều này khó xảy ra vì tất cả chúng ta chỉ hoàn toàn có thể làm được điều trên nếu không gọi tới những API của hệ quản lý và đ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 vất vả 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 số ít thông tư 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ớ những thanh ghi, những thông tư 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 [email protected](%rip), %rsi

movq $100, %rdx

syscall

movl $0, %ebx

movl $0x2000001, %eax

syscall

.section __DATA,__data

str:

.asciz “Hello world!n”

.section __TEXT,__text

.globl _main

_main:

movl $0x2000004, %eax

movl $1, %edi

movq [email protected](%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ư những bạn đã thấy việc in một đoạn text ra màn hình hiển thị với ASM khá phức tạp, đó là chưa kể ta phải viết đúng thông tư của OS và CPU hiện tại. Tất cả chỉ là những thông tư cho những thanh ghi chứ không có kiểu 1 lệnh in ra toàn bộ như C .

Ngôn ngữ lập trình Assembly là gì, có tác dụng gì, có nên học Assembly không?

ASM khó vậy thì học để làm gì ?!?

ASM sẽ chẳng có ý nghĩa gì nếu 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ử, những chip vi giải quyết và xử lý .

Những người lập trình compiler, hệ quản lý. ( Trong đó có anh Chris Lattner, tác giả của LLVM và Swift mà mình rất ngưỡng mộ vì anh rất trẻ – SN 1978 )

Hacker chuyên nghiệp

Reverse Engineer : nếu dịch là kỹ sư hòn đảo thì không hay và cũng ko đủ ý. RE là những kỹ sư chuyên nghiên cứu và phân tích, phẫu thuật những chương trình để hiểu rõ cụ thể bên trong nó thế nào, RE thường ứng dụng trong bảo mật an ninh : phát hiện mã độc, nhìn nhận thuật toán mã hoá … và những nghành khác có tương quan .

Một số lợi ích khác của ASM

Có thể dùng debug chương trình mà không cần source code .

Có thể dùng để tối ưu hoá chương trình : một số ít dân code ASM chuyên nghiệp dùng C để code và dịch ra ASM rồi edit lại cho tương thích với kiến trúc và những thông tư riêng và tối ưu của đơn vị sản xuất chip. Lý do là những compiler chỉ dịch ra ASM chung nhất cho những dòng chip .

Một số tài liệu liên quan tới ASM

Mình xin san sẻ lại một số ít tài liệu mà trong thời hạn qua mình có được, để ai đó có đang tìm hiểu và khám phá ASM hoàn toàn có thể tìm hiểu thêm qua :

Ngôn ngữ lập trình Assembly là gì, có tác dụng gì, có nên học Assembly không?

Ebook về Assembly 

Introduction to 64 Bit Assembly Programming for Linux: Quyển này tinh gọn, rất hay. 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ề cơ chế, tất cả các thông số register, cơ 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 rất sâu về kỹ thuật hacking đặc biệt là sử 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 yêu thích RE.

* * Sách tiếng Việt mình thấy có vài cuốn nhưng mở vài trang đọc thật sự không hiểu gì ! ! !

Bài viết chuyên sâu về Assembly 

Ngôn ngữ lập trình Assembly là gì, có tác dụng gì, có nên học Assembly không?

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 dùng để tra cứu 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 dùng doc này để convert code bên Linux qua. Cái này thật sự không giúp mình nhiều, chủ yếu coi phần Data Segment và memory padding để sử dụng thanh ghi EAX cho chính xác. Nếu không chương trình sẽ chạy ra lỗi bus error.

Mặc dù dừng lại khá sớm với việc học ASM nhưng mình cũng hài lòng với hiệu quả đạt được. Mình thu được một mớ kỹ năng và kiến thức tương đối về CPU, cơ bản về việc những process cấp phép bộ nhớ .

Và quan trọng là giờ đây khi cái màn hình hiển thị debug trong XCode hiện lên 1 mớ ASM mình hoàn toàn có thể hiểu được phần nào chứ không coi nó như thứ ngôn ngữ ngoài hành tinh nữa .

Nguồn Massageishealthy tổng hợp

4.7 / 5 – ( 6 bầu chọn )

aaaaaaaaaaaaaaa

More on this topic

Comments

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Advertismentspot_img

Popular stories