我是一位长期的汇编程序程序员,现在进入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()块中,但我想使程序尽可能“干净”。
感谢,斯科特
您可以在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程序的绑定时可用。
希望这会有所帮助,
商标