[程序源码] 请教:这2种写法哪一种好一些呢?

[复制链接]
2760|17
 楼主| fxhfxh 发表于 2014-1-7 14:35 | 显示全部楼层 |阅读模式
p1 :......
     ......
   ljmp exit
p2:.....
   ......
  ljmp exit
......
pn:.....
  ljmp exit
exit:
   ret
如果在每一个跳转指令处不用 ljmp exit,而是直接写ret,字节数可以节省一点,看起来也没有现在这样累,不知这两种写法哪一种更好一些,抗干扰能力哪一种更强一些,希望知道的朋友能给以指点,谢谢先。
xyz549040622 发表于 2014-1-7 15:41 | 显示全部楼层
:lol汇编,真牛X
 楼主| fxhfxh 发表于 2014-1-7 15:48 | 显示全部楼层
xyz549040622 发表于 2014-1-7 15:41
汇编,真牛X

版主,麻烦你还是指点一下嘛。
huangxz 发表于 2014-1-7 17:09 | 显示全部楼层
可以直接ret,跟抗干扰没半点关系
NE5532 发表于 2014-1-7 17:10 | 显示全部楼层
直接return就可以了,汇编不是C语言,没有那么严格的“程序结构”,多跳一次反而增加程序执行时间。

“软件抗干扰”是一个很玄妙的话题,个人不是很认可这种提法,楼主可以不用去迷信的。
ayb_ice 发表于 2014-1-7 17:22 | 显示全部楼层
软件陷阱不是有效的

跑飞后PC可能是任意值,很多芯片会进入异常的,而有些芯片遇到不能识别的指令会当成NOP指令,
 楼主| fxhfxh 发表于 2014-1-7 18:49 | 显示全部楼层
谢谢以上朋友的回复。为什么提出这个问题,因为这是一个基本成熟的好像是老外写的一个程序,现在因为要增加一点功能就反汇编看了一下,结果发现很多处子程序结束时是用的LJMP(或者SJMP)跳到RET.其实我就感觉好像可以直接就写RET,不用再跳了,但就不知道当时这个高手写这个程序的时候是怎么考虑的,我想老外肯定有自己的什么理由。所以想请教一下知道的朋友。特别还有是最后的一个子程序已经到了RET指令处了,也来一个SJMP EXIT,跳一下。就搞不懂了,呵呵。
microxh 发表于 2014-1-7 21:41 | 显示全部楼层
每个子程序只有1个出口, 可靠性当然更高, 对RET指令执行过程欠了解
ZG11211 发表于 2014-1-7 21:51 | 显示全部楼层
真心不懂汇编,围观一下了。
 楼主| fxhfxh 发表于 2014-1-7 21:51 | 显示全部楼层
microxh 发表于 2014-1-7 21:41
每个子程序只有1个出口, 可靠性当然更高, 对RET指令执行过程欠了解

谢谢楼上朋友的回复。你的意思是用跳转指令跳到RET处更好一些吗?
结字空林 发表于 2014-1-7 22:58 | 显示全部楼层
便于模块话编程,相当于一个函数,只有一个返回值,在汇编调试中便于放置断点,可以提高代码可读性,标号最好都有一个前缀
NE5532 发表于 2014-1-8 09:56 | 显示全部楼层
fxhfxh 发表于 2014-1-7 21:51
谢谢楼上朋友的回复。你的意思是用跳转指令跳到RET处更好一些吗?

多做事情怎么可能可靠嘛,你做100件事情容易出错还是做1件事情容易出错?不要把老外当神仙,老外也是人,也要犯2,而且人家可能写的是C,编译器这样弄情有可原。要相信自己,越简单的东西越不容易出错,矛盾是普遍存在的,为了“可靠”附加上去的东西,可能自己也不“可靠”。
 楼主| fxhfxh 发表于 2014-1-8 10:44 | 显示全部楼层
NE5532 发表于 2014-1-8 09:56
多做事情怎么可能可靠嘛,你做100件事情容易出错还是做1件事情容易出错?不要把老外当神仙,老外也是人, ...

我主要是这方面没有实际经验。谢谢版主的回复。
link8001 发表于 2014-1-8 13:30 | 显示全部楼层
模块化思想,直接RET是省字节数,但程序松散,不易阅读;用ljmp exit可以加深模块化印像,程序多了之后不易混乱;所以,小程序直接RET;大程序还是先分模块的好;至于软件抗干扰,有这回事吗?(个人意见,仅供参考)
 楼主| fxhfxh 发表于 2014-1-8 15:27 | 显示全部楼层
本帖最后由 fxhfxh 于 2014-1-8 15:29 编辑
link8001 发表于 2014-1-8 13:30
模块化思想,直接RET是省字节数,但程序松散,不易阅读;用ljmp exit可以加深模块化印像,程序多了之后不易 ...


谢谢楼上朋友的回复。我个人认为模块化思想是对的,直接用RET省字节数,但程序松散,不易阅读的说法也没有错误,但我认为一个程序最关键的是要稳定可靠,其他的都应该是其次的,NE5532版主也说了,多做事情肯定出错的几率多,LJMP在程序里跳来跳去应该比不跳出错误的几率要大吧(我是想象的哈),所以我个人认为可以直接用RET代替LJMP EXIT,虽然程序有可能没有原来的好读了,但总比程序跑飞死机要好吧。
link8001 发表于 2014-1-9 08:18 | 显示全部楼层
fxhfxh 发表于 2014-1-8 15:27
谢谢楼上朋友的回复。我个人认为模块化思想是对的,直接用RET省字节数,但程序松散,不易阅读的说法也没 ...

嗯嗯,跳来跳去确实容易出问题;所以我认为小程序直接RET方便;但大程序不一样,大程序很难短期内调试成功,时间跨度一长,自已写的代码也就不认识了(C稍好,汇编基本一月就忘了,因为相似代码太多了);至于后期维护,痛苦的回忆
 楼主| fxhfxh 发表于 2014-1-9 11:14 | 显示全部楼层
只有多加注释了,稳定压倒一切呀,呵呵。
liub_2014 发表于 2014-4-16 15:04 | 显示全部楼层
这样写也是有一定好处的,便于以后升级,比如想在返回之前添加点语句,这种就方面多了也不容易出错
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

382

帖子

1

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