我正在用C开发一个小玩具内核.我需要从键盘获取用户输入.到目前为止,我已inb使用以下代码实现:
static inline uint8_t inb(uint16_t port) {
uint8_t ret;
asm volatile("inb %1, %0" : "=a"(ret) : "Nd"(port));
return ret;
}
Run Code Online (Sandbox Code Playgroud)
我知道"=a"约束意味着al/ax/eax将被复制ret为输出,但我仍然对"Nd"约束感到困惑.谁能提供一些有关为什么需要这种约束的见解?或者为什么我不能只使用通用寄存器约束"r"或"b"?任何帮助,将不胜感激.