¿En qué se diferencian las instrucciones JUMP y CALL? ¿Cómo se relaciona con los conceptos de nivel superior, como un GOTO o una llamada de procedimiento? (Estoy en lo correcto en la comparación?)JUMP y LLAME
Esto es lo que pienso:
salto o GOTO es una transferencia del control a otra ubicación y el control no vuelve automáticamente al punto desde donde se llama .
Por otro lado, una LLAMADA o llamada de procedimiento/función vuelve al punto desde donde se llama. Debido a esta diferencia en su naturaleza, los lenguajes generalmente hacen uso de una pila y un marco de pila se empuja para "recordar" la ubicación para volver por cada procedimiento llamado. Este comportamiento también se aplica a los procedimientos recursivos. En caso de recursión de cola, sin embargo, no es necesario "empujar" un marco de pila para cada llamada.
Sus respuestas y comentarios serán muy apreciados.
Cuando dices: "CALL es solo una función de conveniencia implementada usando JMP". ¿Eso significa que CALL no es atómico (instrucción de un procesador)? – Anzurio
¿Quiere decir que en un hilo podría interrumpirse entre el movimiento, pero antes de la jmp en sí, si una LLAMADA se implementara como dos instrucciones? Mirando los documentos: http://www.intel.com/Assets/PDF/manual/253666.pdf, dice que el procedimiento primero mueve la dirección en la pila, y luego el salto, indicando claramente esto como una secuencia. No veo por qué debería ser atómico, además, ¿cómo importaría? Es lo mismo que si te interrumpieran justo después del jmp, ya que el jmp es incondicional. – Anteru
Si 'CALL' recuerda desde donde saltó, significa que demasiados' CALL's pueden desbordar la pila (si no 'RET'urn), mientras que con' JMP' es imposible corromper la pila, pero en Por otro lado, no puedes retroceder a menos que hayas almacenado la (s) ubicación (es) desde donde saltó. ¿Es eso correcto? El 'goto' de C debería ser igual a' JMP' en este caso. – CoDEmanX