2poo_reference
Source Code
// MyCC code example
// Gabriel Capella
class Test {
public void main() {
Print p;
Print pp;
p = new Print();
pp = p;
pp.Integer(1729);
}
}
class Print {
int v;
public void Integer(int i) {
int tmp;
tmp = 0;
while (0 < i) {
tmp = tmp * 10 + i % 10;
i = i /10;
}
while (0 < tmp) {
print(tmp % 10 + 48);
tmp = tmp /10;
}
}
}







Results
Assembly
# SPILL %9
# SPILL %18
# SPILL %10
# SPILL %31
.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
__LABEL1:
pushq %rbp # Save old EBP
movq %rsp, %rbp # Save old ESP
addq $-40, %rsp
##MovL %8 <- 0
movq $0, %rax
##MoMo %9 <- %8
##MovL %46 <- -8
movq $-8, %rbx
##MoOp %46 <- %46,%-1
addq %rbp, %rbx
##RToM #46 <- %9
movq %rax, (%rbx)
__LABEL2:
__LABEL3:
##MovL %10 <- 0
movq $0, %rbx
##MovL %48 <- -24
movq $-24, %rax
##MoOp %48 <- %48,%-1
addq %rbp, %rax
##RToM #48 <- %10
movq %rbx, (%rax)
##MoMo %11 <- %-1
movq %rbp, %rbx
##MovL %12 <- 24
movq $24, %rax
##MoOp %13 <- %11,%12
addq %rbx, %rax
##MToR %14 <- #13
movq (%rax), %rbx
##MovL %48 <- -24
movq $-24, %rax
##MoOp %48 <- %48,%-1
addq %rbp, %rax
##MToR %48 <- #48
movq (%rax), %rax
##MoOp %15 <- %48,%14
cmpq %rax, %rbx
setle %dil
xorb $1, %dil
movzbq %dil, %rax
##JuCo %15
testq %rax, %rax
jnz __LABEL4
__LABEL5:
##Jump 6
jmp __LABEL6
__LABEL6:
__LABEL8:
__LABEL9:
##MovL %35 <- 0
movq $0, %rax
##MovL %46 <- -8
movq $-8, %rbx
##MoOp %46 <- %46,%-1
addq %rbp, %rbx
##MToR %46 <- #46
movq (%rbx), %rbx
##MoMo %36 <- %46
##MoOp %37 <- %35,%36
cmpq %rax, %rbx
setle %dil
xorb $1, %dil
movzbq %dil, %rax
##JuCo %37
testq %rax, %rax
jnz __LABEL10
__LABEL11:
##Jump 12
jmp __LABEL12
__LABEL12:
movq %rbp, %rsp # Restore ESP
popq %rbp # Restore EBP
retq
__LABEL10:
__LABEL13:
##MovL %46 <- -8
movq $-8, %rbx
##MoOp %46 <- %46,%-1
addq %rbp, %rbx
##MToR %46 <- #46
movq (%rbx), %rbx
##MoMo %38 <- %46
##MovL %39 <- 10
movq $10, %rax
##MoOp %40 <- %38,%39
#%rbx A:%rbx B:%rax
pushq %rax
pushq %rdx
movq %rax, %rdi
movq %rbx, %rax
cqto
idiv %rdi
movq %rdx, %rbx
popq %rdx
popq %rax
##MovL %41 <- 48
movq $48, %rax
##MoOp %42 <- %40,%41
addq %rbx, %rax
##Prin %42
pushq %rax ## prepare print call
pushq %rbx ## prepare print call
movq %rax, %rdi ## print
callq putchar@PLT
popq %rbx
popq %rax
##MovL %46 <- -8
movq $-8, %rbx
##MoOp %46 <- %46,%-1
addq %rbp, %rbx
##MToR %46 <- #46
movq (%rbx), %rbx
##MoMo %43 <- %46
##MovL %44 <- 10
movq $10, %rax
##MoOp %45 <- %43,%44
pushq %rdx
movq %rax, %rdi
movq %rbx, %rax
cqto
idiv %rdi
popq %rdx
##MoMo %9 <- %45
##MovL %46 <- -8
movq $-8, %rbx
##MoOp %46 <- %46,%-1
addq %rbp, %rbx
##RToM #46 <- %9
movq %rax, (%rbx)
##Jump 9
jmp __LABEL9
__LABEL4:
__LABEL7:
##MovL %46 <- -8
movq $-8, %rbx
##MoOp %46 <- %46,%-1
addq %rbp, %rbx
##MToR %46 <- #46
movq (%rbx), %rbx
##MoMo %16 <- %46
##MovL %17 <- 10
movq $10, %rax
##MoOp %18 <- %16,%17
imul %rax, %rbx
##MovL %47 <- -16
movq $-16, %rax
##MoOp %47 <- %47,%-1
addq %rbp, %rax
##RToM #47 <- %18
movq %rbx, (%rax)
##MoMo %19 <- %-1
movq %rbp, %rbx
##MovL %20 <- 24
movq $24, %rax
##MoOp %21 <- %19,%20
addq %rbx, %rax
##MToR %22 <- #21
movq (%rax), %rbx
##MovL %23 <- 10
movq $10, %rax
##MoOp %24 <- %22,%23
#%rbx A:%rbx B:%rax
pushq %rax
pushq %rdx
movq %rax, %rdi
movq %rbx, %rax
cqto
idiv %rdi
movq %rdx, %rbx
popq %rdx
popq %rax
##MovL %47 <- -16
movq $-16, %rax
##MoOp %47 <- %47,%-1
addq %rbp, %rax
##MToR %47 <- #47
movq (%rax), %rax
##MoOp %25 <- %47,%24
addq %rbx, %rax
##MoMo %9 <- %25
##MovL %46 <- -8
movq $-8, %rbx
##MoOp %46 <- %46,%-1
addq %rbp, %rbx
##RToM #46 <- %9
movq %rax, (%rbx)
##MoMo %26 <- %-1
movq %rbp, %rbx
##MovL %27 <- 24
movq $24, %rax
##MoOp %28 <- %26,%27
addq %rbx, %rax
##MToR %29 <- #28
movq (%rax), %rbx
##MovL %30 <- 10
movq $10, %rax
##MoOp %31 <- %29,%30
pushq %rax
pushq %rdx
movq %rax, %rdi
movq %rbx, %rax
cqto
idiv %rdi
movq %rax, %rbx
popq %rdx
popq %rax
##MovL %49 <- -32
movq $-32, %rax
##MoOp %49 <- %49,%-1
addq %rbp, %rax
##RToM #49 <- %31
movq %rbx, (%rax)
##MoMo %32 <- %-1
movq %rbp, %rbx
##MovL %33 <- 24
movq $24, %rax
##MoOp %34 <- %32,%33
addq %rax, %rbx
##MovL %49 <- -32
movq $-32, %rax
##MoOp %49 <- %49,%-1
addq %rbp, %rax
##MToR %49 <- #49
movq (%rax), %rax
##RToM #34 <- %49
movq %rax, (%rbx)
##Jump 3
jmp __LABEL3
__LABEL0:
pushq %rbp # Save old EBP
movq %rsp, %rbp # Save old ESP
addq $-40, %rsp
##MoMa 0
pushq %rbx ## prepare malloc
movq $8, %rdi
callq malloc@PLT
testq %rax, %rax
jz fail_exit
movq %rax, %rax
popq %rbx
##MoMo %1 <- %0
##MoMo %2 <- %1
##MoMo %3 <- %2
##MoMo %4 <- %3
##MoMo %5 <- %4
##MovL %6 <- 1729
movq $1729, %rbx
##MoMo %7 <- %6
##PuAl
pushq %rax ## prepare call
pushq %rbx ## prepare call
##Push %7
pushq %rbx
##Push %5
pushq %rax
##Call (#1669437588)
call __LABEL1
##PopD
add $8, %rsp
##PopD
add $8, %rsp
##PoAl
popq %rbx
popq %rax
movq %rbp, %rsp # Restore ESP
popq %rbp # Restore EBP
retq
fail_exit:
movl $1, %eax
popq %rbp
retq
Expected
1729
Got
1729