参数传递-非标准链接

问题描述 投票:0回答:1

我是一位长期的汇编程序程序员,现在进入Metal C领域。我是一名C新手,所以我的术语可能反映了我所知道的知识和我正在学习的知识。我的理解力肯定会变色。

我正在尝试将新的Metal C代码插入一些不一定遵循标准条目链接约定的旧组件。

例如,服务例程将要处理的控制块的地址作为R1中的输入。我看过《 Metal C用户指南》中有关参数传递的讨论和语言参考中的#pragma链接讨论,似乎没有一种方法可以使编译器执行此操作。

本质上,我想声明一个由以下汇编程序调用的例程:

     L R1,MyParm@      Put pointer to Parm into R1
     L R15,Routine@    Get address of service routine
     BASR R14,R15      Branch to service routine

[我意识到我可以接受上述内容,对其进行参数化并将其放入__asm()块中,但我想使程序尽可能“干净”。

感谢,斯科特

zos metalc
1个回答
0
投票

您可以在C程序中尝试这样的事情:

#pragma linkage(MYHLASM,OS)

然后像这样调用函数:

MYHLASM(&pointerToParmWhichBecomesR1);

然后,汇编程序将如下所示:

MYHLASM  CSECT ,
MYHLASM  AMODE 64
MYHLASM  RMODE 31
         STG   14,12(13)
         LG    2,0(,1)
         USING *,15
         DO SOMETHING WITH THE PARM ADDR WHICH IS NOW IN R2
         LG    14,12(13)
         BR    14
         LTORG
         END

这是一个64位示例,MYHLASM必须在C程序的绑定时可用。

希望这会有所帮助,

商标

© www.soinside.com 2019 - 2024. All rights reserved.