Source Code
// MyCC code example
// Gabriel Capella
class Factorial {
int f;
int h;
public void main() {
int x;
x = 49;
print(x);
x = x + 1;
print(x);
x = x + 1;
print(x);
}
}
Results
Assembly
.globl main
main:
pushq %rbp # Save old EBP
movq %rsp, %rbp # Save old ESP
movq $16, %rax
movq %rax, %rdi
callq malloc@PLT
testq %rax, %rax
jz fail_exit
pushq %rax
callq __LABEL0
popq %rax
movq %rbp, %rsp # Restore ESP
popq %rbp # Restore EBP
retq
__LABEL0:
pushq %rbp # Save old EBP
movq %rsp, %rbp # Save old ESP
addq $-8, %rsp
##MovL %0 <- 49
movq $49, %rax
##MoMo %1 <- %0
##MoMo %2 <- %1
movq %rax, %rbx
##Prin %2
pushq %rax ## prepare print call
pushq %rbx ## prepare print call
pushq %rbx ## print
movq $1,%rax ## sys_write
movq $1,%rdi ## fd stdout
movq %rsp,%rsi ## string pointer
movq $1,%rdx ## size
syscall ## syscall
popq %rsi ##
popq %rbx
popq %rax
##MoMo %3 <- %1
movq %rax, %rbx
##MovL %4 <- 1
movq $1, %rax
##MoOp %5 <- %3,%4
addq %rbx, %rax
##MoMo %1 <- %5
##MoMo %6 <- %1
movq %rax, %rbx
##Prin %6
pushq %rax ## prepare print call
pushq %rbx ## prepare print call
pushq %rbx ## print
movq $1,%rax ## sys_write
movq $1,%rdi ## fd stdout
movq %rsp,%rsi ## string pointer
movq $1,%rdx ## size
syscall ## syscall
popq %rsi ##
popq %rbx
popq %rax
##MoMo %7 <- %1
movq %rax, %rbx
##MovL %8 <- 1
movq $1, %rax
##MoOp %9 <- %7,%8
addq %rbx, %rax
##MoMo %1 <- %9
##MoMo %10 <- %1
##Prin %10
pushq %rax ## prepare print call
pushq %rbx ## prepare print call
pushq %rax ## print
movq $1,%rax ## sys_write
movq $1,%rdi ## fd stdout
movq %rsp,%rsi ## string pointer
movq $1,%rdx ## size
syscall ## syscall
popq %rsi ##
popq %rbx
popq %rax
movq %rbp, %rsp # Restore ESP
popq %rbp # Restore EBP
retq
fail_exit:
movl $1, %eax
popq %rbp
retq
Expected
123
Got
123