Ответ 1
Ну, во-первых, jmp
просто "перескакивает" на метку, которую вы ему даете (это адрес памяти, поскольку программные инструкции хранятся в памяти), а call
хранит место, где оно будет возвращено ( ниже инструкции call
) в стеке, jmp
на метку, а затем в команде ret
, jmp
назад, в какое место было сохранено (как указано выше, ниже инструкции вызова). Немного разница там, как вы можете видеть. IMHO, я считаю, что это просто просто функции call
, поскольку это то, что делает компилятор С++ с функциями, но если вы должны jmp
, тогда хорошо, просто убедитесь, что push
место возврата или создать другое чтобы вернуться к выполнению некоторого кода.
Ниже приведен пример перехода на другую метку:
_start:
jmp _Print;
_start_label:
jmp _Exit;
_Exit:
; exit stuff goes here
ret;
_Print:
;print stuff goes here
jmp _start_label;
или вы можете просто использовать вызов:)