我在寫一個內聯彙編代碼來讀取實時時鐘。我正在加載寄存器編號(4)以讀取到'dl'並將其加載到端口0x70。我正在嘗試將這個寄存器值(4)讀入al。欲瞭解更多信息 - RTCGNU彙編語法
asm(
"mov $4, %%dl;"
"out 0x70, %%dl;"
"in %%al, 0x71;"
:
:
:"%al","%dl"
);
我正在上編譯包含該代碼的C文件下面的錯誤消息。
Assembler messages:
Error: operand size mismatch for 'out'
Error: operand size mismatch for `in'
彙編器版本:使用BFD版(GNU Binutils的Ubuntu的)GNU彙編版本2.26.1下(x86_64-Linux的GNU)2.26.1
是否有人可以指出的問題?
根據猜測,錯誤信息是由於在常量前沒有'$'。也就是說,如果你想讓你的asm輸出一個值,你需要有一個輸出參數(在第一個冒號後面)。如果在運行Ubuntu時可以使用'in'或'out',我會感到很驚訝。在閱讀RTC之前,你不應該「cli」嗎?如果你正在構建16位代碼,我不確定使用64位編譯器是否可行。如果你想在啓動時讀取RTC,那麼[this](https://stackoverflow.com/q/46074535/2189500)。 –
AT&T語法通常在右側有目的地。我希望對於IN和OUT指令也是如此。 IN 0x71,%% al'? –
@DavidWohlferd在給予自己使用'iopl()'或'ioperm()'系統調用的權利後,你可以使用'in'和'out'。 – fuz