[ASM в C], gotо из C в Asm и наоборот?

yolki

возможны ли такие конструкции:
1.


void f
{
..
goto label;
..
asm {
..
label:
..
}
}


2.


void f
{
..
label:
..
asm {
..
jnz label // или любой другой jump
..
}
}


3.


int f
{
asm {
..
label:
..
}
..
asm {
..
jnz label
..
}
}

Ivan8209

Да.
Но смотри описание компилятора.
Точнее: то, как он корёжит имена.
---
...Я работаю антинаучным аферистом...

maggi14

А в никсах на системном уровне можно делать гото в любое место

Marinavo_0507

"гото" - это вообще-то фича процессора, от ОС не зависит

Ivan8209

"Никсы" бывают очень разные.
apropos protection
man mprotect
---
...Я работаю антинаучным аферистом...

maggi14

Повторяю: в никсах она реализована на системном уровне. А не только на железном.

maggi14

Это да, бесспорно. Просто я как масдаер плохо разбираюсь, в каких Юниксах что есть, а в каких -- нет. В каких-то точно есть.

Ivan8209

Она реализована не на системном уровне, а именно на железном.
См. GDT и LDT.
---
...Я работаю антинаучным аферистом...

Marinavo_0507

Про какую фичу ты говоришь?

maggi14

Я имел в виду следующее:
в [некоторых] UNIX есть такой системный ресурс (что-то вроде HANDLE в Виндуз) - метка. И парой системных функций можно это метку где-нибудь в программе поставить, а потом на эту метку из любого места программы сходить.

shlyumper

ты говоришь от setjmp/longjmp? Так это не системный ресурс, это фича компилятора.

maggi14

По-моему, не про него. Я читал про эту фишку, если не путаю, у Робачевского. Но т.к. это было несколько лет назад, а по д Юникс я не программил, то подробности я забыл. Поищу на досуге, поботаю.

Marinavo_0507

Что-то не припомню ничего похожего ни в Робачевском, ни где либо ещё.
При всём моём уважении, боюсь тебе это приснилось, ну или действительно
это был setjmp/longjmp (не имеющий отношения к *nix, я это в DOS на паскале использовал,
так как goto - это фича процессора, а не ОС и даже не языка, лишь бы он позволял вставлять
код на asm или непосредственно маш.код)

maggi14

Слово Гото я использовал исключительно в обобщенном переносном смысле. Там не команда, а системная функция. Точнее, две: поставить метку и перейти на нее. Короче, вернут мне Робачевского - я поищу.

yolki

ты путаешь с setjmp/longjmp - это есть в любом C компиляторе (даже в стандарте языка прописано)
Оставить комментарий
Имя или ник:
Комментарий: