NOP 0 & NOP 1 have no effect on the RLO in S5 & are ignored by the interpreter, there are a number of reasons they have been used, if there is a jump label but no code in the jump then it requires a NOP (this is one of the main reasons for it often used at the end of a segment), often people use them when removing an instruction just change it to a NOP, also it stops it being displayed back into ladder, there are many different things in S5 like getting the brackets correct for AN/OR branches, although often the logic will work as expected, not guaranteed Also many people are unaware that program segments (each ladder) has a *** which means end of segment, also called BLD255, often when programmers code using STL it is not translatable into ladder, this can be circumvented somewhat by adding BLD255 after what should be a ladder segment end providing the last instruction for the ladder is an output as such. S5 contained many rather less documented instructions that most programmers are not aware of like in S5 Datablocks could only be addressed from 0-255, however, you could create a DB length in the 1000's there was a way to address these words above 255 called 20 bit addressing, also, there can only be 255 segments (ladders) in a PB or FB, jumps could not be done from one segment to another unless using relative address jumps (there was a way but not in the S5 IDE).
As an ex Certified Siemens approved system builder I came across many things people did to try & make the code unreadable like using timers T 259 onwards, S5 timers only go from T0-T255, however, timers were 8 bit addressing so using T 259 so it actually used T 4, it ignored the second 8 bits this can only be done by passing the timer number to a function block by an input parameter I believe.