在C中嵌入一段汇编,结果很奇怪!
源代码如下:
#include "stdio.h"
void main(0
{
int a,b,c;
a=3;
b=4;
__asm
{
mov eax,a
mov ebx,b
add eax,ebx
mov c,eax
}
printf("c is %d\n");
}
结果显示c是34603536。各位高手,为什么啊?
问题点数:20、回复次数:17Top
1 楼y0z0(荒山之夜)回复于 2005-09-21 00:40:14 得分 0
printf("c is %d\n",c);Top
2 楼excuseser(http://blog.csdn.net/excuseser/)回复于 2005-09-21 08:36:21 得分 0
恩恩…………也出过这样错误Top
3 楼icesnowjank(冰雪剑客)回复于 2005-09-22 02:17:58 得分 0
#include "conio.h"Top
4 楼zhujf2000(Gomir)回复于 2005-09-22 14:38:01 得分 0
我也想知道 ,帮你顶,
MOV eax,a ; 后 eax的值是多少,不会是3 吧Top
5 楼zhujf2000(Gomir)回复于 2005-09-22 14:41:14 得分 0
mov eax ,a 是把a 的地址放入到eax 中了?Top
6 楼Unknowm(um)回复于 2005-09-23 01:00:15 得分 0
可能是因为这段程序在DOS下运行,int是16位的导致的Top
7 楼zsb1107(F.O.X)回复于 2005-09-23 22:50:28 得分 0
那么应该如何修改啊?Top
8 楼kenyle(哎呀妈呀~这不就是传说中的B13吗~~)回复于 2005-09-24 01:04:15 得分 0
y0z0(荒山之夜)
正确,错在了你的printf语句了。Top
9 楼whwhf(蓝天白云)回复于 2005-09-24 13:16:46 得分 0
mov c,eax
这可能不对,它与
printf("c is %d\n");中的c一样吗?
Top
10 楼caozhy(cfx)回复于 2005-09-24 18:24:34 得分 0
printf("c is %d\n", c);Top
11 楼aspbasicer(我什么都想学~~)回复于 2005-09-25 02:57:26 得分 0
printf("c is %d\n", c);
Top
12 楼zsb1107(F.O.X)回复于 2005-09-25 22:49:44 得分 0
呵呵,那是我发贴时的小错误,编程时printf是正确的。
可是结果却是34603536
大家可以在自己的计算机上试试,想想为什么啊?
Top
13 楼y0z0(荒山之夜)回复于 2005-09-26 08:04:24 得分 0
cl T1.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
T1.c
Microsoft (R) Incremental Linker Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
/out:T1.exe
T1.obj
T1
c is 7
//至少用32位MS C编译器编译后的结果是对的Top
14 楼Featured(我握着爱情的门票静静排队……)回复于 2005-09-26 12:35:39 得分 0
在VC中建立MFC程序测试,结果正确
int a,b,c;
a=3;
b=4;
__asm
{
mov eax,a
mov ebx,b
add eax,ebx
mov c,eax
}
CString tmp;
tmp.Format("%d",c);
MessageBox(tmp);
最后弹出 7Top
15 楼zsb1107(F.O.X)回复于 2005-09-26 23:44:36 得分 0
那为什么在VC的win32 console application中运行会有错误啊?Top
16 楼orangeguy()回复于 2005-09-27 07:49:56 得分 20
To zsb1107(F.O.X):
没有错误呀! 结果是7
把 printf("c is %d\n");改成 printf("c is %d\n", c);就可以了Top
17 楼zsb1107(F.O.X)回复于 2005-09-29 23:36:55 得分 0
晕啊,我在实验室的计算机上运行得到的是错误的,在宿舍的笔记本上得到的是7。Top




