12poo_basic
Source Code
// MyCC code example
// Gabriel Capella
class Test {
public void main() {
Save s;
s = new Save();
s.set(49);
print(s.get());
}
}
class Save {
int v;
public void set(int i) {
v = i;
}
public int get() {
return v;
}
}







Results
Assembly
.globl main
main:
pushq %rbp # Save old EBP
movq %rsp, %rbp # Save old ESP
movq $0, %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
__LABEL2:
pushq %rbp # Save old EBP
movq %rsp, %rbp # Save old ESP
addq $-8, %rsp
##MoMo %19 <- %-1
movq %rbp, %rbx
##MovL %20 <- 16
movq $16, %rax
##MoOp %21 <- %19,%20
addq %rbx, %rax
##MToR %22 <- #21
movq (%rax), %rbx
##MovL %23 <- 0
movq $0, %rax
##MoOp %24 <- %22,%23
addq %rbx, %rax
##MToR %25 <- #24
movq (%rax), %rax
##SRet
movq %rax, %rdi
movq %rbp, %rsp
popq %rbp
retq
movq %rbp, %rsp # Restore ESP
popq %rbp # Restore EBP
retq
__LABEL1:
pushq %rbp # Save old EBP
movq %rsp, %rbp # Save old ESP
addq $-8, %rsp
##MoMo %9 <- %-1
movq %rbp, %rbx
##MovL %10 <- 24
movq $24, %rax
##MoOp %11 <- %9,%10
addq %rbx, %rax
##MToR %12 <- #11
movq (%rax), %rcx
##MoMo %13 <- %-1
movq %rbp, %rbx
##MovL %14 <- 16
movq $16, %rax
##MoOp %15 <- %13,%14
addq %rbx, %rax
##MToR %16 <- #15
movq (%rax), %rbx
##MovL %17 <- 0
movq $0, %rax
##MoOp %18 <- %16,%17
addq %rbx, %rax
##RToM #18 <- %12
movq %rcx, (%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
##MoMa 0
pushq %rbx ## prepare malloc
pushq %rcx ## prepare malloc
movq $8, %rdi
callq malloc@PLT
testq %rax, %rax
jz fail_exit
movq %rax, %rax
popq %rcx
popq %rbx
##MoMo %1 <- %0
movq %rax, %rcx
##MoMo %2 <- %1
movq %rcx, %rax
##MoMo %3 <- %2
movq %rax, %rbx
##MovL %4 <- 49
movq $49, %rax
##MoMo %5 <- %4
##PuAl
pushq %rax ## prepare call
pushq %rbx ## prepare call
pushq %rcx ## prepare call
##Push %5
pushq %rax
##Push %3
pushq %rbx
##Call (#740882966)
call __LABEL1
##PopD
add $8, %rsp
##PopD
add $8, %rsp
##PoAl
popq %rcx
popq %rbx
popq %rax
##MoMo %6 <- %1
movq %rcx, %rax
##MoMo %7 <- %6
##PuAl
pushq %rax ## prepare call
pushq %rbx ## prepare call
pushq %rcx ## prepare call
##Push %7
pushq %rax
##Call (#0)
call __LABEL2
##PopD
add $8, %rsp
##PoAl
popq %rcx
popq %rbx
popq %rax
##GRet
movq %rdi, %rax
##Prin %8
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
1
Got
1