Mobile devices are constrained in terms of computational power, battery lifetime and memory sizes. Software development for mobile devices is further complicated by application complexity and heterogeneous hardware platforms. Virtual Machines (VMs) abstract from the underlying hardware, but their use with embedded devices can only be justified if the interpretive overhead is kept to a minimum. In this paper we argue that efficient bytecode execution is feasible on mobile devices. We adapt a VM for the C programming language for ARM-based mobile phone platforms. Our VM utilizes latest interpreter technologies to achieve high performance. It offers mixed-mode execution, i.e., code is either executed on the VM or on the CPU, to combine the advantages of VM-based hardware abstraction with the speed of machine-code. We conduct extensive experiments with the MiBench embedded benchmark suite to evaluate VM-performance and the effectiveness of interpreter optimizations on an ARM-based mobile phone platform. Our interpreter consumes just 10.55KB of code and 0.9KB of data. For all surveyed applications, we achieve a slowdown of less than a factor of 23 over binary code execution, which makes our VM a viable option for bytecode execution on mobile devices.