2012-11-29 3 views
2

어셈블러로 작성된 외부 서브 루틴에서 매개 변수를 전달하려고합니다. 호출 루틴은 COBOL에,이 같은 외부 어셈블러 루틴 모양에 매개 변수 :어떻게 외부 어셈블러 서브 루틴에서 파라미터를 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-예금 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

이 정확히 어떤 플랫폼입니다. 시스템/36? –

+0

z/OS. 이것은 제가 택할 수있는 수업입니다. 우리는 Marist 시스템을 사용합니다. – KateMak

답변

2

밝혀지면 매개 변수를 ZAP을 사용하여 주소로 다시 전달할 수 있습니다. 내 경우, CS-SHARE-AMT는 레지스터 4, 그래서 난 내 전화 COBOL 프로그램 내 어셈블러 코드에서 SHARESPR를 다시 전달하는 방법이 있습니다 :

ZAP 0(6,4),SHARESPR(6) 
+0

MVC가 "작동하지 않는 이유"에 대해 언급 할 수 있습니까? 길이가 같으면 MVC 할 수 있습니다. –

+0

좋은 지적입니다. – KateMak

관련 문제