Hi,
on what system are you working? Usualy in the program listing there is a reference with the relative addresses of the instructions within you program. You have to know the start in memory of your program at the moment of abend, subtract this from the abend address and than you find the relative address whithin you program. In the listing there is a list of statements. Find the highest address lower than the relative abend address. There starts the instruction which causes the problem. I like to find this list on the IBM mainframe by giving the find command in ISPF: FIND MOVE WORD LAST
Then I am usualy in the statement list with offsets.
Don't you have a debugger? Or something like abend-aid? An other way to solve problems is to incoorporate displays on many lines to know where something is happening. You can use the 'D' on column 7 and use the debugging mode of the compiler to let these statements have effect.
Good Luck!