Ở trường đại học, tôi đã tham gia khóa học bắt buộc trong Lập trình ngôn ngữ và kiến trúc máy tính. Tôi đã tìm thấy ngôn ngữ lắp ráp khá tốn thời gian và khó nắm bắt. Tôi vẫn không thể hiểu lý do tại sao ngôn ngữ lắp ráp được dạy. Tôi hỏi cùng một câu hỏi từ người hướng dẫn của tôi và anh ấy mỉm cười và nói rằng bạn sẽ nhận được để biết trong tương lai. Nhưng tôi có một bản chất mà tôi không thể chờ đợi quá lâu cho câu trả lời một khi một câu hỏi trêu chọc tâm trí của tôi. Vì vậy, tôi muốn hỏi tại sao chúng tôi vẫn yêu cầu ngôn ngữ lắp ráp nếu có các ngôn ngữ lập trình rất mạnh mẽ, nhanh chóng và hiệu quả và trên hết là các ngôn ngữ đó cung cấp nhiều công cụ giúp lập trình dễ dàng. Vậy tại sao?Tại sao ngôn ngữ lắp ráp vẫn cần thiết nếu chúng tôi có các ngôn ngữ cấp cao cung cấp các công cụ tinh vi?
Trả lời
Mã máy vẫn cần thiết cho các tác vụ chính, ví dụ: mã cụ thể
- phần cứng, chẳng hạn như trình điều khiển thiết bị
- các thiết bị nhúng, trong đó kích thước của mã này là quan trọng
- mã cấp thấp mà hiệu suất là rất quan trọng, vv
Thông thường, ngôn ngữ lắp ráp có thể được trộn vào các ngôn ngữ cấp cao hơn, chẳng hạn như C, trong đó lắp ráp có thể được thêm vào nội tuyến vào mã C.
Điều đó nói rằng, bạn nên nắm bắt kiến trúc phần cứng cơ bản ngay cả khi bạn sẽ lập trình bằng ngôn ngữ cấp cao vì nó sẽ cung cấp cho bạn thông tin chi tiết về cách ngăn xếp, heap, con trỏ vv.
Một lý do khá tốt là tất cả các ngôn ngữ lập trình là trừu tượng về cách hoạt động của máy tính. Về lý thuyết, đối với các ngôn ngữ bậc cao, trừu tượng có nghĩa là lập trình viên không bao giờ phải lo lắng về các chi tiết của máy tính.
Nhưng abstraction is always leaky, ví dụ: hầu hết (nếu không phải tất cả) ngôn ngữ cấp cao không tự động tối ưu hóa tốt cho bộ đệm CPU (ví dụ: kết hợp bộ nhớ cache và chia sẻ sai) và đa luồng hiệu quả luôn phức tạp. Điều này có nghĩa rằng nếu hiệu suất là quan trọng, lập trình viên có thể phải viết mã của họ một cách khác nhau.
Cách tốt nhất để nhận hiệu suất là hiểu cách máy hoạt động sao cho lập trình viên có thể thực hiện các phép biến đổi kiến trúc lớn mà trình biên dịch không thể dễ dàng thực hiện được. Ví dụ, đảm bảo rằng các luồng xử lý dữ liệu theo bội số của 64 byte (để giảm chia sẻ sai trên các dòng bộ nhớ cache), hoặc thực hiện chuyển đổi cấu trúc mảng của mảng ⇔.
hội (và C đến một mức độ nào) là một cách thực sự tốt trong việc học những chi tiết thực hiện, vì nó làm cho nó thực sự dễ dàng để hiểu chính xác những gì các máy tính được làm bởi vì bạn kiểm soát chính xác những gì xảy ra ở mỗi bước.
(Điểm trừu tượng rò rỉ cũng áp dụng cho việc truy cập các thành phần phần cứng cụ/tùy chỉnh.)
Cảm ơn bạn rất nhiều vì đã phản hồi. Bây giờ, tôi đã làm rõ với tôi về sự cần thiết của ngôn ngữ lắp ráp. –
ngôn ngữ cấp cao biết gần gì về phần cứng và thường không có cách tiếp cận nó. Đó là nơi hội đồng đến để giải cứu. Việc sử dụng khác là tối ưu hóa kích thước/tốc độ của mã. –
Câu hỏi này nghe có vẻ phù hợp hơn tại http://programmers.stackexchange.com. Trong ngắn hạn mặc dù: bởi vì tất cả các ngôn ngữ cấp cao đang được biên dịch xuống ASM tự động. Điều này cho phép bạn không kiểm soát kết quả cuối cùng, trên những gì máy tính thực sự làm. Và trong khi trình biên dịch là tốt, họ không thể biết tất cả các thủ thuật nhỏ và tối ưu hóa mã để hoàn thiện.Nếu bạn muốn hiệu suất tối đa, bạn cần toàn quyền kiểm soát những gì máy tính làm trong từng chi tiết nhỏ, mà một ngôn ngữ cấp cao không cung cấp cho bạn. – deceze
Cảm ơn Alex và lừa dối –