我正在考虑制作一个在裸 CPU (x86)、32 位保护模式和无操作系统上运行的硬件调试工具。由于时间限制,我不会全部在 x86 汇编中编写该工具。我喜欢 Ada 语言(但对它缺乏经验)并且认为在这个项目中使用 Ada 而不是 C 可能会很有趣。
使用 C 语言,可以使用内联汇编或调用用汇编编写的子程序来访问 BIOS 以进行键盘 I/O 或在屏幕上显示文本等基本操作。艾达有类似的能力吗?如果是这样,是否有人知道任何用于调用汇编方法并与它们链接的资源或教程?
您可以在 Ada 中使用内联汇编代码。您需要使用System.Machine_Code
提供(重载)Asm
功能的包。
GNAT 参考手册中有一个关于机器代码插入的部分,虽然它是 GNAT 特定的,但即使您使用不同的编译器,也应该能够大致了解它的工作原理。
Adacore 有一个部分包含我认为有用的示例。
https://docs.adacore.com/gnat_ugn-docs/html/gnat_ugn/gnat_ugn/inline_assembler.html
注意:示例是针对 32 位架构的,使用“-m32”,(或稍微更改示例)