5
我一直在處理Nasm Linux環境一段時間,這個功能工作得很好......但現在我切換到Windows環境,我想用Masm(與VS2008)我不能似乎得到這個工作...轉換問題:__asm__ __volatile__
void outportb (unsigned short _port, unsigned short _data)
{
__asm__ __volatile__ ("outb %1, %0" : : "dN" (_port), "a" (_data));
}
當我寫這樣的事情...
void outportb (unsigned short _port, unsigned short _data)
{
asm volatile ("outb %1, %0" : : "dN" (_port), "a" (_data));
}
ASM是沒有更多的認可和揮發性拋出一個錯誤說「串」,我也嘗試過寫_asm易失性,但我得到一個錯誤說:「內聯彙編語法錯誤'操作碼';發現'數據類型'‘
此外,您也可以使用__asm {這裏說明}更清晰的語法,這可能是值得一提的,是內聯彙編不會在x64上工作,所以這個架構將不得不寫入asm cod e獨立代碼。 – 2009-09-06 12:31:43
好吧,現在它有意義了一點,最少得到沒有錯誤..所以相當於inportb?我知道你寫的是「in」而不是「out」,可能會把ax改爲al?還是比這更復雜? – Fredrick 2009-09-06 12:42:51
試試吧,它不應該受到傷害。請記住,VS使用{operation} {destination},{source}命令,因此讀取端口將是: __asm in al,dx; 然後您需要將結果存儲在您的變量中: __asm mov data,al; 並從函數中返回: 返回數據; – Rom 2009-09-06 12:53:32