2op_mod
Source Code
// MyCC code example
// Gabriel Capella
class Test {
int f;
int h;
public void main() {
int x;
x = 0;
while (x < 100) {
print(x % 10 + 48);
x = x + 1;
}
}
}







Results
Assembly
# SPILL %1
.globl main
main:
pushq %rbp # Save old EBP
movq %rsp, %rbp # Save old ESP
movq $16, %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 $-16, %rsp
##MovL %0 <- 0
movq $0, %rax
##MoMo %1 <- %0
movq %rax, %rbx
##MovL %13 <- -8
movq $-8, %rax
##MoOp %13 <- %13,%-1
addq %rbp, %rax
##RToM #13 <- %1
movq %rbx, (%rax)
__LABEL1:
__LABEL2:
##MovL %13 <- -8
movq $-8, %rax
##MoOp %13 <- %13,%-1
addq %rbp, %rax
##MToR %13 <- #13
movq (%rax), %rax
##MoMo %2 <- %13
movq %rax, %rbx
##MovL %3 <- 100
movq $100, %rax
##MoOp %4 <- %2,%3
cmpq %rbx, %rax
setle %dil
xorb $1, %dil
movzbq %dil, %rax
##JuCo %4
testq %rax, %rax
jnz __LABEL3
__LABEL4:
##Jump 5
jmp __LABEL5
__LABEL5:
movq %rbp, %rsp # Restore ESP
popq %rbp # Restore EBP
retq
__LABEL3:
__LABEL6:
##MovL %13 <- -8
movq $-8, %rax
##MoOp %13 <- %13,%-1
addq %rbp, %rax
##MToR %13 <- #13
movq (%rax), %rax
##MoMo %5 <- %13
movq %rax, %rbx
##MovL %6 <- 10
movq $10, %rax
##MoOp %7 <- %5,%6
#%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 %8 <- 48
movq $48, %rax
##MoOp %9 <- %7,%8
addq %rbx, %rax
##Prin %9
pushq %rax ## prepare print call
pushq %rbx ## prepare print call
movq %rax, %rdi ## print
callq putchar@PLT
popq %rbx
popq %rax
##MovL %13 <- -8
movq $-8, %rax
##MoOp %13 <- %13,%-1
addq %rbp, %rax
##MToR %13 <- #13
movq (%rax), %rax
##MoMo %10 <- %13
movq %rax, %rbx
##MovL %11 <- 1
movq $1, %rax
##MoOp %12 <- %10,%11
addq %rbx, %rax
##MoMo %1 <- %12
movq %rax, %rbx
##MovL %13 <- -8
movq $-8, %rax
##MoOp %13 <- %13,%-1
addq %rbp, %rax
##RToM #13 <- %1
movq %rbx, (%rax)
##Jump 2
jmp __LABEL2
fail_exit:
movl $1, %eax
popq %rbp
retq
Expected
0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
Got
0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789