august 发表于 2009-5-20 11:42:36

问个简单的C程序对应的汇编

就是这样一个简单的C程序,对应的汇编代码如此之长,看了半天没看懂。
怎么好像看不到有向数组分配1,2,3之类的代码呢?
麻烦大大们能帮我翻译下下面的汇编程序。


void main(void)
{
    int i;
   
    int a={1,2,3};
   
}

/*
;栈0bef:0060
0B76:01FA 55            PUSH    BP
0B76:01FB 8BEC          MOV   BP,SP   ;bp入栈 ,这里BP=7E
0B76:01FD 83EC06      SUB   SP,+06;栈预留3个字单元
0B76:0200 16            PUSH    SS      ;ss入栈ss=0bef   bp-3个字-ss
0B76:0201 8D46FA      LEA   AX, ;预留位第一位地址送入AX,ax=78
0B76:0204 50            PUSH    AX      ;bp-3个字-ss-第一个字的地址
0B76:0205 1E            PUSH    DS      ;bp-3个字-ss-第一个字的地址-ds
0B76:0206 B89401      MOV   AX,0194
0B76:0209 50            PUSH    AX      ;bp-3个字-ss-第一个字的地址-ds-0194
0B76:020A B90600      MOV   CX,0006
0B76:020D 9A6C05760B    CALL    0B76:056C
0B76:0212 8BE5          MOV   SP,BP
0B76:0214 5D            POP   BP
0B76:0215 C3            RET
                                                                               7E
0B76:056C 55            PUSH    BP   ;bp-3个字-ss-第一个字的地址-ds-0194-cs-ip-bp
0B76:056D 8BEC          MOV   BP,SP ;006a
0B76:056F 56            PUSH    SI
0B76:0570 57            PUSH    DI
0B76:0571 1E            PUSH    DS;bp-3个字-ss-第一个字的地址-ds-0194-cs-ip-bp-si-di-ds
0B76:0572 C57606      LDS   SI,;把DS段,里的值送入SI

0B76:0575 C47E0A      LES   DI, ;把段地址:偏移地址存到ES:DI. 该程序中把栈的段送入ES,的值送入DI
                                           ;第一个字的地址送入di
0B76:0578 FC            CLD
0B76:0579 D1E9          SHR   CX,1       ;ds:si指向的值送入es:di
0B76:057B F3            REPZ
0B76:057C A5            MOVSW         
0B76:057D 13C9          ADC   CX,CX
0B76:057F F3            REPZ
0B76:0580 A4            MOVSB
0B76:0581 1F            POP   DS
0B76:0582 5F            POP   DI
0B76:0583 5E            POP   SI
0B76:0584 5D            POP   BP
0B76:0585 CA0800      RETF    0008


                                              |ds |    |si    | |di   | |bp    |   |IP   | |CS|
0BEF:006000 00 00 00 66 0B 00 00-00 00 7E 00 12 02 76 0B
                     |AX   | |DS   | |AX   | |SS    ||这开始留3字单元|| bp |
0BEF:007094 01 66 0B 78 00 EF 0B-FD 01 76 0B 02 33 00 00
0BEF:0080FB 52 08 02 EA 02 00 00-4E 00 1B 00 00 00 40 00
0BEF:00903F 00 0B 00 00 00 02 00-02 00 01 00 01 00 01 00
0BEF:00A03C 09 00 00 00 00 00 00-01 00 00 00 00 00 00 00
0BEF:00B001 00 00 00 21 01 00 00-00 02 00 00 00 A5 01 00
0BEF:00C000 00 03 00 00 00 E2 01-00 00 00 04 00 00 00 F8
0BEF:00D001 00 00 00 05 00 1A 00-FA 01 00 00 18 06 00 00


0B66:0194                        72 28 03 3e-a0 01 72 22 b1 04 d3 ef

*/
页: [1]
查看完整版本: 问个简单的C程序对应的汇编