如何在屏幕上打印计数器 masm32 的值

How do I print on screen the value of a counter masm32

我正在尝试打印在我创建的 while 循环内递增的计数器的值,这只是我正在为项目开发的更大函数的一部分,下面是我如何增加计数器变量的值并尝试打印它,因为我调用 printf 函数的方式我相信我需要将 char[] 变量与我想要打印的内容一起推送到堆栈上,我尝试推送计数器值直接打印(直接使用 "push edx" 而不是存储 char[] 变量的地址然后推送它)并且它只是吐出随机数可能是值的内存地址或其他东西,打印函数调用的方式当我打印 char[] 变量时设置正常工作,当我在 _asm 标记之前声明它们时我已经为其指定了内容(例如“ char text[4] = “%s\n” ”),非常感谢您的帮助,如果需要,我也可以 post 完成整个功能。

        _calcGravedad:
        mov edx, G        // G stored in edx
        inc edx           //increases edx
        mov G, edx        //returns edx to G

    //here I try to convert my int G variable (the counter) into a char[]
    //so i can print it, I'm not sure of this part, it doesnt work
        lea eax, G          //stores memory addres of G into eax
        push eax             //push eax into the stack
        call byte ptr _itoa_s //calls the conversion function from c
        pop edx               //transfers the result to edx
        mov gravedad, edx     //moves the result to a char[] variable

    //here's the print function call
        lea eax, gravedad    //get address of gravedad
        push eax           //push it into the stack
        lea eax, texto     //push the print format "%s\n" onto the stack
        push eax           //    
        call DWORD ptr printf   //calls the print function
        pop edx                  //cleans the stack
        pop edx                  //

我不确定为什么您需要 G 的地址而不是它的值,或者为什么您需要两个库调用。为什么不将您的计数器值直接传递给 printf 以及 %d 格式而不是 %s 格式?

我没有工作 masm 但这应该说明 (MSVC):

#include <stdio.h>

int main(void)
{
    int G = 42;
    char *fmt = "%d\n";
    __asm {
        mov eax,G       ;counter value
        push eax
        mov eax,fmt     ;format argument
        push eax
        call printf
        pop eax
        pop eax        
    }
    return 0;
}

控制台输出:

42

格式字符串可能需要不同的 mov 指令,例如 lea eax,fmtmov eax,offset fmt。另请注意,您不需要像您那样限定库函数调用。