汇编 返回值 怎么不是edx:eax呢
//adds.asm.386;.modelflat,c;//说明汇编语言采用平展模式c语言规范publicadds;//过程名前不加下划线用extern进行说明.code...
// adds.asm
.386;
.model flat, c; // 说明汇编语言采用平展模式c语言规范
public adds; // 过程名前不加下划线用extern进行说明
.code;
adds proc; // 被c调用的汇编过程
push ebp;
mov ebp, esp; // 把esp值传给ebp
mov eax, [ebp + 8]; // 取出x送eax
mov ebx, [ebp + 12];// 取出y送ebx
add eax, ebx; // x + y结果送eax
pop ebp; // 恢复ebp
ret; // 返回主程序
adds endp;
End;
// test.cpp
#include <iostream>
using namespace std;
extern "C"{unsigned long adds( unsigned x, unsigned y );}
int main(){
unsigned x = 2, y = 429496729/*5*/;
cout << adds( x, y ) << endl;
}
按照输出结果,是1,可是 我定义的不是unsigned long吗??怎么返回值不是edx:eax呢?
要怎么才能扩展成edx:eax, 求解答!!! 展开
.386;
.model flat, c; // 说明汇编语言采用平展模式c语言规范
public adds; // 过程名前不加下划线用extern进行说明
.code;
adds proc; // 被c调用的汇编过程
push ebp;
mov ebp, esp; // 把esp值传给ebp
mov eax, [ebp + 8]; // 取出x送eax
mov ebx, [ebp + 12];// 取出y送ebx
add eax, ebx; // x + y结果送eax
pop ebp; // 恢复ebp
ret; // 返回主程序
adds endp;
End;
// test.cpp
#include <iostream>
using namespace std;
extern "C"{unsigned long adds( unsigned x, unsigned y );}
int main(){
unsigned x = 2, y = 429496729/*5*/;
cout << adds( x, y ) << endl;
}
按照输出结果,是1,可是 我定义的不是unsigned long吗??怎么返回值不是edx:eax呢?
要怎么才能扩展成edx:eax, 求解答!!! 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询