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







Results
Assembly
# SPILL %9
# SPILL %7
# 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 $-48, %rsp
##MovL %6 <- 0
movq $0, %rax
##MoMo %7 <- %6
##MovL %60 <- -16
movq $-16, %rbx
##MoOp %60 <- %60,%-1
addq %rbp, %rbx
##RToM #60 <- %7
movq %rax, (%rbx)
##MovL %8 <- 0
movq $0, %rax
##MoMo %9 <- %8
##MovL %59 <- -8
movq $-8, %rbx
##MoOp %59 <- %59,%-1
addq %rbp, %rbx
##RToM #59 <- %9
movq %rax, (%rbx)
__LABEL2:
__LABEL3:
##MovL %10 <- 0
movq $0, %rbx
##MovL %62 <- -32
movq $-32, %rax
##MoOp %62 <- %62,%-1
addq %rbp, %rax
##RToM #62 <- %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 %62 <- -32
movq $-32, %rax
##MoOp %62 <- %62,%-1
addq %rbp, %rax
##MToR %62 <- #62
movq (%rax), %rax
##MoOp %15 <- %62,%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 %38 <- 0
movq $0, %rax
##MovL %60 <- -16
movq $-16, %rbx
##MoOp %60 <- %60,%-1
addq %rbp, %rbx
##MToR %60 <- #60
movq (%rbx), %rbx
##MoMo %39 <- %60
##MoOp %40 <- %38,%39
cmpq %rax, %rbx
setle %dil
xorb $1, %dil
movzbq %dil, %rax
##JuCo %40
testq %rax, %rax
jnz __LABEL10
__LABEL11:
##Jump 12
jmp __LABEL12
__LABEL12:
__LABEL14:
__LABEL15:
##MovL %52 <- 0
movq $0, %rax
##MovL %59 <- -8
movq $-8, %rbx
##MoOp %59 <- %59,%-1
addq %rbp, %rbx
##MToR %59 <- #59
movq (%rbx), %rbx
##MoMo %53 <- %59
##MoOp %54 <- %52,%53
cmpq %rax, %rbx
setle %dil
xorb $1, %dil
movzbq %dil, %rax
##JuCo %54
testq %rax, %rax
jnz __LABEL16
__LABEL17:
##Jump 18
jmp __LABEL18
__LABEL18:
movq %rbp, %rsp # Restore ESP
popq %rbp # Restore EBP
retq
__LABEL16:
__LABEL19:
##MovL %55 <- 48
movq $48, %rax
##Prin %55
pushq %rax ## prepare print call
pushq %rbx ## prepare print call
movq %rax, %rdi ## print
callq putchar@PLT
popq %rbx
popq %rax
##MovL %59 <- -8
movq $-8, %rbx
##MoOp %59 <- %59,%-1
addq %rbp, %rbx
##MToR %59 <- #59
movq (%rbx), %rbx
##MoMo %56 <- %59
##MovL %57 <- 1
movq $1, %rax
##MoOp %58 <- %56,%57
imulq $-1, %rax
addq %rbx, %rax
##MoMo %9 <- %58
##MovL %59 <- -8
movq $-8, %rbx
##MoOp %59 <- %59,%-1
addq %rbp, %rbx
##RToM #59 <- %9
movq %rax, (%rbx)
##Jump 15
jmp __LABEL15
__LABEL10:
__LABEL13:
##MovL %60 <- -16
movq $-16, %rbx
##MoOp %60 <- %60,%-1
addq %rbp, %rbx
##MToR %60 <- #60
movq (%rbx), %rbx
##MoMo %41 <- %60
##MovL %42 <- 10
movq $10, %rax
##MoOp %43 <- %41,%42
#%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 %44 <- 48
movq $48, %rax
##MoOp %45 <- %43,%44
addq %rbx, %rax
##Prin %45
pushq %rax ## prepare print call
pushq %rbx ## prepare print call
movq %rax, %rdi ## print
callq putchar@PLT
popq %rbx
popq %rax
##MovL %60 <- -16
movq $-16, %rbx
##MoOp %60 <- %60,%-1
addq %rbp, %rbx
##MToR %60 <- #60
movq (%rbx), %rbx
##MoMo %46 <- %60
##MovL %47 <- 10
movq $10, %rax
##MoOp %48 <- %46,%47
pushq %rdx
movq %rax, %rdi
movq %rbx, %rax
cqto
idiv %rdi
popq %rdx
##MoMo %7 <- %48
##MovL %60 <- -16
movq $-16, %rbx
##MoOp %60 <- %60,%-1
addq %rbp, %rbx
##RToM #60 <- %7
movq %rax, (%rbx)
##MovL %59 <- -8
movq $-8, %rbx
##MoOp %59 <- %59,%-1
addq %rbp, %rbx
##MToR %59 <- #59
movq (%rbx), %rbx
##MoMo %49 <- %59
##MovL %50 <- 1
movq $1, %rax
##MoOp %51 <- %49,%50
imulq $-1, %rax
addq %rbx, %rax
##MoMo %9 <- %51
##MovL %59 <- -8
movq $-8, %rbx
##MoOp %59 <- %59,%-1
addq %rbp, %rbx
##RToM #59 <- %9
movq %rax, (%rbx)
##Jump 9
jmp __LABEL9
__LABEL4:
__LABEL7:
##MovL %60 <- -16
movq $-16, %rbx
##MoOp %60 <- %60,%-1
addq %rbp, %rbx
##MToR %60 <- #60
movq (%rbx), %rbx
##MoMo %16 <- %60
##MovL %17 <- 10
movq $10, %rax
##MoOp %18 <- %16,%17
imul %rax, %rbx
##MovL %61 <- -24
movq $-24, %rax
##MoOp %61 <- %61,%-1
addq %rbp, %rax
##RToM #61 <- %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 %61 <- -24
movq $-24, %rax
##MoOp %61 <- %61,%-1
addq %rbp, %rax
##MToR %61 <- #61
movq (%rax), %rax
##MoOp %25 <- %61,%24
addq %rbx, %rax
##MoMo %7 <- %25
##MovL %60 <- -16
movq $-16, %rbx
##MoOp %60 <- %60,%-1
addq %rbp, %rbx
##RToM #60 <- %7
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 %63 <- -40
movq $-40, %rax
##MoOp %63 <- %63,%-1
addq %rbp, %rax
##RToM #63 <- %31
movq %rbx, (%rax)
##MoMo %32 <- %-1
movq %rbp, %rbx
##MovL %33 <- 24
movq $24, %rax
##MoOp %34 <- %32,%33
addq %rax, %rbx
##MovL %63 <- -40
movq $-40, %rax
##MoOp %63 <- %63,%-1
addq %rbp, %rax
##MToR %63 <- #63
movq (%rax), %rax
##RToM #34 <- %63
movq %rax, (%rbx)
##MovL %59 <- -8
movq $-8, %rbx
##MoOp %59 <- %59,%-1
addq %rbp, %rbx
##MToR %59 <- #59
movq (%rbx), %rbx
##MoMo %35 <- %59
##MovL %36 <- 1
movq $1, %rax
##MoOp %37 <- %35,%36
addq %rbx, %rax
##MoMo %9 <- %37
##MovL %59 <- -8
movq $-8, %rbx
##MoOp %59 <- %59,%-1
addq %rbp, %rbx
##RToM #59 <- %9
movq %rax, (%rbx)
##Jump 3
jmp __LABEL3
__LABEL0:
pushq %rbp # Save old EBP
movq %rsp, %rbp # Save old ESP
addq $-48, %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
##MovL %4 <- 1729
movq $1729, %rbx
##MoMo %5 <- %4
##PuAl
pushq %rax ## prepare call
pushq %rbx ## prepare call
##Push %5
pushq %rbx
##Push %3
pushq %rax
##Call (#276737754)
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