gpt4 book ai didi

assembly - 如何从从 Assembly 返回到 COBOL 的指针寻址数据缓冲区

转载 作者:行者123 更新时间:2023-12-01 12:18:26 27 4
gpt4 key购买 nike

我有一个调用 Assembly 模块的 COBOL 程序。该模块返回一个指针,指向在该模块内获得的一些数据(我将其称为“缓冲区”)。我如何才能将工作存储中的变量寻址到该指针并使用数据?

在我的 COBOL 调用程序中,我有类似的东西:

工作存储:

01 WK-MOD-AREA.
03 WK-MOD-PTR PIC 9(09) COMP VALUE 0.

01 WK-BUFFER-PTR USAGE POINTER.
01 FILLER REDEFINES WK-BUFFER-PTR.
03 WK-BUFFER-PTR-COMP PIC 9(09) COMP.
01 WK-BUFFER-DATA PIC X(5656) VALUE SPACES.

程序部:

CALL 'MYMOD' USING WK-MOD-AREA.

MYMOD 在 WK-MOD-PTR 中返回一个地址。

我只是尝试使用以下方式处理数据:

MOVE WK-MOD-PTR TO WK-BUFFER-PTR-COMP.

SET ADDRESS OF WK-BUFFER-PTR TO WK-BUFFER.

但它给了我编译器错误:

==000657==> IGYPS2161-S "ADDRESS OF" operand "WRK-BUFFER" 
was found as the receiving operand of a "SET" statement,
but was not a level-01 or level-77 "LINKAGE SECTION" item.
The statement was discarded.

提前致谢。

最佳答案

你可以做你想做的,但你不能改变WORKING-STORAGE SECTION中项目的地址,这些项目有一个固定的地址,并在第一次激活程序时分配时间。正如您的编译器已经告诉您的那样,您可以对 LINKAGE SECTION 中的项目执行此操作,因为它们没有固定地址且未分配。

并且根据您的实际使用,您可以将 POINTER 直接传递给程序而不是中间变量:

Working-Storage SECTION.

01 WK-BUFFER-PTR USAGE POINTER.

LINKAGE SECTION.
01 WK-BUFFER-DATA PIC X(5656) VALUE SPACES.

Procedure Division.

CALL 'MYMOD' USING WK-BUFFER-PTR.
SET ADDRESS OF WK-BUFFER-DATA TO WK-BUFFER-PTR.

注意事项:

  • 您仍然需要确保数据在使用后在某处被释放(可能通过调用带有释放参数的分配程序)。
  • 您必须确保您访问的字段不会超过实际分配的长度,如果它不总是 5656 字节的话。为确保这一点,您可以使用引用修改 WK-BUFFER-DATA (1:actual-length) 或具有可变大小的表 DEPENDING ON(对 特别有用发生无限)。

关于assembly - 如何从从 Assembly 返回到 COBOL 的指针寻址数据缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46352161/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com