期货交易自动化论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 23|回复: 0

求COBOL技术大神指点 - 金融行业 - ITPUB论坛-专业的IT技术社区

[复制链接] |主动推送

285万

主题

285万

帖子

855万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
8553710
发表于 2022-9-11 06:43:23 | 显示全部楼层 |阅读模式
程序中把一个长度大于 BGDF-RECORD-AREA的变量赋值给了 BGDF-RECORD-AREA,这样会影响到GL-PASSALONG的值吗?
我认为是不会影响的,因为BGDF-RECORD-AREA和GL-PASSALONG都是01层,但是用debug工具查看GL-PASSALONG的值确实不影响了,所以有点困惑。。
以前我们做主机往小型机迁移的时候,处理了很多这样的问题。我们以前是IBM cobol,不知道你的是什么cobol。
001830 01 BGDF-RECORD-AREA.
001840   COPY BGDFMAST IN LIBRYMIS. ----备注:此copy book里是03层的
001910 01 GL-PASSALONG.
001920   COPY GLPASSWS IN LIBRYGEN. ----备注:此copy book里也是03层的
001930*
调用DBIO程序(一个DB2的封装程序)
SQ1027   CALL DBIOMODNAME     USING DBIOMOD-FILE
SQ1027                       DBIOMOD-KEY
SQ1027                       BGDF-RECORD-AREA
SQ1027                       DBIOMOD-FUNCTION
SQ1027                       DBIOMOD-KEY-NO
SQ1027                       DBIOMOD-RELEASE-LOCK
SQ1027                       DBIOMOD-ACCESS-COMMAND
SQ1027                       DBIOMOD-ACCESS-COND
SQ1027                       DBIOMOD-STATUS.
在子程序DBIOMODNAME中,会将一个长度比BGDF-RECORD-AREA大11的变量赋值给BGDF-RECORD-AREA,
所以返回的时候BGDF-RECORD-AREA想对应的内存空间后面多了11个长度的值。
debug看了下,两个01层的地址相差了6个空间,也就是两个01层是不连续的,但也是紧挨着的,所以BGDF-RECORD-AREA后的01层变量被这11个内存值覆盖了。
不知道在小机上01层之间一定会是有6个空间的间隔,并且01层与01层时有影响的?
看你在子程序里面是怎么对这一变量赋值,直接move应该没有影响,cobol会自己截取,如果是用set address 来的会影响。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|期货交易自动化论坛

GMT+8, 2024-11-25 16:46 , Processed in 0.087368 second(s), 28 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表