2012-01-30 37 views
8

Có cách nào để có GNU là chỉ mở rộng các chỉ thị .macro trong tệp .S, tạo tệp .S khác mà không có chúng? Tương tự như những gì gcc -E thực hiện với mã C.GNU dưới dạng mở rộng chỉ thị .macro

Lưu ý đây là về lệnh lắp ráp .macro như trong mã sau, không về các macro #define kiểu C có thể được mở rộng qua cpp.

.macro my_macro src, so, dest 
    movl \so+10(\src), %r8d 
+3

Không chính xác, nhưng hãy thử tùy chọn danh sách (ví dụ: -ms). –

+0

Tôi thấy rằng trong trang người đàn ông, nhưng nó không giúp được vấn đề. –

+0

Từ câu trả lời (đã xóa) của bạn, có vẻ như bạn đang cố gắng đạt được "biên dịch tập tin cú pháp GNU cho OSX"; lần cuối cùng tôi cần làm điều này, tôi đã sử dụng 'objdump' và một trình soạn thảo văn bản để xây dựng một tệp tin chứa đầy chỉ thị' .byte'. Khủng khiếp, nhưng nó hoạt động. Chủ yếu là. –

Trả lời

0

lẽ bạn có thể sử dụng 'cpp' để đánh giá các macro thay vì:

> cpp -P file.S

hoặc lắp ráp sau khi mở rộng vĩ mô:

> cpp -P file.S | as -o file.o

+2

Tính năng này không hoạt động, vì nó mong đợi các macro kiểu C (#define). Vấn đề của tôi là đánh giá các macro lắp ráp (.macro). –

2

GNU như là tiền xử lý doesn't handle.include.macro, như mọi thứ g bắt đầu với một dấu chấm trong thực tế là một chỉ thị lắp ráp; do đó, việc mở rộng macro được thực hiện cùng với việc lập trình chương trình, và không thể được thực hiện riêng biệt, ít nhất là bằng.

Bạn có các tùy chọn này:

  • Tìm kiếm google cho một ai đó khác kịch bản
  • Viết riêng của bạn (có vẻ như một bài tập lập trình tốt đẹp)
  • Chuyển đến macro C-style hay M4

Chế độ macro kiểu C được thực hiện theo mặc định khi bạn sử dụng phần mở rộng .S (phần vốn) cho các tệp lắp ráp mà bạn sử dụng để nạp khí và bộ tiền xử lý C cũng có thể được gọi độc lập với lệnh cpp

+1

Đó là cách làm rõ vấn đề (+1), nhưng tôi không thể chấp nhận "tìm/viết của riêng bạn" làm giải pháp. –

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