我试图将表条目的地址加载到寄存器中,然后将表条目的前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'
答案 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