你如何从外部汇编子程序COBOL程序传递参数回来? [英] How do you pass a parameter back from an external assembler subroutine to a cobol program?

查看:688
本文介绍了你如何从外部汇编子程序COBOL程序传递参数回来?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从用汇编语言编写外部子程序传回的参数。调用例程是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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆