打印
[程序源码]

请教:这2种写法哪一种好一些呢?

[复制链接]
2237|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,跟抗干扰没半点关系

使用特权

评论回复
5
NE5532| | 2014-1-7 17:10 | 只看该作者
直接return就可以了,汇编不是C语言,没有那么严格的“程序结构”,多跳一次反而增加程序执行时间。

“软件抗干扰”是一个很玄妙的话题,个人不是很认可这种提法,楼主可以不用去迷信的。

使用特权

评论回复
6
ayb_ice| | 2014-1-7 17:22 | 只看该作者
软件陷阱不是有效的

跑飞后PC可能是任意值,很多芯片会进入异常的,而有些芯片遇到不能识别的指令会当成NOP指令,

使用特权

评论回复
7
fxhfxh|  楼主 | 2014-1-7 18:49 | 只看该作者
谢谢以上朋友的回复。为什么提出这个问题,因为这是一个基本成熟的好像是老外写的一个程序,现在因为要增加一点功能就反汇编看了一下,结果发现很多处子程序结束时是用的LJMP(或者SJMP)跳到RET.其实我就感觉好像可以直接就写RET,不用再跳了,但就不知道当时这个高手写这个程序的时候是怎么考虑的,我想老外肯定有自己的什么理由。所以想请教一下知道的朋友。特别还有是最后的一个子程序已经到了RET指令处了,也来一个SJMP EXIT,跳一下。就搞不懂了,呵呵。

使用特权

评论回复
8
microxh| | 2014-1-7 21:41 | 只看该作者
每个子程序只有1个出口, 可靠性当然更高, 对RET指令执行过程欠了解

使用特权

评论回复
9
ZG11211| | 2014-1-7 21:51 | 只看该作者
真心不懂汇编,围观一下了。

使用特权

评论回复
10
fxhfxh|  楼主 | 2014-1-7 21:51 | 只看该作者
microxh 发表于 2014-1-7 21:41
每个子程序只有1个出口, 可靠性当然更高, 对RET指令执行过程欠了解

谢谢楼上朋友的回复。你的意思是用跳转指令跳到RET处更好一些吗?

使用特权

评论回复
11
结字空林| | 2014-1-7 22:58 | 只看该作者
便于模块话编程,相当于一个函数,只有一个返回值,在汇编调试中便于放置断点,可以提高代码可读性,标号最好都有一个前缀

使用特权

评论回复
12
NE5532| | 2014-1-8 09:56 | 只看该作者
fxhfxh 发表于 2014-1-7 21:51
谢谢楼上朋友的回复。你的意思是用跳转指令跳到RET处更好一些吗?

多做事情怎么可能可靠嘛,你做100件事情容易出错还是做1件事情容易出错?不要把老外当神仙,老外也是人,也要犯2,而且人家可能写的是C,编译器这样弄情有可原。要相信自己,越简单的东西越不容易出错,矛盾是普遍存在的,为了“可靠”附加上去的东西,可能自己也不“可靠”。

使用特权

评论回复
13
fxhfxh|  楼主 | 2014-1-8 10:44 | 只看该作者
NE5532 发表于 2014-1-8 09:56
多做事情怎么可能可靠嘛,你做100件事情容易出错还是做1件事情容易出错?不要把老外当神仙,老外也是人, ...

我主要是这方面没有实际经验。谢谢版主的回复。

使用特权

评论回复
14
link8001| | 2014-1-8 13:30 | 只看该作者
模块化思想,直接RET是省字节数,但程序松散,不易阅读;用ljmp exit可以加深模块化印像,程序多了之后不易混乱;所以,小程序直接RET;大程序还是先分模块的好;至于软件抗干扰,有这回事吗?(个人意见,仅供参考)

使用特权

评论回复
15
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,虽然程序有可能没有原来的好读了,但总比程序跑飞死机要好吧。

使用特权

评论回复
16
link8001| | 2014-1-9 08:18 | 只看该作者
fxhfxh 发表于 2014-1-8 15:27
谢谢楼上朋友的回复。我个人认为模块化思想是对的,直接用RET省字节数,但程序松散,不易阅读的说法也没 ...

嗯嗯,跳来跳去确实容易出问题;所以我认为小程序直接RET方便;但大程序不一样,大程序很难短期内调试成功,时间跨度一长,自已写的代码也就不认识了(C稍好,汇编基本一月就忘了,因为相似代码太多了);至于后期维护,痛苦的回忆

使用特权

评论回复
17
fxhfxh|  楼主 | 2014-1-9 11:14 | 只看该作者
只有多加注释了,稳定压倒一切呀,呵呵。

使用特权

评论回复
18
liub_2014| | 2014-4-16 15:04 | 只看该作者
这样写也是有一定好处的,便于以后升级,比如想在返回之前添加点语句,这种就方面多了也不容易出错

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

382

帖子

1

粉丝