我正在尝试打印一个计数器的值,该计数器在我制作的while循环中递增,这只是我正在为一个项目工作的更大函数的一部分,这里是我如何增加的值计数器变量并试图打印它,因为我调用printf函数的方式我相信我需要将char []变量与我想要打印到堆栈上的东西一起推送,我已经尝试将计数器值直接推送到打印(直接使用“push edx”而不是存储char []变量的地址,然后推送它)它只是吐出随机数,可能是值或内容的内存地址,打印函数调用的设置方式当我在_asm标记之前声明我已经指定了内容的char []变量时(例如“char text [4] =”%s \ n“”),我正常工作时,我真的很感激你帮助,如果需要,我也可以发布整个功能。
_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 //
答案 0 :(得分:0)
我不确定为什么你需要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,fmt
或mov eax,offset fmt
。另请注意,您不需要像以前那样限定库函数调用。