Forgive me for a possible newbie questions..
No problem. Asking questions are the simplest way of gathering knowledge, therefore, questions should be encouraged.
Isn’t goto just a holdover from assembly language jump command ?
No, not really. The "goto" statement is a very general way of transferring control to someplace. It is very common in Assembly language because Assembly, usually, doesn't provide for/while/repeat loops nor high level conditionals. All of those must be synthesized using "goto"s or jumps of one kind or another (conditional, unconditional, indexed, etc.)
Also when using pascal without the goto, isn’t there still a goto being performed behind the scenes as part of the program flow?
Yes, there is definitely one or more "goto" (or jumps) being performed behind the scenes BUT, in spite of that, it is _very_ different than an explicit "goto" instruction. The _crucial_ difference is that the target(s) of Pascal's "behind the scenes" jumps/gotos are pre-established. For instance, when a programmer sees a "for" loop - which is implemented using gotos/jumps - the programmer knows the very instant he/she sees the "for" statement that there is an execution scope that is limited by the end of the "for" statement. IOW, the "for" denotes an explicit execution boundary, the same is true of "while", "repeat", "if" and other instructions that are implemented using jumps/gotos.
Contrast that with seeing "goto somelabel" somewhere in the code. the "somelabel" can be _anywhere_ (in Pascal, usually limited to the function/procedure in which it appears but, even that is not guaranteed.) The fact that the label can be placed "anywhere" is what makes the "goto" totally undesirable. It makes execution flow harder to visualize and follow. Use more than one target label (which implies multiple gotos) and you've got code that desperately needs marinara sauce to be palatable.
The fact that the target of a goto can be anywhere IS what makes gotos unacceptable.
It should also be noted that "goto"s are not the only way of creating spaghetti code and, the _ultimate_ mechanism that enables creating spaghetti code is having the ability to change the target of the "goto". Imagine there is a statement "goto label_1" and that somehow that statement can be modified at runtime to be "goto label_27" (instead of "label_1"). Now, not only the target (label_xxx) has to be located but, the real target can only be determined at runtime. Most programmers can see the many problems that creates. By the way, changing the target of a "goto" was/is a feature found in the COBOL language using the instruction "ALTER". Fortunately, companies decided that any programmer who used "ALTER" had to be _fired_ (and, yes, that is an excellent reason to fire a programmer.)
Amazingly, the runtime dynamic target "feature" has become a pervasive element in modern programming and, that's all I'm going to say about that.
There is no room nor need for "goto" in any correct program written in Pascal.