|
发表于 2012-2-28 10:34:00
|
显示全部楼层
本帖最后由 莫名其妙 于 2012-2-28 10:38 编辑
这个 我看起来费劲 发上来你自己看看吧
#include <stdio.h>
void main()
{
int i=8;
printf("%d\n%d\n%d\n%d\n%d\n%d\n%d\n",i,++i,--i,++i,i--,-i++,-i--);
}
下面是关键部分汇编代码(全部的我就不发了太长了!~)
CONST SEGMENT
??_C@_0BG@KAOE@?$CFd?6?$CFd?6?$CFd?6?$CFd?6?$CFd?6?$CFd?6?$CFd?6?$AA@ DB '%'
DB 'd', 0aH, '%d', 0aH, '%d', 0aH, '%d', 0aH, '%d', 0aH, '%d', 0aH
DB '%d', 0aH, 00H ; `string'
CONST ENDS
; COMDAT _main
_TEXT SEGMENT
_i$ = -4
_main PROC NEAR ; COMDAT
; File D:\Media\1246\1.c
; Line 3
push ebp
mov ebp, esp
sub esp, 80 ; 00000050H
push ebx
push esi
push edi
lea edi, DWORD PTR [ebp-80]
mov ecx, 20 ; 00000014H
mov eax, -858993460 ; ccccccccH
rep stosd
; Line 4
mov DWORD PTR _i$[ebp], 8
; Line 5
mov eax, DWORD PTR _i$[ebp]
neg eax ;NEG是汇编指令中的求补指令,NEG指令对操作数执行求补运算:用零减去操作数,然后结果返回操作数。求补运算也可以表达成:将操作数按位取反后加1; ;
;; 格式:NEG OPR 执行的操作:(OPR)<-- —(OPR)[1] 亦即把操作数按位求反后末位加1,因而执行的操作也可表示为: (OPR)<-- 0FFFFH — (OPR) + 1 ;
;; NEG指令对标志的影响与用零作减法的SUB指令一样。 ;
mov DWORD PTR -8+[ebp], eax
mov ecx, DWORD PTR -8+[ebp]
push ecx
mov edx, DWORD PTR _i$[ebp]
neg edx
mov DWORD PTR -12+[ebp], edx
mov eax, DWORD PTR -12+[ebp]
push eax
mov ecx, DWORD PTR _i$[ebp]
mov DWORD PTR -16+[ebp], ecx
mov edx, DWORD PTR -16+[ebp]
push edx
mov eax, DWORD PTR _i$[ebp]
add eax, 1
mov DWORD PTR _i$[ebp], eax
mov ecx, DWORD PTR _i$[ebp]
push ecx
mov edx, DWORD PTR _i$[ebp]
sub edx, 1
mov DWORD PTR _i$[ebp], edx
mov eax, DWORD PTR _i$[ebp]
push eax
mov ecx, DWORD PTR _i$[ebp]
add ecx, 1
mov DWORD PTR _i$[ebp], ecx
mov edx, DWORD PTR _i$[ebp]
push edx
mov eax, DWORD PTR _i$[ebp]
push eax
push OFFSET FLAT:??_C@_0BG@KAOE@?$CFd?6?$CFd?6?$CFd?6?$CFd?6?$CFd?6?$CFd?6?$CFd?6?$AA@ ; `string'
mov ecx, DWORD PTR _i$[ebp]
sub ecx, 1
mov DWORD PTR _i$[ebp], ecx
mov edx, DWORD PTR _i$[ebp]
add edx, 1
mov DWORD PTR _i$[ebp], edx
mov eax, DWORD PTR _i$[ebp]
sub eax, 1
mov DWORD PTR _i$[ebp], eax
call _printf
add esp, 32 ; 00000020H
; Line 6
pop edi
pop esi
pop ebx
add esp, 80 ; 00000050H
cmp ebp, esp
call __chkesp
mov esp, ebp
pop ebp
ret 0
_main ENDP
_TEXT ENDS
END
|
|