c/c++语言开发共享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; } 

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

    in指令(返回一个字节)可以采用立即8位值作为端口号,也可以采用dx寄存器中指定的端口。 有关in指令的更多信息,请参见指令参考 (Intel语法)。 使用的机器约束可以在GCC文档中找到。 如果向下滚动到x86 family您将看到:

    d

     The d register 

    ñ

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

      以上就是c/c++开发分享GCC内联汇编’Nd’约束相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/541907.html

      (0)
      上一篇 2021年1月5日
      下一篇 2021年1月5日

      精彩推荐