我试图从汇编程序编写的外部子程序中传回一个参数。调用例程在cobol中,外部汇编程序例程的参数如下所示:
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.
电话看起来像这样:
CALL 'CALCSHRS' USING CS-DEPOSIT-AMT
CS-SHARE-PRC
CS-SHARE-AMT.
例程使用CS-DEPOSIT-AMT和CS-SHARE-PRC来计算需要传回的CS-SHARE-AMT。这是汇编程序:
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并将其放入我的cobol程序中的CS-SHARE-AMT中。其他一切都按我想要的方式运作。有谁知道我需要怎么做?非常感谢任何帮助。
答案 0 :(得分:2)
事实证明,您可以使用ZAP将参数传回寄存器及其地址。在我的例子中,CS-SHARE-AMT在寄存器4中,所以这就是我将SHARESPR从汇编代码传递回调用COBOL程序的方式:
ZAP 0(6,4),SHARESPR(6)