124class_var
Source Code
// MyCC code example
// Gabriel Capella
class Test {
int x1;
int x2;
int x3;
int x4;
public void main() {
x1 = 49;
x2 = x1 + 1;
x3 = x2 + 1;
x4 = x3 + 1;
print(x4);
print(x3);
print(x2);
print(x1);
}
}







Results
Assembly
.globl main
main:
pushq %rbp # Save old EBP
movq %rsp, %rbp # Save old ESP
movq $32, %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, %rcx
##MoMo %1 <- %-1
movq %rbp, %rbx
##MovL %2 <- 16
movq $16, %rax
##MoOp %3 <- %1,%2
addq %rbx, %rax
##MToR %4 <- #3
movq (%rax), %rbx
##MovL %5 <- 24
movq $24, %rax
##MoOp %6 <- %4,%5
addq %rbx, %rax
##RToM #6 <- %0
movq %rcx, (%rax)
##MoMo %7 <- %-1
movq %rbp, %rbx
##MovL %8 <- 16
movq $16, %rax
##MoOp %9 <- %7,%8
addq %rbx, %rax
##MToR %10 <- #9
movq (%rax), %rbx
##MovL %11 <- 24
movq $24, %rax
##MoOp %12 <- %10,%11
addq %rbx, %rax
##MToR %13 <- #12
movq (%rax), %rbx
##MovL %14 <- 1
movq $1, %rax
##MoOp %15 <- %13,%14
movq %rbx, %rcx
addq %rax, %rcx
##MoMo %16 <- %-1
movq %rbp, %rbx
##MovL %17 <- 16
movq $16, %rax
##MoOp %18 <- %16,%17
addq %rbx, %rax
##MToR %19 <- #18
movq (%rax), %rbx
##MovL %20 <- 16
movq $16, %rax
##MoOp %21 <- %19,%20
addq %rbx, %rax
##RToM #21 <- %15
movq %rcx, (%rax)
##MoMo %22 <- %-1
movq %rbp, %rbx
##MovL %23 <- 16
movq $16, %rax
##MoOp %24 <- %22,%23
addq %rbx, %rax
##MToR %25 <- #24
movq (%rax), %rbx
##MovL %26 <- 16
movq $16, %rax
##MoOp %27 <- %25,%26
addq %rbx, %rax
##MToR %28 <- #27
movq (%rax), %rbx
##MovL %29 <- 1
movq $1, %rax
##MoOp %30 <- %28,%29
movq %rbx, %rcx
addq %rax, %rcx
##MoMo %31 <- %-1
movq %rbp, %rbx
##MovL %32 <- 16
movq $16, %rax
##MoOp %33 <- %31,%32
addq %rbx, %rax
##MToR %34 <- #33
movq (%rax), %rbx
##MovL %35 <- 8
movq $8, %rax
##MoOp %36 <- %34,%35
addq %rbx, %rax
##RToM #36 <- %30
movq %rcx, (%rax)
##MoMo %37 <- %-1
movq %rbp, %rbx
##MovL %38 <- 16
movq $16, %rax
##MoOp %39 <- %37,%38
addq %rbx, %rax
##MToR %40 <- #39
movq (%rax), %rbx
##MovL %41 <- 8
movq $8, %rax
##MoOp %42 <- %40,%41
addq %rbx, %rax
##MToR %43 <- #42
movq (%rax), %rbx
##MovL %44 <- 1
movq $1, %rax
##MoOp %45 <- %43,%44
movq %rbx, %rcx
addq %rax, %rcx
##MoMo %46 <- %-1
movq %rbp, %rbx
##MovL %47 <- 16
movq $16, %rax
##MoOp %48 <- %46,%47
addq %rbx, %rax
##MToR %49 <- #48
movq (%rax), %rbx
##MovL %50 <- 0
movq $0, %rax
##MoOp %51 <- %49,%50
addq %rbx, %rax
##RToM #51 <- %45
movq %rcx, (%rax)
##MoMo %52 <- %-1
movq %rbp, %rbx
##MovL %53 <- 16
movq $16, %rax
##MoOp %54 <- %52,%53
addq %rbx, %rax
##MToR %55 <- #54
movq (%rax), %rbx
##MovL %56 <- 0
movq $0, %rax
##MoOp %57 <- %55,%56
addq %rbx, %rax
##MToR %58 <- #57
movq (%rax), %rax
##Prin %58
pushq %rax ## prepare print call
pushq %rbx ## prepare print call
pushq %rcx ## prepare print call
movq %rax, %rdi ## print
callq putchar@PLT
popq %rcx
popq %rbx
popq %rax
##MoMo %59 <- %-1
movq %rbp, %rbx
##MovL %60 <- 16
movq $16, %rax
##MoOp %61 <- %59,%60
addq %rbx, %rax
##MToR %62 <- #61
movq (%rax), %rbx
##MovL %63 <- 8
movq $8, %rax
##MoOp %64 <- %62,%63
addq %rbx, %rax
##MToR %65 <- #64
movq (%rax), %rax
##Prin %65
pushq %rax ## prepare print call
pushq %rbx ## prepare print call
pushq %rcx ## prepare print call
movq %rax, %rdi ## print
callq putchar@PLT
popq %rcx
popq %rbx
popq %rax
##MoMo %66 <- %-1
movq %rbp, %rbx
##MovL %67 <- 16
movq $16, %rax
##MoOp %68 <- %66,%67
addq %rbx, %rax
##MToR %69 <- #68
movq (%rax), %rbx
##MovL %70 <- 16
movq $16, %rax
##MoOp %71 <- %69,%70
addq %rbx, %rax
##MToR %72 <- #71
movq (%rax), %rax
##Prin %72
pushq %rax ## prepare print call
pushq %rbx ## prepare print call
pushq %rcx ## prepare print call
movq %rax, %rdi ## print
callq putchar@PLT
popq %rcx
popq %rbx
popq %rax
##MoMo %73 <- %-1
movq %rbp, %rbx
##MovL %74 <- 16
movq $16, %rax
##MoOp %75 <- %73,%74
addq %rbx, %rax
##MToR %76 <- #75
movq (%rax), %rbx
##MovL %77 <- 24
movq $24, %rax
##MoOp %78 <- %76,%77
addq %rbx, %rax
##MToR %79 <- #78
movq (%rax), %rax
##Prin %79
pushq %rax ## prepare print call
pushq %rbx ## prepare print call
pushq %rcx ## prepare print call
movq %rax, %rdi ## print
callq putchar@PLT
popq %rcx
popq %rbx
popq %rax
movq %rbp, %rsp # Restore ESP
popq %rbp # Restore EBP
retq
fail_exit:
movl $1, %eax
popq %rbp
retq
Expected
4321
Got
4321