以下代码是虚拟机源码上摘录下来希望对正在学ARM指令的朋友有帮助,接下来会把ARM的指令都用C语言整理下上传。
void i_mov() { uint32_t icode = ICODE; uint32_t S; uint32_t cpsr; uint32_t Rd; int rd; if(!check_condition(icode)) { return; } rd = (icode >> 12)&0xf; cpsr=REG_CPSR; cpsr&= ~(FLAG_N | FLAG_Z | FLAG_C); cpsr |= get_data_processing_operand(icode); Rd = AM_SCRATCH1; dbgprintf("MOV value %08x to reg %d \n",Rd,rd); ARM9_WriteReg(Rd,rd); S=testbit(20,icode); if(S) { if(rd==15) { if(MODE_HAS_SPSR) { SET_REG_CPSR(REG_SPSR); } else { fprintf(stderr,"Mode has no spsr in line %d pc %08x icode %08x\n",__LINE__,ARM_GET_NNIA,icode); } } else { if(!Rd) { cpsr |= FLAG_Z; } if(ISNEG(Rd)) { cpsr |= FLAG_N; } REG_CPSR=cpsr; } } }