CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  其他开发语言 >  汇编语言

在C中嵌入一段汇编,结果很奇怪!

楼主zsb1107(F.O.X)2005-09-20 23:23:50 在 其他开发语言 / 汇编语言 提问

源代码如下:  
   
  #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

相关问题

  • 怎么在C BUILDER 里嵌入汇编?
  • 如何在C#中嵌入汇编?
  • 请问linux 下的C如何嵌入汇编代码?
  • 入门问题:如何在C++中嵌入汇编?
  • Sco Unix下如何在C语言中嵌入汇编语句?
  • C++中嵌入汇编时如何调用类成员变量?
  • 在C++BUILDER6中如何嵌入汇编语言?(请教)
  • Unix C支持嵌入汇编语言吗?
  • 如何在C++Buildr中嵌入汇编读写端口
  • 关于汇编嵌入C的一些问题?

关键词

  • eax
  • 结果
  • 错误
  • 运行
  • printf
  • 正确
  • mov
  • ebx
  • is%d
  • tmp

得分解答快速导航

  • 帖主:zsb1107
  • orangeguy

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo