问个简单的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]