你如何从外部汇编子程序COBOL程序传递参数回来? [英] How do you pass a parameter back from an external assembler subroutine to a cobol program?
问题描述
我想从用汇编语言编写外部子程序传回的参数。调用例程是COBOL和参数外部汇编程序是这样的:
I am trying to pass back a parameter from an external subroutine written in assembler. The calling routine is in cobol, and the parameters to the external assembler routine look like this:
01 CALCSHRS-PARMS.
05 CS-DEPOSIT-AMT PIC 9(5)V99 COMP-3.
05 CS-SHARE-PRC PIC 9(3)V99 COMP-3.
05 CS-SHARE-AMT PIC 9(9)V99 COMP-3.
调用看起来是这样的:
The call looks like this:
CALL 'CALCSHRS' USING CS-DEPOSIT-AMT
CS-SHARE-PRC
CS-SHARE-AMT.
该例程使用CS存款-AMT和CS-SHARE-PRC计算CS-SHARE-AMT,它需要得到传递回来。下面是汇编程序:
The routine uses the CS-DEPOSIT-AMT and the CS-SHARE-PRC to calculate the CS-SHARE-AMT, which needs to get passed back. Here is the assembler routine:
CALCSHRS CSECT
*
PRINT NOGEN
*
STM 14,12,12(13) SAVE ENTRY REGS
LR 12,15 SET BASE REG
USING CALCSHRS,12 ESTABLISH ADDRESSABILITY
*
LA 14,SUBPSAVE STANDARD
ST 13,4(,14) SAVE
ST 14,8(,14) AREA
LR 13,14 LINKAGE
*
LM 2,4,0(1) LOAD THE PARAMETERS
*
ZAP DEPOSITP,0(2,4) GET THE DEPOSIT AMOUNT
ZAP SHAREPCK,0(3,3) GET THE SHARE PRICE
*
ZAP SHARESP(9),DEPOSITP INITIALIZE SHARES
*
MP SHARESP,=P'10000' MULTIPLY BY 1000
DP SHARESP,SHAREPCK DIVIDE BY SHARE PRICE
ZAP SHARESPR,SHARESP(6) MOVE THE FIRST 5 BYTES
*
SRP SHARESPR(6),(64-1),5 SHIFT TO ROUND
SRP SHARESPR(6),2,5 SHIFT AGAIN
*
MVC 0(6,4),SHARESPR ME ATTEMPTING TO RETURN SHARESPR...
*
L 13,4(,13) STANDARD SAVE
LM 14,12,12(13) AREA LINKAGE
SR 15,15 SET RETURN CODE TO 0
BR 14
*
LTORG
*
SUBPSAVE DC 18F'0'
*
SHAREPCK DS PL3 SHARE PRICE PACKED
DEPOSITP DS PL5 DEPOSIT IN PACKED DECIMAL
SHARESP DS PL9 SHARES IN PACKED DECIMAL
SHARESPR DS PL6 SHARES ROUNDED
*
END CALCSHRS
我只需要返回SHARESPR和有它在CS-SHARE-AMT回到我的COBOL程序。其他一切正常,我希望它的方式。任何人都知道我需要怎么做呢?任何帮助深表AP preciated。
I just need to return SHARESPR and have it go in CS-SHARE-AMT back in my cobol program. Everything else works the way I want it to. Anyone know how I need to do that? Any help is much appreciated.
推荐答案
原来,你可以传递参数早在与它的使用ZAP地址寄存器。在我的情况下,CS-SHARE-AMT在寄存器4,所以这是我从我的汇编code传回SHARESPR我打电话COBOL程序:
Turns out, you can pass the parameter back in the register with it's address using ZAP. In my case, the CS-SHARE-AMT is in register 4, so this is how i pass back SHARESPR from my assembler code to my calling COBOL program:
ZAP 0(6,4),SHARESPR(6)
这篇关于你如何从外部汇编子程序COBOL程序传递参数回来?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!