汇编转C语言。。。新手汇编请教

[复制链接]
2242|10
 楼主| xvezhe 发表于 2013-7-12 09:09 | 显示全部楼层 |阅读模式
WAIT0:
                MOV     CNT_DJS,#00             ;倒计时学习时间
                MOV        CNT_A,#20                ;设置50ms计时值(1s)
                SETB        SG_19                        ;开机3秒,禁止倒计时显示数据
               
                LCALL        CHECKPRO                ;取当前步状态
                MOV        NOWSTEP,A               ;当前相位
WAIT1:
                     LCALL        CHECKPRO                ;取当前步状态(调用函数CHECKPRO)
                CJNE           A,#3FH,WAIT2
                       SJMP        WAIT0                        ;若3秒内出现全灭,则返回
WAIT2:                    
                     MOV        A,CNT_DJS
                     CJNE        A,#03,WAIT1
WAIT3:               
                LCALL        CHECKPRO
                CJNE        A,NOWSTEP,WAIT4               ;NOWSTEP(为一个变量)
                CLR        SG_19                       
                SJMP        WAIT3



由于没学过汇编,请教汇编高手转C语言程序。。。谢谢!()
 楼主| xvezhe 发表于 2013-7-12 09:28 | 显示全部楼层
若有个软件直接转的话多好啊。。。。再稍微改改就ok;P
HAPPYMONDAY 发表于 2013-7-12 09:49 | 显示全部楼层
汇编干嘛要转C?直接嵌入就可以了,何必费劲
 楼主| xvezhe 发表于 2013-7-12 09:57 | 显示全部楼层
HAPPYMONDAY 发表于 2013-7-12 09:49
汇编干嘛要转C?直接嵌入就可以了,何必费劲

怎么嵌入?新手请多指教啊。。。因只玩过C语言编程。。。
cool_coder 发表于 2013-7-12 12:29 | 显示全部楼层
本帖最后由 cool_coder 于 2013-7-18 17:16 编辑

汇编的特点是跳转语句多,而C/C++中并不鼓励这样做,
尝试改写了一下,大概是这样吧(如果熟悉代码用途,可以改得更好):

  1. BYTE byCntDjs;
  2. BYTE byCntA;
  3. BYTE byNowStep;
  4. BIT bSg19;
  5. wait_0:
  6.     byCntDjs = 0;  // 原来的wait0在这里
  7.     byCntA = 20;
  8.     bSg19 = 1;
  9.     byNowStep = CheckPro();
  10. do{
  11.     if(0x3F == CheckPro()){  // 原来的wait1在这里
  12.         goto wait_0;
  13.     }
  14. }while(3 != byCntDjs);  // 原来的wait2在这里
  15. while(CheckPro() == byNowStep){  // 原来的wait3在这里
  16.     bSg19 = 0;
  17. }
  18. goto wait_4;   // 这个已经超出可见代码的范围,自己改吧

 楼主| xvezhe 发表于 2013-7-15 15:12 | 显示全部楼层
超感谢,希望加你好友,可以继续向你多学习点汇编转C语言编程,请高手多多指教。。。。。
 楼主| xvezhe 发表于 2013-7-15 15:13 | 显示全部楼层
cool_coder 发表于 2013-7-12 12:29
汇编的特点是跳转语句多,而C/C++中并不鼓励这样做,
尝试改写了一下,大概是这样吧(如果熟悉代码用途, ...


超感谢,希望加你好友,可以继续向你多学习点汇编转C语言编程,请高手多多指教。。。。。
 楼主| xvezhe 发表于 2013-7-15 15:21 | 显示全部楼层
cool_coder 发表于 2013-7-12 12:29
汇编的特点是跳转语句多,而C/C++中并不鼓励这样做,
尝试改写了一下,大概是这样吧(如果熟悉代码用途, ...

因程序比较长,古分开请教。。。若高手慷慨帮忙的话,我再上传程序。。。。新手请教,高手多多指教
cool_coder 发表于 2013-7-15 16:46 | 显示全部楼层
xvezhe 发表于 2013-7-15 15:13
超感谢,希望加你好友,可以继续向你多学习点汇编转C语言编程,请高手多多指教。。。。。 ...

兄弟过谦了,共同交流并进步吧。
 楼主| xvezhe 发表于 2013-7-22 08:55 | 显示全部楼层
cool_coder 发表于 2013-7-15 16:46
兄弟过谦了,共同交流并进步吧。

请高手指教,这个是小段代码:


  1. DXA_P00:       
  2.                 MOV            TH0,#4CH       
  3.                      MOV            TL0,#00H
  4.                      MOV        CNT_A,#5               
  5.                      MOV        CNT_DJS,#00
  6.                 MOV        STEPADDR,#4FH                ;设置保存数据的起始地址-1(50H-1)
  7.                
  8.                 LCALL        CHECKPRO                ;取当前步长
  9.                 MOV        NOWSTEP,A
  10. DXA_P01:
  11.                 LCALL        CHECKPRO
  12.                 CJNE        A,NOWSTEP,DXA_P02
  13.                 CLR        SG_19                       
  14.                 SJMP        DXA_P01
  15. DXA_P02:               
  16.                 SETB        SG_19                       
  17.                 MOV        NOWSTEPT,CNT_DJS
  18.                 MOV        CNT_D,CNT_A       
  19.                 MOV        CNT_B,#00               
  20. DXA_P03:                       
  21.                      LCALL        CHECKPRO               
  22.                 CJNE        A,NOWSTEP,DXA_P04
  23.                 SJMP        DXA_P01
  24. DXA_P04:
  25.                 MOV        A,CNT_B
  26.                 CJNE        A,#15,DXA_P03               
  27.                
  28.                 MOV        A,CNT_D
  29.                 CJNE        A,#10,DXA_P05               
  30.                 INC        NOWSTEPT
  31.                 SJMP        DXA_P07
  32. DXA_P05:
  33.                 JNC        DXA_P07
  34.                 INC        NOWSTEPT
  35. DXA_P07:                                               
  36.                 MOV        A,50H                       
  37.                 CJNE        A,NOWSTEP,DXA_P11
  38.                
  39.                 MOV        A,60H                       
  40.                 CJNE        A,NOWSTEPT,DXA_P08
  41.                 SJMP        DXA_P10
  42. DXA_P08:
  43.                 MOV        A,60H
  44.                 INC        A
  45.                 CJNE        A,NOWSTEPT,DXA_P09
  46.                 SJMP        DXA_P10               
  47. DXA_P09:
  48.                 MOV        A,60H
  49.                 DEC        A
  50.                 CJNE        A,NOWSTEPT,DXA_P11
  51.                 SJMP        DXA_P10
  52. DXA_P10:               
  53.                 LCALL        CHECKPRO
  54.                 CJNE        A,51H,DXA_P11               
  55.                 SJMP        DXA_P13
  56. DXA_P11:
  57.                 MOV        A,STEPADDR               
  58.                 CJNE        A,#5FH,DXA_P12
  59.                 LJMP        MAIN
  60. DXA_P12:               
  61.                 INC        STEPADDR               
  62.                 MOV        R0,STEPADDR               
  63.                 MOV        A,NOWSTEP
  64.                 MOV        @R0,A                       
  65.                
  66.                 MOV        A,R0
  67.                 ADD        A,#10H
  68.                 MOV        R0,A
  69.                 MOV        A,NOWSTEPT
  70.                 MOV        @R0,A                       
  71.                
  72.                 LCALL        CHECKPRO               
  73.                 MOV        NOWSTEP,A
  74.                 MOV            TH0,#4CH               
  75.                      MOV            TL0,#00H
  76.                      MOV        CNT_A,#5               
  77.                      MOV        CNT_DJS,#00
  78.                 LJMP        DXA_P01
  79. DXA_P13:
  80.                 MOV        ENDADDR,STEPADDR       
  81.                 MOV        STEPADDR,#51H               

  82.                 MOV        NOWSTEP,51H               
  83.                 MOV        DOWN_A,61H               
  84.                
  85.                 MOV        A,STEPADDR               
  86.                 CJNE        A,ENDADDR,DXA_P14
  87.                 MOV        NEXTSTEP,50H
  88.                 MOV            TH0,#4CH               
  89.                      MOV            TL0,#00H
  90.                      MOV        CNT_A,#5
  91.                      MOV        CNT_C,#00
  92.                      SETB        SG_17                       
  93.                 SJMP        DXA_P15
  94. DXA_P14:               
  95.                 INC        A
  96.                 MOV        R0,A
  97.                 MOV        A,@R0
  98.                 MOV        NEXTSTEP,A
  99.                 MOV            TH0,#4CH               
  100.                      MOV            TL0,#00H
  101.                      MOV        CNT_A,#5
  102.                      MOV        CNT_C,#00
  103.                      SETB        SG_17                       
  104.                 SJMP        DXA_P15
  105.                
 楼主| xvezhe 发表于 2013-7-22 08:57 | 显示全部楼层
HAPPYMONDAY 发表于 2013-7-12 09:49
汇编干嘛要转C?直接嵌入就可以了,何必费劲

在学习汇编,转c语言是为了方便以后编程。。。新手请指教
您需要登录后才可以回帖 登录 | 注册

本版积分规则

54

主题

225

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部