Có một cuốn sách kinh điển về lắp ráp x86? [đóng cửa]


25

Có rất nhiều sách về lắp ráp. Tuy nhiên, họ thường giao dịch với ISA mà tôi không quan tâm, chẳng hạn như MIPS hoặc ARM. Tôi không đối phó với các kiến ​​trúc này; không có lý do gì để tôi cố gắng học chúng.

Nhưng sách lắp ráp x86 dường như ... không có.

Ví dụ, tôi đang cố gắng xây dựng một trình biên dịch đồ chơi tạo các tệp Windows Portable Executable.

Có một cuốn sách ngoài đó là tiêu chuẩn thực tế để mô tả các thực tiễn tốt nhất, phương pháp thiết kế và thông tin hữu ích khác về lắp ráp x86? Điều gì về cuốn sách làm cho nó đặc biệt?


Bạn có bao nhiêu kinh nghiệm lắp ráp? Bạn đã bao giờ thử sử dụng GCC mà không tối ưu hóa để biên dịch các chương trình C đơn giản thành lắp ráp, sau đó đảo ngược mã trở lại chương trình C chưa?
Brian

10
@Brian: Tôi sẽ cần biết lắp ráp trước khi có thể làm điều đó.
Billy ONeal

Tôi đã thấy một bản sao của tập lệnh x86. Nó là 2 tập, và có lẽ là cuốn sách lớn nhất tôi từng thấy. Hãy vui vẻ :)
AngryBird

2
Billy, Nếu bạn không biết lắp ráp gì cả, thì bất kỳ ai trong số họ sẽ khá tốt để bắt đầu từ đó để có được những ý tưởng chung. Lắp ráp rất gần với kiến ​​trúc, vì vậy các hướng dẫn lắp ráp phản ánh rất nhiều thiết kế đặc trưng của kiến ​​trúc. Tôi bắt đầu với lắp ráp x86 và đọc "Ngôn ngữ hội cho máy tính dựa trên Intel" của Kip Irvine. Cuốn sách thực sự được kết hợp với một lớp học trực tuyến tại một trường cao đẳng cộng đồng. Tôi không chắc bạn là người học gì, nhưng tôi thấy hướng dẫn có hướng dẫn hoạt động tốt nhất cho việc học.
Brian

@Brian: Ý của bạn là "bất kỳ ai trong số họ"? Tôi không hiểu "chúng" là gì - cuốn sách nào? Bất kỳ lắp ráp? Bất kỳ ISA? Tôi đã chơi với trình biên dịch MIPS; Tôi không thể tìm thấy bất cứ điều gì trên x86.
Billy ONeal

Câu trả lời:


18

Tôi đã sử dụng Ngôn ngữ hội cho Bộ xử lý x86 như một cuốn sách giáo khoa khi tôi học đại học và thấy nó rất dễ hiểu. Tôi có phiên bản thứ tư cũ hơn và so sánh nó với phiên bản thứ sáu và không nhận thấy nhiều thay đổi, vì vậy bạn có thể chọn một bản sao cũ giá rẻ. Mọi người phàn nàn về việc anh ta sử dụng thư viện riêng của mình cho I / O, nhưng anh ta nói với bạn cách thực hiện theo cách "khó" trong các chương sau.


1
Cuốn sách rất hay!
Coder

Tôi đã đọc ấn bản thứ 5 của cuốn sách của Irvine khi nó có tựa đề "Ngôn ngữ hội cho các máy tính dựa trên Intel". :)
Brian

1
Tôi nghĩ rằng đây là một gợi ý khá tệ, vì hầu hết các phiên bản thứ hai đều dành riêng cho hệ thống bí truyền của riêng tác giả, đây là phiên bản bastardized của C. Tôi chưa bao giờ đọc phiên bản đầu tiên được xuất bản. Phiên bản dos mà bạn có thể tìm thấy trên trang web của anh ấy miễn phí và chưa bao giờ được xuất bản là một bản đọc tuyệt vời . Nó cũng dài hơn khoảng 50% và không có gì về HLA (điều này hoàn toàn lãng phí thời gian).
Evan Carroll

1
@EvanCarroll Tôi bối rối. Bạn đã thay đổi liên kết thành cuốn sách sai, sau đó chỉ trích cuốn sách bạn đã thay đổi liên kết thành. Đó có phải là vô ý?
Merlyn Morgan-Graham

1
hoàn toàn là sai lầm của tôi @ MerlynMorgan-Graham tốt cho bạn vì cả việc bắt và sửa nó.
Evan Carroll


9

Nghệ thuật lập trình hội là một tài nguyên tuyệt vời có khá nhiều về lập trình x86.

Tài liệu ABI x64 cũng hữu ích. Tôi đã cố gắng tìm một liên kết đến phiên bản trên trang web của AMD, nhưng dường như tôi không thể tìm thấy nó nữa, vì vậy tôi đoán điều này sẽ phải làm.

Một cái gì đó có thể giúp khá nhiều [một chút] trong khi học là, thay vì cố gắng viết một ứng dụng hoàn chỉnh từ đầu trong lắp ráp, thay vào đó hãy viết hầu hết trong C (hoặc bất kỳ ngôn ngữ được biên dịch nào khác thực sự) và sau đó gọi một đoạn mã lắp ráp từ cái đó. Khi bạn đã thực hiện điều đó, đảo ngược nó, viết chương trình lắp ráp và gọi một số hàm C từ đó.

Chỉnh sửa: Đã sửa lỗi chính tả.


1
Một đề xuất khác: Viết một chương trình đơn giản bằng C, biên dịch nó để lắp ráp, dọn sạch nó để trình biên dịch của bạn có thể lắp ráp nó, sau đó nâng cao phiên bản lắp ráp. Đó là một cách tốt để có được một số chức năng tối thiểu (đọc từ bàn phím, ghi vào bàn điều khiển) một cách nhanh chóng.
TMN

4

Một cuốn sách rất hay để học hội x86 là Công cụ tối ưu hóa bộ xử lý Pentium . Mặc dù trọng tâm chính của cuốn sách là tối ưu hóa mã lắp ráp, nó dạy lắp ráp Pentium trên đường đi và cũng là một cuốn sách tham khảo tốt.

Nó đã hết bản in nhưng không khó để sử dụng.

Nó đi kèm với một đĩa mềm có chứa "trình tối ưu hóa mã lắp ráp". Nó không thực sự tối ưu hóa mã của bạn, mà thay vào đó tạo ra một danh sách nhận xét chỉ ra nơi không hiệu quả như quầy hàng đường ống nằm.

Công cụ đi kèm với một cuốn sách là phiên bản giới hạn của một sản phẩm có tính năng hơn mà công ty của tác giả đã sử dụng để bán, nhưng vì lý do tôi không quen với việc họ đã nghỉ việc lâu. Tôi không biết tại sao - tôi sẽ nghĩ một công cụ như vậy sẽ bán như bánh nướng.

x86 nói chung là một chủ đề rất phức tạp vì có nhiều biến thể được hỗ trợ bởi các mô hình vi xử lý khác nhau. Khi bạn biết những điều cơ bản, bạn sẽ muốn tham khảo cơ sở dữ liệu của Intel hoặc AMD cho chip chính xác mà bạn đang nhắm mục tiêu. Thật không may, mã chạy nhanh trên một mô hình CPU có thể không nhanh bằng chip khác.


Không thực sự đi cho hiệu suất; chỉ muốn có thể tạo nhị phân. Vẫn sẽ xem qua :)
Billy ONeal

2
Bạn cũng sẽ cần học cách sử dụng một trình biên dịch cụ thể, không chỉ các opcodes lắp ráp. Mỗi người lắp ráp làm những việc hoàn toàn khác nhau. Nếu bạn định viết nhiều mã lắp ráp, hãy sử dụng masm vì nó được phát triển với các lập trình viên con người. Nếu bạn chỉ định viết một đoạn nhỏ về lắp ráp nội tuyến, bạn có thể sử dụng gcc với GNU dưới dạng lắp ráp nội tuyến (còn gọi là gas). GNU as 'cú pháp hoàn toàn khác với masm's. Như được viết chủ yếu để sử dụng làm phần cuối cho gcc, để thực hiện việc tạo mã thực thi và do đó không cung cấp nhiều tính năng mà các lập trình viên con người muốn.
Mike Crawford

1

Tại sao không thử wikibook - http://en.wikibooks.org/wiki/X86_Assugging . Nó cung cấp một khởi đầu tốt cho ngôn ngữ lắp ráp.

Một chút khó khăn về lắp ráp là nhận ra nó đơn giản như thế nào, và rằng bạn cần phải duy trì sự đơn giản đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.