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