Вопрос о потоке выполнения ASM

#assembly #g #x86 #gnu-assembler

#сборка #g #x86 #gnu-ассемблер

Вопрос:

Я не уверен, как интерпретировать поток выполнения ASM. До сих пор все файлы, которые я просматривал, имели явные переходы (синтаксис Intel x86 AT amp; T, т. Е. jmp или jl) к меткам в файле ASM.

Мой вопрос: что происходит, когда вы достигаете конца метки без явного перехода к какой-либо другой метке. Продолжается ли выполнение до следующей метки?

Пример:

 foo:
    opcodes
    ...

nextLablel:
    moreopcodes
    ...        
  

После выполнения кодов операций под меткой ‘foo’ ассемблер переходит к ‘nextLablel’?

Заранее спасибо!

Ответ №1:

Метки не существуют для фактического кода, так что да, если ветви нет, код будет выполняться естественным образом. Ассемблер просто продолжит работу с кодом, игнорируя любые метки. Метки существуют только как удобный способ ветвления после jmp, je и подобных.

Если в вашем коде не было никаких ветвей, у вас все равно могло быть столько меток, сколько вы хотели. Они ничего бы не сделали, и это было бы очень плохой практикой, но для вас это иллюстрирует идею о том, что они не вызывают никаких проблем с естественным потоком кода.

Комментарии:

1. Спасибо! Я более глубоко изучил код ASM и, основываясь на исходном коде C, он фактически продолжает выполнение, как вы заявили. Еще раз спасибо!