当前位置: 代码迷 >> 汇编语言 >> 汇编与C混合编程的有关问题.如何都找不出错,新手求帮助
  详细解决方案

汇编与C混合编程的有关问题.如何都找不出错,新手求帮助

热度:8867   发布时间:2013-02-26 00:00:00.0
汇编与C混合编程的问题...怎么都找不出错,新手求帮助啊
题目要求是在C中输入两个数,调用汇编子程序进行相乘并把结果返回到主程序。由于考虑汇编imul的结果是分别放在两个32位寄存器当中所以返回值的处理有点麻烦,下边是我的程序,求大侠们帮助下找下错在哪,很急,很感谢,真心感谢










在线等,诚心求教,感谢各位!
------最佳解决方案--------------------------------------------------------
esp已经变成了0,进行push操作的时候访问违例。
并且还有其他的问题,我简单的改了一下,改的不好,你试试吧。


#include <stdio.h>

__int64 product(long a, long b);

int main()
{
    long a, b;
    __int64 p;
    printf("please input a number:");
    scanf("%ld", &a);

    printf("please input an other:");
    scanf("%ld", &b);

    p = product(a, b);
    
    printf("The result: %ld * %ld = %I64d\r\n", a, b, p);

    return 0;
}

__int64 product(long a, long b)
{
    __int64 *temp;
    __int64 nNum;
    __asm
    {
        pushad
        mov eax, a
        mov ebx, b
        imul ebx
        mov [temp - 4], edx
        mov [temp - 8], eax
        popad
    }

    return nNum;
}


定义__int64是为了防止发生溢出的。
------其他解决方案--------------------------------------------------------
我初步看了一下,你的main函数里面的那个最后一个printf语句,p的输出有问题,不应该是 &
后面的栈指针esp 在开始的时候执行这一条指令,所以后面就不能正常显示结果,屏蔽掉这一句就行了我修改了源码:
#include <stdio.h>
#include <stdlib.h>

long product(long a,long b);
int main()
{
long a,b,*p = NULL;
printf("Please input a number:\n");

scanf("%ld",&a);

printf("Please input another number\n");
scanf("%ld",&b);


product(a,b);
    
}

long product(long a,long b)
{
long temp;


__asm{
xor edx,edx
//     mov esp,edx
mov eax,a
mov ebx,b
imul ebx
     push eax
push ebx
mov temp,ebx
    pop edx
pop eax
    }
printf("+_+_+_+\n");
printf("the result: %ld x %ld = %ld\n",a,b,temp);
return temp;
}

------其他解决方案--------------------------------------------------------
经过测试,1楼正解。
------其他解决方案--------------------------------------------------------
[quote=引用:]
esp已经变成了0,进行push操作的时候访问违例。
并且还有其他的问题,我简单的改了一下,改的不好,你试试吧。

懂了,谢谢!
  相关解决方案