Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.143.4.181] |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Как я это всё понимаю?
В блоке asm есть: Как это работает? Компилятор: Соответственно, если в inputs указано "c"(x), а в outputs и в clobbers нет "c"/"ecx", значит компилятор полагает, что в ecx по прежнему лежит x. Иначе не полагает. Вот и вся логика. Ещё раз про clobbers К примеру, если мы указали в clobbers параметр "eax", а перед вставкой выражения на ассемблере в код компилятор занёс туда x, то при чтении значения из x после выражения на ассемблере он не может теперь использовать регистр eax, т.к. там уже может быть не x, а всё, что угодно. Если мы указали "memory", а перед вставкой выражения на ассемблере в код он занёс в eax значение x, то он опять не может использовать eax при чтении значения из x, т.к. значение x могло измениться, и в eax теперь будет устаревшее значение x, а не актуальное. Вот, собственно, и всё. К чему выдумывать какие-то дополнительные ограничения? Каждый блок параметров обрабатывается отдельно и причин, почему одна и та же связка не может быть и в inputs, и в clobbers, я не вижу. Возможно, это немного упрощённое описание, но сути оно не меняет. Если у меня где-то ошибка в логике, прошу указать где, в чём и почему |
Сообщ.
#17
,
|
|
|
Jin X, тебе осталось совсем немного. К примеру, на
Цитата Jin X @ ты можешь дать ответ, если подумаешь и свяжешь воедино мои и свои слова.Я не знаю, в чём тут прикол, но вероятно, раньше такое делать можно было, но потом (зачем-то) убрали. Мне хочется понять: ЗАЧЕМ? P.S. Впрочем, это не отменяет того факта, что всё это домыслы. Однако выглядят в целом логично, потому отвергать их нет нужды. |
Сообщ.
#18
,
|
|
|
Цитата Qraizer @ Я всё равно не нахожу ответа и логики в этом.ты можешь дать ответ, если подумаешь и свяжешь воедино мои и свои слова. Ты сравниваешь это с макросами и со связыванием двух сущностей (регистра и переменной, к примеру). Я не вижу причин, почему такая связь не может рушиться на выходе из asm-блока. Ведь clobbers рушат другие связи (указанный регистр с ранее связанной переменной, ещё до asm-блока, которая не фигурирует ни в inputs, ни в outputs). Ещё раз: Цитата Jin X @ Ведь если регистр указан и в inputs, и в outputs, то эта логика нарушается, ибо как можно связать регистр сразу с двумя аргументами? А если можно, значит в какой-то момент регистр отвязывается от input-аргумента, а в какой-то привязывается к output-аргументу. Почему же нельзя отвязать и не привязывать ни к чему? |