2012-04-23 42 views
38

Tôi đã thấy các tệp .S trong các dự án khác nhau như hạt nhân Linux, hạt nhân FreeBSD hoặc trong một số dự án khác. Những tệp này làm gì và tại sao chúng tôi không thể có tệp .C thay vào đó?Tệp .S là gì?

Trả lời

41

.S file là mã file nguồn viết bằng lắp ráp. Assembly là một dạng lập trình cực kỳ cấp thấp. Các tệp này chứa các hướng dẫn lắp ráp cho bộ xử lý theo thứ tự tuần tự và thường được biên dịch dựa trên kiến ​​trúc đã chọn. Ví dụ về các tệp như vậy thường được thấy trong hạt nhân Linux cho các kiến ​​trúc cụ thể, ví dụ: x86, sparc, ARM vv

Để biết thêm thông tin về ngôn ngữ lắp ráp:

5

Họ là assembler code file:

Một ngôn ngữ lắp ráp là một ngôn ngữ lập trình bậc thấp cho máy tính, vi xử lý, vi điều khiển, và thiết bị có thể lập trình khác, trong đó mỗi câu lệnh tương ứng với một máy hướng dẫn ngôn ngữ . Ngôn ngữ lắp ráp cụ thể cho một kiến ​​trúc máy tính nhất định, trái ngược với hầu hết các ngôn ngữ lập trình bậc cao , có thể di động hơn.

và vì vậy các tệp này không giống như tệp mã C.

Lưu ý rằng C files can be inlined with assembly instructions.

4

Phần mở rộng .S cho biết số assembly language file.

Tại sao chúng tôi không thể có tệp .C thay thế?

Bởi vì mã nguồn liệu - có thể là do con người bước vào hoặc lắp ráp tạo - là lắp ráp, không C.

2

.S tệp được viết bằng ngôn ngữ lắp ráp tức là mức thấp o f lập trình. Trong mã nguồn hạt nhân Linux, .S thường là các tệp khởi đầu mà hạt nhân chạy khi hạt nhân Linux khởi động (ví dụ: - head.S). Chúng tôi viết điều này trong .S và không phải trong .C vì chúng tôi chưa sẵn sàng chạy .C đã biên dịch .O tệp tại thời điểm này. Chúng ta cần làm việc với các thanh ghi phụ thuộc vào kiến ​​trúc và khởi động hạt nhân.

9

* .S tệp là tệp lắp ráp. Tại sao. & tại sao không phải tệp .c? Do công cụ phụ thuộc máy/khởi tạo sớm như thiết lập bộ nhớ cache & bộ nhớ chỉ có thể thực hiện lệnh hướng dẫn lắp ráp như hướng dẫn I/O. Hạt nhân không có thư viện libc sang trọng để quản lý ban đầu các tài nguyên khác nhau. Và tài nguyên phần cứng tại bất kỳ thời điểm nào ngay cả trong khi thực thi ứng dụng thực hiện các cuộc gọi hệ thống gọi là các thủ tục i/o được mã hóa bằng ngôn ngữ assembly.

+0

Kiểm tra liên kết này ... Chuỗi ARM BOOT của nó ... – user1457958

+0

http://www.linux-arm.org/LinuxBootLoader/MONItor! – user1457958

4

.S tệp là các tệp ngôn ngữ lắp ráp.Chúng là một dạng mã máy. Nó ở mức độ thấp của lập trình. Tất cả mã phụ thuộc máy được viết bằng ngôn ngữ lắp ráp. Ngôn ngữ lắp ráp là khác nhau cho các bộ vi xử lý khác nhau.