首页
社区
课程
招聘
vc++6.0下生成的汇编代码,谁帮我解释一下
发表于: 2007-4-12 20:12 11382

vc++6.0下生成的汇编代码,谁帮我解释一下

2007-4-12 20:12
11382
TITLE    D:\资料\cyy\123.c
    .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 ??_C@_0BK@HKOA@please?5input?5two?5numbers?3?$AA@
CONST    SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST    ENDS
;    COMDAT ??_C@_04FBFD@?$CFd?$CFd?$AA@
CONST    SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST    ENDS
;    COMDAT ??_C@_03HMFC@?$CFd?6?$AA@
CONST    SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST    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    _main
PUBLIC    ??_C@_0BK@HKOA@please?5input?5two?5numbers?3?$AA@ ; `string'
PUBLIC    ??_C@_04FBFD@?$CFd?$CFd?$AA@            ; `string'
PUBLIC    ??_C@_03HMFC@?$CFd?6?$AA@            ; `string'
EXTRN    _printf:NEAR
EXTRN    _scanf:NEAR
EXTRN    __chkesp:NEAR
;    COMDAT ??_C@_0BK@HKOA@please?5input?5two?5numbers?3?$AA@
; File D:\资料\cyy\123.c
CONST    SEGMENT
??_C@_0BK@HKOA@please?5input?5two?5numbers?3?$AA@ DB 'please input two nu'
    DB    'mbers:', 00H                ; `string'
CONST    ENDS
;    COMDAT ??_C@_04FBFD@?$CFd?$CFd?$AA@
CONST    SEGMENT
??_C@_04FBFD@?$CFd?$CFd?$AA@ DB '%d%d', 00H        ; `string'
CONST    ENDS
;    COMDAT ??_C@_03HMFC@?$CFd?6?$AA@
CONST    SEGMENT
??_C@_03HMFC@?$CFd?6?$AA@ DB '%d', 0aH, 00H        ; `string'
CONST    ENDS
;    COMDAT _main
_TEXT    SEGMENT
_i$ = -4
_j$ = -8
_k$ = -12
_main    PROC NEAR                    ; COMDAT

; 3    : {

    push    ebp
    mov    ebp, esp
    sub    esp, 76                    ; 0000004cH
    push    ebx
    push    esi
    push    edi
    lea    edi, DWORD PTR [ebp-76]
    mov    ecx, 19                    ; 00000013H
    mov    eax, -858993460                ; ccccccccH
    rep stosd

; 4    :     int i,j,k;
; 5    :     printf("please input two numbers:");

    push    OFFSET FLAT:??_C@_0BK@HKOA@please?5input?5two?5numbers?3?$AA@ ; `string'
    call    _printf
    add    esp, 4

; 6    :     scanf("%d%d",&i,&j);

    lea    eax, DWORD PTR _j$[ebp]
    push    eax
    lea    ecx, DWORD PTR _i$[ebp]
    push    ecx
    push    OFFSET FLAT:??_C@_04FBFD@?$CFd?$CFd?$AA@ ; `string'
    call    _scanf
    add    esp, 12                    ; 0000000cH

; 7    :     k=i+j;

    mov    edx, DWORD PTR _i$[ebp]
    add    edx, DWORD PTR _j$[ebp]
    mov    DWORD PTR _k$[ebp], edx

; 8    :     printf("%d\n",k);

    mov    eax, DWORD PTR _k$[ebp]
    push    eax
    push    OFFSET FLAT:??_C@_03HMFC@?$CFd?6?$AA@    ; `string'
    call    _printf
    add    esp, 8

; 9    : }

    pop    edi
    pop    esi
    pop    ebx
    add    esp, 76                    ; 0000004cH
    cmp    ebp, esp
    call    __chkesp
    mov    esp, ebp
    pop    ebp
    ret    0
_main    ENDP
_TEXT    ENDS
END

最上面和乱码一样的东西是什么意思啊?请各位朋友帮我解释一下,在这先谢过了。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
2
汗,好好的masm32不用,用VC来写汇编代码..楼主您太有才了
2007-4-13 14:13
0
雪    币: 308
活跃值: (362)
能力值: ( LV12,RANK:370 )
在线值:
发帖
回帖
粉丝
3
你拿VC+源码对照一下就知道是什么了
2007-4-15 23:38
0
雪    币: 220
活跃值: (35)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
楼主帖的内容就是VC生成啊,对应的汇编的地方有C代码啊
2007-4-16 00:58
0
雪    币: 217
活跃值: (99)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
VC生成汇编代码虽然看起来很乱,但其实每一行都有其作用.
如果要都将清楚,估计可以写本书了.
2007-4-16 08:33
0
雪    币: 238
活跃值: (326)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
6
楼主应该是看了几天前论坛上某位谈学习汇编的心得所介绍的方法,对于方法来言,本身无所谓好坏,合你用就行,如果楼主看不懂这个C和汇编混写的东西,那么这个方法也许对你不实用,不用也罢。
2007-4-16 10:01
0
雪    币: 216
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
楼主我昨天也跟踪过VC编译的代码,不过不是用VC成生成汇编,不知对你是否有帮助?

http://bbs.pediy.com/showthread.php?t=42800
2007-4-16 19:27
0
雪    币: 8342
活跃值: (4033)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
随便解释下吧,仅供参考,有解释错误之地请多多原谅!

TITLE    D:\资料\cyy\123.c
    .386P //指令集
include listing.inc //包含一些宏
if @Version gt 510 //如果编译器版本大于 510
.model FLAT
else
//下面是段信息,用于链接时段的排序,合并,对齐方式,等等
_TEXT    SEGMENT PARA USE32 PUBLIC 'CODE' // 代码段 合并到->CODE
_TEXT    ENDS
_DATA    SEGMENT DWORD USE32 PUBLIC 'DATA' // 数据段 合并到->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 数据段
_TLS    ENDS
;    COMDAT ??_C@_0BK@HKOA@please?5input?5two?5numbers?3?$AA@
CONST    SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST    ENDS
;    COMDAT ??_C@_04FBFD@?$CFd?$CFd?$AA@
CONST    SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST    ENDS
;    COMDAT ??_C@_03HMFC@?$CFd?6?$AA@
CONST    SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST    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    _main
PUBLIC    ??_C@_0BK@HKOA@please?5input?5two?5numbers?3?$AA@ ; `string'
PUBLIC    ??_C@_04FBFD@?$CFd?$CFd?$AA@            ; `string'
PUBLIC    ??_C@_03HMFC@?$CFd?6?$AA@            ; `string'
// 申明外部数据/函数
EXTRN    _printf:NEAR
EXTRN    _scanf:NEAR
EXTRN    __chkesp:NEAR
// 下面的用于调试信息
;    COMDAT ??_C@_0BK@HKOA@please?5input?5two?5numbers?3?$AA@
; File D:\资料\cyy\123.c
CONST    SEGMENT
??_C@_0BK@HKOA@please?5input?5two?5numbers?3?$AA@ DB 'please input two nu'
    DB    'mbers:', 00H                ; `string' //字符串常量/因为在 CONST段中,不可写
CONST    ENDS
;    COMDAT ??_C@_04FBFD@?$CFd?$CFd?$AA@
CONST    SEGMENT
??_C@_04FBFD@?$CFd?$CFd?$AA@ DB '%d%d', 00H        ; `string'
CONST    ENDS
;    COMDAT ??_C@_03HMFC@?$CFd?6?$AA@
CONST    SEGMENT
??_C@_03HMFC@?$CFd?6?$AA@ DB '%d', 0aH, 00H        ; `string'
CONST    ENDS
;    COMDAT _main
// 代码段
_TEXT    SEGMENT
_i$ = -4 // 局部变量 i
_j$ = -8 // 局部变量 j
_k$ = -12 // 局部变量 k
// main 函数体 ,中间就不多说了
_main    PROC NEAR                    ; COMDAT

; 3    : {

    push    ebp
    mov    ebp, esp
    sub    esp, 76                    ; 0000004cH
    push    ebx
    push    esi
    push    edi
    lea    edi, DWORD PTR [ebp-76]
    mov    ecx, 19                    ; 00000013H
    mov    eax, -858993460                ; ccccccccH
    rep stosd

; 4    :     int i,j,k;
; 5    :     printf("please input two numbers:");

    push    OFFSET FLAT:??_C@_0BK@HKOA@please?5input?5two?5numbers?3?$AA@ ; `string'
    call    _printf
    add    esp, 4

; 6    :     scanf("%d%d",&i,&j);

    lea    eax, DWORD PTR _j$[ebp]
    push    eax
    lea    ecx, DWORD PTR _i$[ebp]
    push    ecx
    push    OFFSET FLAT:??_C@_04FBFD@?$CFd?$CFd?$AA@ ; `string'
    call    _scanf
    add    esp, 12                    ; 0000000cH

; 7    :     k=i+j;

    mov    edx, DWORD PTR _i$[ebp]
    add    edx, DWORD PTR _j$[ebp]
    mov    DWORD PTR _k$[ebp], edx

; 8    :     printf("%d\n",k);

    mov    eax, DWORD PTR _k$[ebp]
    push    eax
    push    OFFSET FLAT:??_C@_03HMFC@?$CFd?6?$AA@    ; `string'
    call    _printf
    add    esp, 8

; 9    : }

    pop    edi
    pop    esi
    pop    ebx
    add    esp, 76                    ; 0000004cH
    cmp    ebp, esp
    call    __chkesp
    mov    esp, ebp
    pop    ebp
    ret    0
_main    ENDP
_TEXT    ENDS
END

2007-4-17 10:24
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
强人!呵呵~~
2007-4-17 10:30
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
谢谢8楼的详细注释,真的太感谢你了。
我在此也一并感谢楼上提出建议的朋友了。
2007-4-17 19:57
0
游客
登录 | 注册 方可回帖
返回
//