2012-06-13 25 views
5

Tôi đã chuyển một ứng dụng Linux sang nền tảng Windows.Chuyển đổi các cuộc gọi GNU thành VC++

Đây là mã linux,

__asm__ __volatile__ ("lock; cmpxchgl %1, %2" 
         : "=a" (prev) 
         : "q" (new_value), "m" (*ptr), "0" (old_value) 
        : "memory"); 

tôi đã cố gắng sử dụng _asm dễ bay hơi nhưng tôi nhận được một lỗi nói rằng "inline lỗi cú pháp lắp ráp trong 'opcode'; tìm thấy 'kiểu dữ liệu" trong Visual Studio 2012.

Tôi cần mã cửa sổ tương tự. Bất kỳ thông tin/đề nghị nào.

+0

Chắc chắn trình biên dịch của bạn có nội tại cho các hoạt động nguyên tử? Không cần phải viết trình biên dịch của riêng bạn ... –

Trả lời

1

Nói chung, tôi thích các mô-đun lắp ráp bên ngoài để lắp ráp nội tuyến - nó dễ di chuyển hơn (vâng, di động và lắp ráp được sử dụng trong cùng một câu). Những người lắp ráp như nasmyasm có sẵn cho nhiều nền tảng và có thể tạo nhiều định dạng tệp đối tượng.

Các mô-đun lắp ráp bên ngoài không tốt cho các bộ lót quan trọng thực sự như mã của bạn - hãy xem xét sử dụng trình biên dịch nội tại thay vì lắp ráp nội tuyến. Bạn có thể muốn xem Portable Compare And Swap.

0

Tôi nghĩ rằng vấn đề chính ở đây là Visual Studio sử dụng ngôn ngữ lắp ráp nội tuyến kiểu Intel, mà bạn không sử dụng.

Kiểm tra này ra: http://msdn.microsoft.com/en-us/library/4ks26t93%28v=vs.80%29.aspx

Về specifier không ổn định và sắp xếp lại, thậm chí sử dụng tối ưu hóa o2 Tôi vẫn chưa thấy VS 2010 hoặc 2012 khối sắp xếp lại __asm.

Chúc mừng, Andy

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