【发布时间】:2020-12-06 07:34:14
【问题描述】:
所以,我有一项任务需要从字符串(例如字符串“542215”)转换为 int 542215 或任何其他 ASCII 符号。我对汇编编程有点陌生,所以我几乎不知道我在用它做什么,但我写了我的实验代码。
int main(int argc, char** argv)
{
int Letters;
char* argv1 = argv[1];
if (argc < 2) {
printf("Nepateiktas parametras*/\n");
return(0);
}
__asm {
push eax
push ebx
push ecx
xor ecx, ecx
mov eax, argv1
NextChar:
movzx eax, byte ptr [esi + ecx]
test eax, eax
jz Done
push ecx
sub eax, 48
push eax
call PrintIt
pop ecx
inc ecx
jmp NextChar
Done:
pop ecx
pop ebx
pop eax
PrintIt:
mov[Letters], eax
pop ecx
pop ebx
pop eax
};
printf("Count of letters in string %s is %d\n", argv[1], Letters);
return(0);
}
并且我收到错误消息“运行时检查失败 #0 - ESP 的值未在函数调用中正确保存。这通常是调用使用一种调用约定声明的函数并声明了函数指针的结果使用不同的调用约定。
这个错误基本上给了我 0 个想法,或者甚至 ESP 是什么,所以我的代码将不胜感激。
【问题讨论】:
标签: c++ assembly visual-c++ x86 inline-assembly