ZJSXHWL000000 发表于 2014-6-12 10:18:28

c程序中有汇编,请高手解读(已解决)

本帖最后由 FSL_TICS_ZP 于 2014-7-8 14:51 编辑

asm {
lddtemp;   //带偏移量的间接寻址装载指令
ldx#4
idiv      //    有符号数除法指令IDIV
stab ctemp
}

浪里白条 发表于 2014-6-12 10:31:43

大哥,CPU内核型号给出来哇

FSL_TICS_ZP 发表于 2014-6-12 11:28:48

同问,你的MCU型号是什么啊?

ZJSXHWL000000 发表于 2014-6-12 12:04:06

mc9s12hy64

ZJSXHWL000000 发表于 2014-6-12 12:05:09

/****************************************************************************
* motor_update(char channel, char dir) -
*
* Description : Control motor drivers and polarity
*                          :
* Example   : N/A
* Input           : motor channel
* Output          : MotorCurStyep[?]
* Modify      : Motor driver and polarity
* Return      : N/A
****************************************************************************/
void motor_update(char channel)//分步方式步进电机刷新程序
{
        volatile unsigned char        ctemp,*motor_channel;
        int                temp,itemp;
       
        itemp=MotorFinalStep-MotorCurStep;//目标步数值减去了当前步数值
       
        if (itemp!=0)
        {
          if (itemp<0)MotorCurStep--;
          else if (itemp>0)MotorCurStep++;
       
          //motor_channel=&MCDC0H+channel*4;
          motor_channel=(unsigned char *)((unsigned int)&MCDC0 + (unsigned int)(channel*4));
          
          temp = MotorCurStep;
asm        {
                ldd                temp;   //带偏移量的间接寻址装载指令
                ldx                #4
                idiv      //    有符号数除法指令IDIV
                stab        ctemp
        }
               
      if(ctemp==0)
          {
              *motor_channel   &=~S0_DTC;        //;Duty cycle channel 0 (A low /A PWM)
              *(motor_channel+2) &=~S0_DTC;        //;Duty cycle channel 1 (B low /B PWM)
          }
          else if(ctemp==1)
          {
              *motor_channel   &=~S0_DTC;        //;Duty cycle channel 0 (A low /A PWM)
              *(motor_channel+2) |=S1_DTC;        //;Duty cycle channel 1 (B PWM /B low)
          }
          else if(ctemp==2)
          {
              *motor_channel   |=S1_DTC;        //;Duty cycle channel 0 (A PWM /A low)
              *(motor_channel+2) |=S1_DTC;        //;Duty cycle channel 1 (B PWM /B low)
          }
          else if(ctemp==3)
          {
              *motor_channel      |=S1_DTC;                //;Duty cycle channel 0 (A PWM /A low)
              *(motor_channel+2)&=~S0_DTC;        //;Duty cycle channel 1 (B low /B PWM)
          }                                                  
                                                                   
    }
    else               
    {
              MotorStatus=OFF;               
    }
}

ZJSXHWL000000 发表于 2014-6-12 12:11:39

单片机是:MC9S12HZ256CPV

wangpengcheng 发表于 2014-6-12 13:04:12

查一下对应的汇编指令表,不就知道了?只有几条!

浪里白条 发表于 2014-6-12 13:40:53

http://wenku.baidu.com/link?url=gP4tdEYr4R0c-IpJXNzYQEJf1fwJnEY4F7DfsuSqBU-v5ZjAt-nBLHYx1X3y4zaMwnwPR1QIZS-vcjGChyw-cygfQjf4OaQ7wymiQu3sfT7
lddtemp;   将内存单元的内同加载到累加器D
ldx#4       将内存单元的内容加载到变址寄存器X
idiv            (D)/(X)→X,余数→D;
stab ctemp 将累加器B的内容存储到内存单元

话说本ID怎么觉得这几句汇编内容不全呢? 你确定这玩意能编译通过?
页: [1]
查看完整版本: c程序中有汇编,请高手解读(已解决)