2009-04-08 22 views
8

Tôi đang cố gắng để cổng một số mã lắp ráp được viết trong Visual Studio vào lắp ráp nội tuyến GNU trên Linux. Mã ban đầu sử dụng _emit mà MSDN mô tả như là một chỉ dẫn giả và giải thích là:Tương đương với _emit trên Linux là gì?

Lệnh giả định _emit tương tự như chỉ thị DB của MASM. Bạn sử dụng _emit để xác định một byte ngay lập tức tại vị trí hiện tại trong phân đoạn văn bản hiện tại. Tuy nhiên, _emit chỉ có thể xác định một byte tại một thời điểm và nó chỉ có thể xác định byte trong phân đoạn văn bản. Nó sử dụng cú pháp tương tự như lệnh INT.

Tôi có thể làm điều tương tự trên Linux như thế nào?

Trả lời

15

Để phát ra byte 0x12 (ví dụ), làm:

asm __volatile__ (".byte 0x12"); 

Mặc dù, bạn có thể nhận được kết quả đáng ngạc nhiên với tối ưu hóa kích hoạt.

+0

+1, điểm tốt về tối ưu hóa. –

+0

Cảm ơn! Điều này làm việc tốt. – samgrover

+0

Với '__volatile__' (hoặc đơn giản là' dễ bay hơi' trên các trình biên dịch hiện đại), bạn không nên gặp bất kỳ vấn đề nào ngay cả khi đã bật tối ưu hóa. Trình biên dịch phải phát ra byte tại vị trí được chỉ định (tất nhiên, mã xung quanh có thể được tối ưu hóa nặng nề ...). – BeeOnRope

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