У меня есть следующий поток в C:Реализация потока "(1), если {...} еще если {...} ... (2)" в Ассамблее
// some stuff1
//................
if (something1) {
func1();
func2();
} else if (something2) {
func3();
func4();
}
// some stuff2
Я удивляюсь, как я могу кодировать это в Assembly? Я имею в виду не точные наработки, а поток. Должен ли я использовать метки для перехода к тому, что внутри if (something1) {...} и «else if (something2)»? Как я тогда вернусь к «// some stuff2»?
; some stuff1
; and then
cmp [some_struc], SOME_CONST
je .... ????
cmp [some_struc], SOME_CONST2
je .... ????
; some stuff2
; how to better get back here?
cmp rax, 0
Или я должен назвать их функциями? Тогда как бы я пропустил второй «else if (something2) {», если 1-й из них является истинным?
Я могу как-то реализовать, но я хочу знать, как лучше это делать.
Использование ярлыков - самый четкий подход. x86 не имеет условных вызовов, поэтому вы все равно будете использовать ярлыки. Вы можете попробовать с C * goto *, прежде чем входить в сборку, если хотите. Вы также можете [проконсультироваться с компилятором] (https://godbolt.org/g/h4iUR2), чтобы получить правильное вдохновение :) –