相关疑难解决方法(0)

GCC内联汇编'Nd'约束

我正在用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"?任何帮助,将不胜感激.

x86 gcc kernel inline-assembly osdev

4
推荐指数
1
解决办法
500
查看次数

标签 统计

gcc ×1

inline-assembly ×1

kernel ×1

osdev ×1

x86 ×1