本来运行正常的汇编程序,为什么加了一个中断分支子程序就不能运行?

2010年10月09日 12:53    发布者:lifs
RMRG1:     
    CLR        EA    MOV       DFLG,#8FH      LCALL     DSPL_FLG   
    LCALL     DLY1S
  RM10:     MOV        R3,#50
    MOV        R4,#2  
  RM14:     MOV        R6,#5
    ACALL     RMK0
    JZ           RM13
    LCALL     DLY0S
    MOV       R4,#2
    DJNZ      R3,RM14
    AJMP       RMRG0       NOP
    NOP
    LJMP       ERR
  RM13:     DJNZ     R4,RM14   
     MOV      R0Tr,#R0T   
     MOV      R1Tr,#R1T   
     MOV      DFLG,#0EH            LCALL      DSPL_FLG        
     LCALL     DLY1S
     AJMP     RMRG0        
     NOP
     NOP
     LJMP  ERRRMK0:      JNB      P3.2,RM11B
     MOV            P1,#0FFH            
     MOV      A,P1
     ANL      A,#0E0H
     SWAP     A
     RR      A
     CLR      C
     SUBB     A,R6
     RET
     
RM11B:      MOV            R3,#100      RM11B1:                LCALL     DLY0S
     JB      P3.2,RM10
     DJNZ     R3,RM11B1   
     AJMP           RMRG0  
     NOP
     NOP
     LJMP  ERR

网友评论

star2006star 2010年10月17日
写清楚点啊
embcom010 2010年10月18日
中断分支子程序的主要影响有:

1、运行时序。
2、R1~R4的冲突。
3、堆栈的影响。

仔细分析一下吧。
MCU_NEWER 2010年11月08日
汇编相对于C语言来说,读起来较难入脑,导致思绪不能快速清晰的建立起来。

因此,如要用汇编来写程序,分段落、加注释、排版对齐都是很必要的。

一行只写一个语句,各子程序的功能是什么都要注释明白。

不同的寄存器又是用来储存什么量的?要注释。

程序调用会否导致某些变量的值发生意外的改变呢?

程序调用前后是否要做、是否有做必要的现场保护、还原呢?

变量的取值是否恰当呢?特别是控制程序走向的变量,有时可能根本不可能变化达到某一个界限值。

时序是否恰当呢?

有些程序段又没写出来,也不知它们会对哪些变量产生什么影响。

如果可以的话,请把程序的目的写出来,别人就更容易明白了。
MCU_NEWER 2010年11月08日
加注释不只是为了给别人看,也可以方便自己日后的阅读、修改、升级,也就是方便维护了。

事实上本人没编过什么大程序,也就只编过几个小小的程序,程序阅读能力不好,所以也没细心分析。楼上发表的是部分心得,仅供参考,希望有助于楼主发现问题所在。
szw0117 2010年11月08日
学习了
斑头雁 2010年11月15日
加注释不只是为了给别人看,也可以方便自己日后的阅读、修改、升级,也就是方便维护了。

事实上本人没编过什么大程序,也就只编过几个小小的程序,程序阅读能力不好,所以也没细心分析。楼上发表的是部分心得,仅 ...
MCU_NEWER 发表于 2010-11-8 20:27 http://www.eechina.com/images/common/back.gif

同意,经验之谈。
zls261976514 2011年01月17日
加注释不只是为了给别人看,也可以方便自己日后的阅读、修改、升级,也就是方便维护了。

事实上本人没编过什么大程序,也就只编过几个小小的程序,程序阅读能力不好,所以也没细心分析。楼上发表的是部分心得,仅 ...
MCU_NEWER 发表于 2010-11-8 20:27 http://www.eechina.com/images/common/back.gif养成良好的编程习惯
奋斗六号 2011年02月05日
很给力
gsxpop 2011年02月15日
写得太不清楚了!!
wongfu72 2011年02月15日
学习了,
suwxdsp@163.com 2011年04月18日
汇编不加注释,过一些天后自己都看不懂的。
klyzh2003 2011年04月20日
没有注释的汇编程序无异于天书!
alpha321 2011年09月17日
楼上各位都说得很有道理,特别是MCU_NEWER,发帖能遇上这么热心的朋友不能不说是楼主的造化,可要好好珍惜呀。以后别发这种少头没尾的帖子了。
我看了看程序,其中楼主没有指出所说的分支,但这里有一个明显的问题,在RM14标记下,有个调用“ACALL      RMK0”,而在RMK10中又有一个直接跳转到RM10的“JB       P3.2, RM10”,RM10又在RM14的前边。这样反复调用多次,堆栈就会溢出。
pcbkey 2015年02月07日
支持一下