/* convert a binary number to string * using any base from 2 to 10 * and print it * code by Pekka "PQ" Paalanen * * compile with * as -o rint.o rint2.s * ld -m elf_i386 -s rint.o -o rint */ .text .globl _start /* version 0.3.1 */ _start: leal -1(%esp), %ecx /* initialize str ptr */ movb $10, (%ecx) /* put '\n' */ movl $-1, %eax /* value to be printed */ movl $5, %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 %esp, %edx subl %ecx, %edx /* string length */ movl $1, %ebx /* file handle */ movl $4, %eax /* syscall number (sys_write) */ int $0x80 /* call kernel */ xorl %ebx, %ebx /* return value */ movl $1, %eax /* syscall number (sys_exit) */ int $0x80 /* call kernel */