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

本文分享了虚拟机源码中ARM指令的C语言实现片段,重点介绍了MOV指令的处理流程,包括条件检查、寄存器操作及状态标志位更新等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值