所以,首先,这是一个我正在帮助的朋友的任务,虽然我已经有一段时间没有做 C 语言了,但这不是问题(或者至少我不认为是问题),问题是汇编代码。赋值必须使用内联汇编编写的函数,将用户输入后传递给函数的两个数字相加,并返回值,然后将其输出。在运行我的代码时,我在读取或写入 asm 函数中找到的内存位置时遇到错误,特别是第二个 mov 命令,并且在尝试执行该行代码时程序将挂起。跟踪程序,其中一个值将被正确存储(无论用户输入的第二个值是什么,我认为这是正常的,因为在汇编中反向读取值?)另一个不是 根本没有阅读,程序崩溃了。我花了大约四个小时试图解决这个问题,现在正在求助于外部帮助。无论如何,足够的背景,试图彻底,这里是代码。我确信我正在做的可能是一些基本的事情,并且正盯着我的脸,但任何帮助都是值得赞赏的。哦,是的,我确保在视觉工作室中启用了 masm。
#include "stdafx.h"
#include "stdio.h"
#include <conio.h>
int sum( int val1, int val2 );
int main (void)
{
int val1=0, val2=0, val3=0;
printf("Hello, this program will add two whole numbers. Please enter the first number.\n");
scanf("%d",&val1);
printf("Please enter the second number.\n");
scanf("%d",&val2);
val3 = sum(val1, val2);
printf("The sum of %d and %d is %d", val1, val2, val3);
_getch();
return 0;
}
int sum ( int val1, int val2 ){
int val3;
__asm{ mov eax, val2 ;
push eax ;
mov ebx, val1 ;
push ebx ;
add eax, ebx ;
mov ecx, val3 ;
pop val3 ;
pop ebx ;
pop eax ;
pop ecx ;
ret ;
}
return val3;
}