虚拟机之ARM上mov指令C语言实现

  • Post author:
  • Post category:其他


以下代码是虚拟机源码上摘录下来希望对正在学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;

}

}

}