2010-03-10 32 views
5

Trong khi cố gắng để biên dịch dự án của tôi, có sử dụng một số tiêu đề của bên thứ ba, với mingw 4.4, tôi gặp phải lỗi sau:'__asm ​​__ (". Previous") là gì?' nghĩa là?

Assembler messages:
Error: junk at end of line, first unrecognized character is '"'
Error: unknown pseudo-op: '.previous'

tôi tìm thấy mã này vào cuối của một trong các tiêu đề bao gồm:

__asm__(".section \".plc\""); 
__asm__(".previous"); 

Vì tôi không có kinh nghiệm gì cả với hướng dẫn lắp ráp trực tuyến, tôi googled cho một lời giải thích cho nó, nhưng không thể tìm thấy câu trả lời cho hai câu hỏi cơ bản của tôi. __asm__(".previous"); làm gì và tại sao mọi người lại đặt điều này vào cuối tệp tiêu đề.

Đây là chỉ __asm__ hướng dẫn trong toàn bộ dự án. Tôi có thể xóa chúng một cách an toàn không? Hoặc là có một cách để xác định .previous để làm cho nó một pseudo-op được biết đến?

Hãy soi sáng cho tôi!

Trả lời

4

.previous là chỉ thị cho phép bạn trao đổi qua lại giữa hai phần elf. Nó là một phím tắt cho phép các tập tin lắp ráp đặc hơn và cho phép bạn ví dụ khai báo dữ liệu khởi tạo trong một dòng mã hoặc ngược lại.

Ví dụ: giả sử bạn có tệp trình kết hợp với dữ liệu và phần mã.

Nếu bạn muốn - ở giữa của một hàm - tuyên bố một hằng số trong phân đoạn dữ liệu bạn có thể sử dụng câu lệnh .previous như thế này:

nop   // some code 

.previous  // swaps current section (code) with previous section (data) 

MyConstant: 
    .word 0x0001 // some data 

.previous  // swaps curent section (data) with previous section (code) 

    nop   // more code 

Thông tin thêm có thể được tìm thấy trong cuốn hướng dẫn tham khảo:

http://sourceware.org/binutils/docs-2.19/as/Previous.html#Previous

+1

Vì không có bất kỳ hướng dẫn nào sau "__asm ​​__ (". Previous ");" trong mẫu mã của tôi, nó chỉ đơn giản khai báo một phần mới ".plc" và hoán đổi một số mã trống vào đó. Điều này có đúng không? Vì vậy, xóa nó sẽ không có bất kỳ tác động nào trên ứng dụng đã biên dịch. – NullAndVoid