This is a great thread. It is great to see someone enthusiastic about learning assembler.
Your EODAD routine looks like a potential problem. The access method calls your EODAD inside the get. Here you would normally set a flag to say EOD occured and return to operating system (BR14), and test this flag after each GET. If your routine works, I guess you are 'getting away with it' because you use BAKR/PR and not save areas. No doubt there could be debate out this, as if it works, you way is more efficient than testing a flag after every get. Your way looks very like sas eof= :) Further suggestions you could try read the input dataset names, either from parm=, or from a SYSIN type DD, then dynamically allocate them before opening them. Have fun