2

アセンブラで記述された外部サブルーチンからパラメータを返そうとしています。呼び出しルーチンは 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 に戻すだけです。他のすべては、私が望むように機能します。私がそれを行う必要がある方法を知っている人はいますか?どんな助けでも大歓迎です。

4

1 に答える 1

2

結局のところ、ZAP を使用して、パラメーターをそのアドレスと共にレジスターに戻すことができます。私の場合、CS-SHARE-AMT はレジスタ 4 にあるため、アセンブラー コードから呼び出し元の COBOL プログラムに SHARESPR を返す方法は次のとおりです。

ZAP  0(6,4),SHARESPR(6)
于 2012-11-29T15:42:41.090 に答える