/* convert a binary number to string * using any base from 2 to 10 * and print it * code by Pekka "PQ" Paalanen */ .globl main /* version 0.2.1 */ main: pushl %ebp /* callee-saved, stack base ptr */ pushl %ebx /* callee-saved, counter */ movl %esp, %ebp /* set stack base pointer */ subl $14, %esp /* make room for the string */ leal -1(%ebp), %ecx /* initialize str ptr */ movb $10, (%ecx) /* put '\n' */ movl $2003, %eax /* value to be printed */ movl $8, %ebx /* divisor (number base) */ decode: xorl %edx, %edx /* sign extension; unsigned */ idivl %ebx /* divide by number base */ addl $48, %edx /* make character from remainder */ decl %ecx /* move str ptr */ movb %dl, (%ecx) /* put character */ cmp $0, %eax jnz decode /* if %eax != 0 goto decode */ movl %ebp, %edx subl %ecx, %edx /* string length */ movl $1, %ebx /* file handle */ movl $4, %eax /* syscall number */ int $0x80 /* call kernel */ movl %ebp, %esp /* reset stack ptr */ popl %ebx /* reset to old value */ popl %ebp /* reset to old value */ xorl %eax, %eax /* return 0 */ ret /* exit function */