Просто, чтобы привести пример из реальной жизни, рассмотрим следующую программу:
int main()
{
int i = 0;
i += 1;
i++;
i = i + 1;
return 0;
}
Компиляция с помощью GCC в Darwin 11 со следующими флагами:
-S
останов в ассемблере
-m32
для 32-битной платформы, просто для упрощения
Будет сгенерирована следующая программа, за исключением комментариев и пустых строк, которые я добавил. Посмотрите специально в комментариях.
.section __TEXT,__text,regular,pure_instructions
.globl _main
.align 4, 0x90
_main:
pushl %ebp # cdecl function stuff
movl %esp, %ebp #
subl $12, %esp # get room for variables
movl $0, -12(%ebp) # i = 0;
; i += 1
movl -12(%ebp), %eax # load i in register a
addl $1, %eax # add 1 to register a
movl %eax, -12(%ebp) # store it back in memory
; i++
movl -12(%ebp), %eax #
addl $1, %eax # just the same
movl %eax, -12(%ebp) #
; i = i + 1
movl -12(%ebp), %eax #
addl $1, %eax # just the same
movl %eax, -12(%ebp) #
movl $0, -8(%ebp)
movl -8(%ebp), %eax
movl %eax, -4(%ebp)
movl -4(%ebp), %eax
addl $12, %esp
popl %ebp
ret
.subsections_via_symbols