回复:问多次调用含跳转的子程序

已锁定

yanxiao

版主

  • 帖子

    12147
  • 精华

    46
  • 被关注

    183

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

发布于 2021-12-21 22:46:11

48楼

展开查看
以下是引用手机用户20200103736849在2021-12-17 20:40:58的发言 >44楼

我奇怪的是,这个label属不属于存储资源,

如果属于资源,属不属于全局性资源,而且子程序调用可以多达八层,要每一层都互不干涉,堆栈不是得保存八次上级程序的label位置,那就是堆栈中可以有8x256个label空间

或者说 子程序可以多达128个,每个子程序来256个label,有128x256个label空间?

如果不属于资源为什么又有数量限制


看帮助文档,是属于存储资源,而且是全局性资源



以下是引用yufeng186在2021-12-02 08:52:22的发言 >41楼:主程序,子程序,中断...

引用41楼详细内容:

主程序,子程序,中断程序里的LBL都是相对独立的.就算相同的LBL在子程序编译后就变成地址了.我猜测编译时是先将具有JMP_LBL的程序段内将LBL变为地址然后才处理子程序调用,所以规则禁止子程序间及与主程序的相互跳转.既然变为地址了,地址都是唯一的,就不存在什么ABAB,AABB.

所以LBL不是只能使用256次.而是在同一个子程序内(或主程序,中断)只能使用256次,并且不能重复.

举例:主机厂有LBL主任1,LBL主任2,LBL主任3.给主机厂配套的配套厂A也有LBL主任1,LBL主任2,LBL主任3.给配套厂A配套的配套厂B也有LBL主任1,LBL主任2,LBL主任3.编译时主机厂JMP的地址只能对应主机厂的,是不可能JMP到配套厂.

我判断,JMP占空间,而LBL不占空间(只是标记位置)。

至于数量上的限制,应当是JMP指令决定,它只接受1个字节的参数。


具体要编个程序验证一下。


随便写了几个JMP、LBL,都占空间,都是3个字节。


评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有8944条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。