gpt4 book ai didi

GCC 内联程序集 'Nd' 约束

转载 作者:行者123 更新时间:2023-12-04 13:28:41 26 4
gpt4 key购买 nike

我正在用 C 开发一个小型玩具内核。我现在需要从键盘获取用户输入。到目前为止,我已经实现了 inb使用以下代码:

static inline uint8_t inb(uint16_t port) {
uint8_t ret;
asm volatile("inb %1, %0" : "=a"(ret) : "Nd"(port));
return ret;
}

我知道 "=a"约束意味着 al/ax/eax将复制到 ret作为输出,但我仍然对 "Nd" 感到困惑约束。任何人都可以提供一些有关为什么需要这种约束的见解吗?或者为什么我不能只使用像 "r" 这样的通用寄存器约束或 "b" ?任何帮助,将不胜感激。

最佳答案

in指令(返回一个字节)可以采用立即数 8 位值作为端口号,也可以采用 dx 中指定的端口。登记。更多关于 in说明可以在 instruction reference 中找到(英特尔语法)。正在使用的机器约束可以在 GCC docs 中找到。 .如果您向下滚动到 x86 family你会看到的:

d

The d register

N

Unsigned 8-bit integer constant (for in and out instructions). 

关于GCC 内联程序集 'Nd' 约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32791997/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com