查看: 6722|回复: 14

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

[复制链接]
发表于 2010-10-9 12:53:41 | 显示全部楼层 |阅读模式
关键词: 汇编程序 , 运行 , 支子
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
发表于 2010-10-17 19:11:37 | 显示全部楼层
写清楚点啊
发表于 2010-10-18 11:00:30 | 显示全部楼层
中断分支子程序的主要影响有:

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

仔细分析一下吧。
发表于 2010-11-8 20:16:56 | 显示全部楼层
汇编相对于C语言来说,读起来较难入脑,导致思绪不能快速清晰的建立起来。

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

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

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

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

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

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

时序是否恰当呢?

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

如果可以的话,请把程序的目的写出来,别人就更容易明白了。
发表于 2010-11-8 20:27:18 | 显示全部楼层
加注释不只是为了给别人看,也可以方便自己日后的阅读、修改、升级,也就是方便维护了。

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

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


同意,经验之谈。
发表于 2011-1-17 17:29:07 | 显示全部楼层
加注释不只是为了给别人看,也可以方便自己日后的阅读、修改、升级,也就是方便维护了。

事实上本人没编过什么大程序,也就只编过几个小小的程序,程序阅读能力不好,所以也没细心分析。楼上发表的是部分心得,仅 ...
MCU_NEWER 发表于 2010-11-8 20:27
养成良好的编程习惯
发表于 2011-2-5 15:44:09 | 显示全部楼层
很给力
发表于 2011-2-15 13:22:18 | 显示全部楼层
写得太不清楚了!!
发表于 2011-2-15 21:25:17 | 显示全部楼层
学习了,
发表于 2011-4-18 21:54:33 | 显示全部楼层
汇编不加注释,过一些天后自己都看不懂的。
发表于 2011-4-20 20:01:18 | 显示全部楼层
没有注释的汇编程序无异于天书!
发表于 2011-9-17 08:38:32 | 显示全部楼层
楼上各位都说得很有道理,特别是MCU_NEWER,发帖能遇上这么热心的朋友不能不说是楼主的造化,可要好好珍惜呀。以后别发这种少头没尾的帖子了。
我看了看程序,其中楼主没有指出所说的分支,但这里有一个明显的问题,在RM14标记下,有个调用“ACALL      RMK0”,而在RMK10中又有一个直接跳转到RM10的“JB       P3.2, RM10”,RM10又在RM14的前边。这样反复调用多次,堆栈就会溢出。
发表于 2015-2-7 11:42:20 | 显示全部楼层
支持一下
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表