IBM Assembler表搜索

时间:2014-01-08 21:37:48

标签: assembly mainframe

我试图将表条目的地址加载到寄存器中,然后将表条目的前2个位置与输入文件中的字段进行比较,并从那里进行进一步处理。

但是,我似乎无法成功地将表条目的地址加载到寄存器中,就像我的教科书和不同的网站所示。我不确定从哪里开始,任何方向都会有所帮助。我尝试的任何东西都会进入无限循环,或只显示NOTFOUND消息。

以下是部分代码。

GETREC   EQU   *                              
     GET   TAPEIN,MHOMEOWN                                     
     AP    INCOUNT,=P'1'                        
     AP    CNT100,=P'1'                         
     CP    CNT100,=P'100'                 
     BNE   GETREC                
     PUT   DISKOUT,MHOMEOWN      
     BAL   R10,MNPRCS          
     AP    OTCOUNT,=P'1'
     ZAP   CNT100,=P'0' 
     B     GETREC       
     SPACE 1            
.....

NOTFOUND EQU   *                                            
     MVC   P+10(40),=CL40'PAR XX - NOT FOUND IN PARDTAB'
     MVC   P+14(2),MPARISH                              
     BAL   R8,PRINT                                     
     DC    X'FFFF'                                      
     EJECT                                              

MNPRCS   EQU   *                                            
     LA    R8,PARDTAB                                   
     CLC   MPARISH,0(R8)                                
     BE    COUNT                                        
     BNE   NOTFOUND                                     
     LA    R8,3(R8)                                     
     B     MNPRCS                                       

 table excerpt:
 PARDTAB  EQU   *              
      DC    CL2'01',CL1'3' 
      DC    CL2'03',CL1'2' 
      DC    CL2'04',CL1'5'                                

1 个答案:

答案 0 :(得分:1)

我找到了自己问题的答案。 MNPRCS循环中的第二个LA指令应该前进到表中的下一行以便找到匹配。但是,当我循环返回以启动进程时,第一个LA指令再次从头开始加载表。所以它造成了无限循环。我将代码更改为以下内容:

MNLOAD   EQU   *              
         LA    R8,PARDTAB     
MNPRCS   CLC   0(2,R8),MPARISH
         BE    COUNT          
         CLC   0(2,R8),=C'..' 
         BE    NOTFOUND       
         LA    R8,3(R8)       
         B     MNPRCS