首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

c++到汇编再到VC++中执行,该如何解决

2012-03-01 
c++到汇编再到VC++中执行vc++下如下简单代码:#includestdio.h voidmain(){printf( hello,world\n )}

c++到汇编再到VC++中执行
vc++下如下简单代码:
#include   "stdio.h "
void   main()
{
printf( "hello,world\n ");
}

生成的汇编代码如下:
TITLED:\PVC\汇编\huibian.cpp
.386P
include   listing.inc
if   @Version   gt   510
.model   FLAT
else
_TEXTSEGMENT   PARA   USE32   PUBLIC   'CODE '
_TEXTENDS
_DATASEGMENT   DWORD   USE32   PUBLIC   'DATA '
_DATAENDS
CONSTSEGMENT   DWORD   USE32   PUBLIC   'CONST '
CONSTENDS
_BSSSEGMENT   DWORD   USE32   PUBLIC   'BSS '
_BSSENDS
_TLSSEGMENT   DWORD   USE32   PUBLIC   'TLS '
_TLSENDS
;COMDAT   ??_C@_0N@OAGM@hello?0world?6?$AA@
_DATASEGMENT   DWORD   USE32   PUBLIC   'DATA '
_DATAENDS
;COMDAT   _main
_TEXTSEGMENT   PARA   USE32   PUBLIC   'CODE '
_TEXTENDS
FLATGROUP   _DATA,   CONST,   _BSS
ASSUMECS:   FLAT,   DS:   FLAT,   SS:   FLAT
endif
PUBLIC_main
PUBLIC??_C@_0N@OAGM@hello?0world?6?$AA@;   `string '
EXTRN_printf:NEAR
;COMDAT   ??_C@_0N@OAGM@hello?0world?6?$AA@
;   File   D:\PVC\汇编\huibian.cpp
_DATASEGMENT
??_C@_0N@OAGM@hello?0world?6?$AA@   DB   'hello,world ',   0aH,   00H   ;   `string '
_DATAENDS
;COMDAT   _main
_TEXTSEGMENT
_mainPROC   NEAR;   COMDAT
;   File   D:\PVC\汇编\huibian.cpp
;   Line   4
pushOFFSET   FLAT:??_C@_0N@OAGM@hello?0world?6?$AA@   ;   `string '
call_printf
popecx
;   Line   5
ret0
_mainENDP
_TEXTENDS
END

请问各位大侠,怎样使得上面的汇编代码能够重新在VC中运行??
谢谢!!!

[解决办法]
下面是我从VC6.0中弄到的源代码和汇编代码:

C语言源代码:

#include "stdafx.h "

int main(int argc, char* argv[])
{
printf( "Hello World!\n ");
return 0;
}

汇编窗口中输入的汇编代码:

--- C:\MyProjects\hello\hello.cpp ------------------------------------------------
1: // hello.cpp : Defines the entry point for the console application.
2: //
3:
4: #include "stdafx.h "
5:
6: int main(int argc, char* argv[])
7: {
00401010 push ebp
00401011 mov ebp,esp
00401013 sub esp,40h
00401016 push ebx
00401017 push esi
00401018 push edi
00401019 lea edi,[ebp-40h]
0040101C mov ecx,10h
00401021 mov eax,0CCCCCCCCh
00401026 rep stos dword ptr [edi]
8: printf( "Hello World!\n ");
00401028 push offset string "Hello World!\n " (0042201c)
0040102D call printf (00401060)
00401032 add esp,4
9: return 0;
00401035 xor eax,eax
10: }
00401037 pop edi
00401038 pop esi
00401039 pop ebx
0040103A add esp,40h
0040103D cmp ebp,esp
0040103F call __chkesp (004010e0)
00401044 mov esp,ebp
00401046 pop ebp
00401047 ret

怎么跟你弄到的差距这么大呢,你用的哪个编译器?
你弄到的汇编代码到处是标号,没有几句像样的汇编指令。好像还不是底层的汇编代码。
真正的汇编指令也只有下面的几条而已。
push OFFSET FLAT:??_C@_0N@OAGM@hello?0world?6?$AA@ ; `string '
call _printf
pop ecx
ret 0


好像也不用解释什么,功能显而易见!

[解决办法]
http://blog.csdn.net/fallblood/archive/2006/12/13/1441917.aspx

热点排行