Versammlung 'Anruf' vs 'JMP'

9

Ich wurde aufgefordert, 'jmp' anstelle von 'call' zu verwenden, aber 'jmp' mag mich nicht .. wenn ich hüpfe, kommt es nicht zurück (so dass es nie ausgeht und nicht glückliche Tage), aber der Aufruf kehrt zurück und geht normal aus.

Ich bin glücklich mit 'call', aber gibt es eigentlich einen Grund, warum ich versuchen sollte 'jmp' zu überwinden?

Dieser einfache Code zeigt nur, wenn ich 'jmp' niemals zurück- und wieder verlasse.

Danke für weitere Hilfe.

%Vor%

auch .. Ich führe das alles in einem Linux-Terminal, wenn das etwas ändert

    
user3502489 26.09.2015, 02:47
quelle

1 Antwort

10

Zunächst springt jmp einfach auf die Bezeichnung, die Sie ihm geben (eine Speicheradresse, da Programmbefehle im Speicher gespeichert sind), während call den Ort speichert, an den es zurückkehren wird ( unterhalb der Anweisung call ) im Stapel, jmp an die Bezeichnung und dann an die Anweisung ret , jmp zurück an den Speicherort (wie oben unter der Aufrufanweisung angegeben). Ein kleiner Unterschied, wie Sie sehen können. IMHO, ich glaube, es ist in Ordnung, einfach call -Funktionen, wie das ist, was der C ++ - Compiler mit Funktionen tut, aber wenn Sie müssen jmp , dann in Ordnung, dann stellen Sie sicher, push den Rückgabeort oder erstellen Sie einen anderen label, um nach der Ausführung von Code zurückzukehren.

Hier sehen Sie ein Beispiel für den Sprung zu einem anderen Etikett:

%Vor%

oder du könntest einfach anrufen:)

    
nameGoesHere 26.09.2015, 03:21
quelle

Tags und Links