2010-09-16 35 views
6

Hey tôi có thể lập trình trong C, một chút trong Python và Pascal và tôi thực sự muốn học lắp ráp. Tôi 18 tuổi và học xong trung học, lập trình là sở thích của tôi vì công việc của trường chắc chắn không phải là một thách thức lớn.Tôi bắt đầu với bộ phận lắp ráp ở đâu?

Tôi đã tải xuống một vài cuốn sách về hội chúng là: Nghệ thuật hội, hội cho người mới bắt đầu, hội cho người mới bắt đầu hoàn thành và ngôn ngữ hội đồng chuyên nghiệp Wrox. Tôi cũng đã tải xuống trình biên dịch FASM, MASM và HLA.

Bây giờ là một vài câu hỏi.

  1. Các ví dụ trong hội Toàn người mới bắt đầu là dành cho MASM, tôi nên chạy chúng trong một giả lập, có người nói với tôi rằng tôi có thể làm hỏng máy tính của tôi nếu tôi không sử dụng một, và nếu có mà giả lập nên Tôi sử dụng?

  2. Ngoài ra, làm thế nào để nhà phát triển tạo mã lắp ráp của họ di động? Thông tin duy nhất tôi đã tìm thấy về chủ đề này là viết vi-rút, vì vi-rút được viết trong hội đồng phải là di động.

  3. HLA chính xác là gì và nó có thật hay chỉ là một HLL cải trang thành lắp ráp để giúp dạy cho người mới bắt đầu lắp ráp?

  4. Và cộng đồng lắp ráp ở đâu, ngoại trừ trên các trang web vxheaven và cracker rõ ràng?

Tôi đọc rất nhiều gần đây nhưng tôi cảm thấy như một người học tiếng Latin, nhưng sẽ không bao giờ đến Vatican để gặp những người nói tiếng Latin. Bạn bè của tôi tất cả các chương trình trong Java, nhưng dường như không quan tâm đến C hoặc C++, họ nghĩ rằng họ có thể sử dụng Java cho tất cả mọi thứ. Tôi đang chạy Windows 7 và Ubuntu 10.0.10 trên Intel. Tôi mới chỉ lập trình được khoảng một năm nay ... tôi có tham gia vào việc lắp ráp quá sớm không? Lý do tôi muốn học lắp ráp:

  1. Bạn muốn hiểu thêm về cách hoạt động của CPU.
  2. Tìm kiếm thử thách.
  3. Muốn tìm hiểu cách viết mã hiệu quả.
  4. Bạn muốn viết các chương trình nhỏ hơn nhanh hơn.
  5. Bạn muốn tìm hiểu thêm về dev hệ điều hành khi tôi đã nắm vững quy trình lắp ráp.
  6. Nếu tôi chủ lắp ráp, học thêm HLL sẽ dễ dàng hơn.
  7. Bạn muốn có thứ gì đó để cung cấp khi đăng ký một công việc mà những người khác sẽ không có.
  8. Quan tâm đến AVR ví dụ Arduino, sử dụng C và không lắp ráp nhưng muốn hiểu thêm về AVR.

Cảm ơn. T

Trả lời

0

Như bạn đã đề cập trong nr. 8, tôi khuyến khích bạn sử dụng AVR, vì nó là một nền tảng tốt đẹp cho việc học và sử dụng assembler.

Tại sao?

Bởi vì trên máy tính của tôi, tôi không chỉ chạy một số chương trình lắp ráp tự viết ngoại trừ trong trình giả lập.
Tôi không thể nghĩ ra bất kỳ chương trình thông thường nào cho máy tính, nơi nó có ý nghĩa hơn đối với chương trình trong trình biên dịch hơn là trong một ngôn ngữ hiện đại, tinh vi.

AVR hoặc chương trình liên quan vi điều khiển khác (µc) là rất gần với phần cứng, điền thanh ghi, bộ chuyển đổi bit và vv.
Trong µc bạn nhận được kết quả ngay lập tức mà bạn có thể hiển thị (flash một số dẫn! Yeah.). Ngoài ra, các chương trình cc có xu hướng ngắn và lợi nhuận tốc độ của chúng từ lập trình hiệu quả.

+0

Đó là một câu trả lời hay nhưng tôi vẫn muốn có thể lập trình nhiều hơn chỉ là vi điều khiển. Tôi tìm thấy trang web của Virtual Box, có vẻ như tôi sẽ thử nó. Đối với những người khác muốn thử http://www.virtualbox.org/ Timo – Timo

+1

Có, VirtualBox là trình giả lập/sandbox của bạn để lập trình an toàn, nhưng bạn cũng tính đến chi phí mã trong mã asm của mình chỉ cho ví dụ:viết "hello world" vào giao diện điều khiển trong cửa sổ? –

+0

Điểm tốt không nghĩ về điều đó. – Timo

0

Tối ưu hóa ngôn ngữ lắp ráp là một điều của quá khứ. Các trình biên dịch và bộ xử lý C/C++ hiện đại có hiệu quả đáng kinh ngạc khi tối ưu hóa mã C được viết tốt. Họ nhận thức rõ tất cả các thủ thuật để đặt hàng các hướng dẫn để chúng tối đa hóa việc thực hiện song song và sử dụng bộ nhớ cache hiệu quả nhất. Điều đó rất khó làm bằng tay. Hầu hết các trình biên dịch cũng có tùy chọn để tối ưu hóa kích thước, nếu đó là một vấn đề.

Nếu bạn muốn chơi xung quanh với lắp ráp, bạn có thể kiểm tra bộ ghép GNU. Đó là nền tảng chéo hợp lý, nhưng lắp ráp là do tự nhiên không phải là nền tảng chéo. Bạn lập trình ngôn ngữ lắp ráp bởi vì bạn muốn thực hiện một số thủ thuật phần cứng rất cụ thể mà trình biên dịch của bạn có thể không biết.

Nếu tôi là bạn và tôi muốn xuống cấp thấp, tôi chắc chắn sẽ đào sâu vào phần cứng đồ họa thay thế. Nó gần với phép thuật những gì bạn có thể làm với một GPU hiện đại.

Hoặc học cách tuyệt vời tại C++. Xem trang web boost.org hoặc lập trình trò chơi. Nó sẽ cho bạn nhiều thử thách và tất cả tốc độ bạn cần.

+0

"Tối ưu hóa ngôn ngữ lắp ráp là một điều của quá khứ." Điều đó không đúng, chỉ cần ít hơn rất nhiều. Người ta thường không viết phần lớn mã trong hội đồng ngày nay, nhưng đối với + tối ưu + mã, nó vẫn có giá trị. Hiếm khi cần thiết, nhưng vẫn còn. – PhiS

+0

Tôi sẽ không đồng ý rằng bạn trong trường hợp cực đoan có thể tối ưu hóa một số vòng bên trong vượt ra ngoài những gì trình biên dịch có thể làm cho bạn. Tôi đã ở đó trong thời đại "demo" vàng, nơi chúng tôi đã viết 95% trong hội đồng tinh khiết, nhưng đó là một trò chơi khác. Phần cứng đơn giản và chậm hơn nhiều, vì vậy có rất nhiều thứ để đạt được. Bây giờ chúng tôi có một người đàn ông trẻ, những người muốn để có được bàn tay của mình bẩn và những gì tôi có nghĩa là với "một điều của quá khứ" là lắp ráp là điều cần làm cho các lập trình viên trẻ tham vọng trong nineties sớm. Hội không phải là biên giới nữa. Làm quen với GPU, ứng dụng điện thoại hoặc thứ khác thay thế. – Holstebroe

6

1) Bạn thực sự không thể "làm hỏng" hệ thống của bạn nhiều hơn khi chạy chương trình lắp ráp so với bạn có thể từ C. Trên một hệ điều hành hiện đại, điều tồi tệ nhất bạn thường sẽ bị treo. Nó có thể là một chút dễ dàng hơn để sụp đổ quá trình của bạn từ mã lắp ráp vô tình, mặc dù. Nếu bạn muốn nhận được một cái gì đó hữu ích ra khỏi trình mô phỏng, hãy kiểm tra Bochs hoặc QEMU - thay vì chỉ cung cấp một hộp cát, chúng có các công cụ gỡ lỗi hữu ích. Bạn sẽ không sao nếu không có vm, tuy nhiên, viết + mã thử nghiệm trên hệ điều hành thông thường của bạn với trình gỡ rối thường xuyên của bạn.

2) Bạn không, thực sự. Bạn có thể làm cho di động trên hệ điều hành (nhưng với cùng một CPU) như bạn làm điều đó cho C, nhưng lắp ráp chéo CPU chỉ không có ý nghĩa (nếu bạn muốn làm điều đó, bạn cũng có thể sử dụng C hoặc. NET hoặc Java bytecode).

3) Chủ đề của nhiều loại hình flamewar. Phụ thuộc vào cách bạn nhìn vào nó ... một Assembler thực sự chỉ là một trình biên dịch có giao dịch với ngôn ngữ assembly. Có rất nhiều hương vị của lắp ráp, một số cao hơn so với những người khác; hầu hết những cái có sẵn cho x86 đều có hỗ trợ macro. HLA thêm hỗ trợ macro và cú pháp mà nhiều người không thích, cùng với thư viện chuẩn lớn. Không phải tách trà của tôi (tôi thích sử dụng một HLL "thực"), nhưng trong cuốn sách của tôi nó vẫn là ngôn ngữ lắp ráp.

4) http://www.asmcommunity.net/board/, http://board.flatassembler.net :) - tránh xa các kênh IRC. Ngoài ra, tránh xa usenet alt.lang.assembly, nó đã được tất cả nhưng bị phá hủy bởi một vài cá nhân có nghĩa là.

Đối với một vài lý do của bạn để lắp ráp học tập:

6. Nếu tôi làm chủ lắp ráp, tìm hiểu thêm HLL sẽ dễ dàng hơn.

Không nhất thiết và thậm chí có thể khó hơn nếu bạn "làm quá nhiều" trước khi đào sâu vào HLL. Tôi thấy rằng một số kiến ​​thức về kiến ​​trúc máy có thể dẫn đến việc viết phần mềm tốt hơn, nhưng chỉ khi bạn học không bị ám ảnh qua các chi tiết không liên quan nhỏ mọi lúc.

7.Bạn muốn có một cái gì đó để cung cấp khi áp dụng cho một công việc mà những người khác sẽ không có.

Sẽ không nhất thiết giúp ích cho bạn, vì việc lắp ráp hoàn toàn không liên quan ở hầu hết các vị trí. Heck, bạn có nguy cơ thành kiến ​​của "oh, anh ấy sẽ không bao giờ hoàn thành công việc, bị lạc trong những vi mô vô dụng".

+0

Tôi tin rằng trên stack tràn có khá một vài người biết lắp ráp cũng đủ để được hữu ích. –

+0

@Georg: thực sự đúng, nhưng SO không phải là một "cộng đồng lắp ráp" - nó tập trung vào sự tương tác câu hỏi/trả lời, trong khi diễn đàn/bảng tin có các giá trị khác. – snemarch

1

Ở đây đi ...

  • x86 không phải là lý tưởng:
    • Rất ít hướng dẫn 3-op (lea thường được sử dụng như 3-op add IIRC). Tôi thích hướng dẫn 3-op.
    • mã máy x86 là rất khác với các vi lệnh thực sự chạy trên CPU. Có một đống tiền xử lý được thực hiện; lắp ráp bạn thấy cho bạn biết rất ít về cách CPU thực sự hoạt động.
    • Rất nhiều lời khuyên lắp ráp ("hướng dẫn này nhanh hơn") là một chút lỗi thời. Rõ ràng bạn có thể làm cho một số ứng dụng x86 cổ đại nhanh hơn bằng cách dịch x86 thành x86 để loại bỏ các lệnh chậm.
  • Hội không nhất thiết sẽ dạy bạn viết "mã nhanh hơn". Khi ai đó đi "oh, $ large_function này là chậm, vì vậy tôi sẽ tự viết nó trong assembly", thường thì nó kết thúc chậm hơn. Đọc lắp ráp và phát hiện các bit chậm hữu ích; sau đó bạn có thể tinh chỉnh mã để xem điều gì sẽ giúp trình biên dịch (ngay cả khi nó đơn giản như "oh, GCC đã không nhận thấy rằng kết quả của cuộc gọi hàm đó là không đổi").
  • Lắp ráp có thể cho phép bạn viết mã nhỏ hơn (con người khá giỏi về chơi mã), nhưng tiết kiệm không gian lớn nhất thường là do bạn không cần phải bao gồm thời gian chạy C. Con người cũng có thể thoát ra ngoài mà không theo các quy ước gọi điện.
  • Hệ điều hành phần lớn không được viết trong hội đồng (đây là nơi tôi đào một giai thoại về người/người đã viết toàn bộ hệ điều hành trong hội đồng chỉ để biết rằng nó chậm hơn). Một vài bit, lớn nhất trong số đó là bộ tải khởi động (trong đó, trên x86, vẫn ở chế độ thực 16 bit ""). Tôi biết ai đó đã lập trình mọi thứ vào bộ tải khởi động của mình; Nghe có vẻ thú vị (nhưng bạn có thể muốn chạy nó trong một máy ảo, nếu chỉ để bạn có thể sử dụng internet cùng một lúc).
  • Hội có lẽ sẽ không giúp bạn với hầu hết các công việc (nhưng cũng giống như tôi không làm việc cho một địa điểm muốn xem $ list_of_languages ​​trong CV của tôi, tôi sẽ không làm việc cho một nơi khiến tôi thất vọng vì tôi ' đã thực hiện một số lắp ráp hobbyist).
  • Lắp ráp không thể di động. Ngay cả các hệ thống sử dụng cùng một CPU thường sử dụng một ABI khác (ví dụ: "Cổ điển" Mac OS so với Mac OS X).

Hầu hết các khóa học CS đều có xu hướng sử dụng RISCy (ARM, MIPS, SPARC). Tôi bắt đầu vào M68K, nhặt một chút PPC vào một thời điểm nào đó, và học ARM tại trường đại học. ARM là hợp lý sạch sẽ và có khả năng hữu ích nếu bạn muốn làm việc với điện thoại/thiết bị nhúng, hoặc cho ARM; cho những điều thú vị bạn có thể thực hiện trên ARM, hãy thử số SheevaPlug hoặc tương tự.

Tôi chưa bao giờ làm bất cứ điều gì trên vi điều khiển, nhưng nó có vẻ tương tự như sử dụng bảng ARM (có thể là niềm vui nhất tôi có trong toàn bộ khóa học CS).

Các vấn đề liên quan