c++ - 内联汇编 - 使用 printf 以十进制显示寄存器?

标签 c++ assembly printf inline-assembly

我刚刚有一个非常快速的问题,我看到有人在另一个问题中提到了一些事情,但我不想在上面发帖。

我正在使用 C++ 进行内联汇编编码,需要以十进制显示寄存器值。我正在寻找执行此操作的方法,并看到有人提到“如果您正在使用内联 c,只需调用 printf”。但他们并没有对此做更多的解释。

是否可以调用 printf 来获取十进制格式的寄存器值,而无需编写代码的转换部分?如果是这样,那将如何运作?假设在对用户输入的整数进行一些计算后,该值现在位于 AX 寄存器中。我会简单地将 call printf 放在它后面的代码中吗?或者它是否打印堆栈中的值?或者甚至可以做类似的事情:

AX printf

我为我对此的无知表示歉意,我们的书不涉及内联汇编,如果可以的话,我想避免编写大量代码来进行转换。另外,我似乎真的无法找到有关 printf 究竟如何工作的答案。感谢您的帮助,我真的很感激!

最佳答案

完成此操作的最简单方法是使用内联汇编程序将寄存器复制到某个变量,然后打印该变量。

short registerValue;
__asm mov registerValue, ax;
printf("ax: %hd", registerValue);

确切的汇编程序调用将取决于您的编译器和语法;以上可能不适用于 cl 以外的编译器。

如果您想从汇编程序中实际调用 printf,您需要弄清楚它的调用约定以及该调用约定如何传递可变函数参数。

关于c++ - 内联汇编 - 使用 printf 以十进制显示寄存器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27138653/

相关文章:

java - 如何在Java中打印没有分号的Hello World?

c++ - 访问 vector 的内容

c++ - 在显示不同数据列的两个 View 之间共享一个模型

c++ - 使用汇编语言修改数组

汇编保留寄存器值?

java - 如何在 Java 中打印多个可变行

c++ - OpenGL VBO 法线/光照问题

c++ - 为矩阵类重载操作符 >> 时出现问题

linux - 为什么递增对较大数字的作用与对单个数字的作用不同?

c - 在 C 函数中延迟创建自动变量