Tôi đã giao dịch với Nasm trên môi trường Linux một thời gian và chức năng này hoạt động tốt ... nhưng giờ tôi đang chuyển sang môi trường cửa sổ và tôi muốn sử dụng Masm (với VS2008) dường như được điều này để làm việc ...Chuyển đổi vấn đề: __asm__ __volatile__
void outportb (unsigned short _port, unsigned short _data)
{
__asm__ __volatile__ ("outb %1, %0" : : "dN" (_port), "a" (_data));
}
Khi tôi viết một cái gì đó như thế này ...
void outportb (unsigned short _port, unsigned short _data)
{
asm volatile ("outb %1, %0" : : "dN" (_port), "a" (_data));
}
asm là không công nhận hơn và ném ổn định một lỗi nói rằng "chuỗi", tôi cũng đã cố gắng viết _asm dễ bay hơi nhưng tôi nhận được một lỗi nói "lỗi cú pháp lắp ráp nội tuyến trong 'opcode'; tìm thấy 'dữ liệu gõ ' '
Ngoài ra: bạn có thể sử dụng __asm {hướng dẫn tại đây} để có cú pháp rõ ràng hơn và có thể đáng nhắc đến, nội tuyến sẽ không làm việc trên x64, do đó, đối với kiến trúc này sẽ phải viết mã asm e trong mã độc lập. –
Ok bây giờ nó có ý nghĩa một chút, ít nhất là không nhận được lỗi .. vì vậy những gì là tương đương với inportb? Tôi biết bạn viết "in" thay vì "out" và có lẽ thay đổi rìu thành al phải không? Hay nó phức tạp hơn thế? – Fredrick
Hãy thử nó, nó không nên làm tổn thương. Hãy nhớ rằng VS sử dụng thứ tự {operation} {destination}, {source}, vì vậy để đọc cổng, nó sẽ là: __asm trong al, dx; và sau đó bạn cần lưu trữ kết quả trong biến của mình: __asm dữ liệu mov, al; và trả lại từ hàm: trả về dữ liệu; – Rom