| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1553 人关注过本帖
标题:哪位大虾能讲解一下一个简单c++源程序的对应汇编代码语句
只看楼主 加入收藏
tomispig
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-8-6
收藏
 问题点数:0 回复次数:4 
哪位大虾能讲解一下一个简单c++源程序的对应汇编代码语句
大家好,哪位高手能详细讲解一下下面的c++代码所对应的汇编代码,最好能每一句都讲解,小弟新手还望指教,不胜感激!

/*main.cpp文件如下所示*/
int b[10];

main()
{
    int c[10]={0,2,3};
    //short b;
    //short c;
    //cout<<&b<<" "<<&c<<endl;
    //cout<<sizeof(mystruct)<<endl;
}


/*对应的main.asm文件如下所示*/
    TITLE    E:\Program Files\Microsoft Visual Studio\MyProjects\myasm\main.cpp
    .386P
include listing.inc
if @Version gt 510
.model FLAT
else
_TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT    ENDS
_DATA    SEGMENT DWORD USE32 PUBLIC 'DATA'
_DATA    ENDS
CONST    SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST    ENDS
_BSS    SEGMENT DWORD USE32 PUBLIC 'BSS'
_BSS    ENDS
$$SYMBOLS    SEGMENT BYTE USE32 'DEBSYM'
$$SYMBOLS    ENDS
$$TYPES    SEGMENT BYTE USE32 'DEBTYP'
$$TYPES    ENDS
_TLS    SEGMENT DWORD USE32 PUBLIC 'TLS'
_TLS    ENDS
;    COMDAT _main
_TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT    ENDS
FLAT    GROUP _DATA, CONST, _BSS
    ASSUME    CS: FLAT, DS: FLAT, SS: FLAT
endif
PUBLIC    ?b@@3PAHA                    ; b
_BSS    SEGMENT
?b@@3PAHA DD    0aH DUP (?)                ; b
_BSS    ENDS
PUBLIC    _main
;    COMDAT _main
_TEXT    SEGMENT
_c$ = -40
_main    PROC NEAR                    ; COMDAT

; 4    : {

    push    ebp
    mov    ebp, esp
    sub    esp, 104                ; 00000068H
    push    ebx
    push    esi
    push    edi
    lea    edi, DWORD PTR [ebp-104]
    mov    ecx, 26                    ; 0000001aH
    mov    eax, -858993460                ; ccccccccH
    rep stosd

; 5    :     int c[10]={0,2,3};

    mov    DWORD PTR _c$[ebp], 0
    mov    DWORD PTR _c$[ebp+4], 2
    mov    DWORD PTR _c$[ebp+8], 3
    mov    ecx, 7
    xor    eax, eax
    lea    edi, DWORD PTR _c$[ebp+12]
    rep stosd

; 6    :     //short b;
; 7    :     //short c;
; 8    :     //cout<<&b<<" "<<&c<<endl;
; 9    :     //cout<<sizeof(mystruct)<<endl;
; 10   : }

    pop    edi
    pop    esi
    pop    ebx
    mov    esp, ebp
    pop    ebp
    ret    0
_main    ENDP
_TEXT    ENDS
END
搜索更多相关主题的帖子: 语句 汇编 代码 
2008-10-04 17:08
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
收藏
得分:0 
C++俺没碰过,实在是~~
里面的int 表示几个字节?还有short 是多少字节的什么类型?
2008-10-04 18:05
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
收藏
得分:0 
;==========================================
    push    ebp                    ;入栈,保存ebp
    mov    ebp, esp                ;当前栈顶给ebp
    sub    esp, 104                ;预留出104B的空间,不知作何用?
    push    ebx                    ;这三条是保存寄存器的原值
    push    esi
    push    edi
    lea    edi, DWORD PTR [ebp-104]   ;将预留空间的首地址给edi
    mov    ecx, 26                    ;将有26次的循环
    mov    eax, -858993460            ;将4给eax
    rep stosd                         ;循环26次,将eax的值重复赋给预留空间,等于都初始化为4

; 5    :     int c[10]={0,2,3};

    mov    DWORD PTR _c$[ebp], 0      ;这里的_c$不懂,修改栈中原ebp的值?为什么?
    mov    DWORD PTR _c$[ebp+4], 2    ;?
    mov    DWORD PTR _c$[ebp+8], 3    ;?
    mov    ecx, 7
    xor    eax, eax
    lea    edi, DWORD PTR _c$[ebp+12]  ;看上述
    rep stosd

; 6    :     //short b;
; 7    :     //short c;
; 8    :     //cout<<&b<<" "<<&c<<endl;
; 9    :     //cout<<sizeof(mystruct)<<endl;
; 10   : }

    pop    edi                   ;寄存器出栈,返回
    pop    esi
    pop    ebx
    mov    esp, ebp
    pop    ebp
    ret    0
;
2008-10-04 18:19
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
[bo][un]ONEPROBLEM[/un] 在 2008-10-4 18:05 的发言:[/bo]

C++俺没碰过,实在是~~
里面的int 表示几个字节?还有short 是多少字节的什么类型?


这个不一定罢

windows里 int 就是四字节 short 应该是两个字节吧
2008-10-04 18:42
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
[bo][un]tomispig[/un] 在 2008-10-4 17:08 的发言:[/bo]

大家好,哪位高手能详细讲解一下下面的c++代码所对应的汇编代码,最好能每一句都讲解,小弟新手还望指教,不胜感激!

/*main.cpp文件如下所示*/
int b[10];

main()
{
    int c[10]={0,2,3};
    //short b;
    / ...



这些 "<<" 之类的都是重载的 呵呵

其实就是个函数

还是用c反写到汇编好…… 对应度高 呵呵
2008-10-04 18:44
快速回复:哪位大虾能讲解一下一个简单c++源程序的对应汇编代码语句
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019021 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved