|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Мар 13, 2004 04:00:35 q_q add esp,4? Asterix ответил уже.. Как дополнительный эффект - получаем 0 в регистре, т.е можно избежать лишнего XOR. Еще момент: "push N" < "mov reg32, N", если N помещается в байт. Хотя можно использовать и "mov reg8, N".. Asterix А я думал баг нашелся ;-) |
|
|
Дата: Мар 15, 2004 04:37:50 · Поправил: q_q Asterix > В данном случае pop edx круче ... Тогда уж eax. S_T_A_S_ > Как дополнительный эффект ... Человек с циклами разобраться не может, а Вы ему сразу крутые циклы с дополнительными эффектами. |
|
|
Дата: Мар 15, 2004 04:49:14 q_q А add esp,4 понятней будет? В любом случае что непонятно сейчас - пригодится потом. Все что я хотел - показать ВОЗМОЖНОСТИ ассемблера. Стереотипы вроде: mov reg,N or reg,reg jz lab1 конечно могут помочь в самом начале.. встать на путь HLL-мышления, IMHO Тогда уж eax. А результат ? |
|
|
Дата: Мар 15, 2004 06:56:13 S_T_A_S_ дополнительные эффекты, стереотипы и HLL-мышление говоришь. Ну-ну. Что будет в твоем цикле при N равном нулю? А результат ? А результаты вызова api на предыдущих итерациях? Под EAX я имел в виду аккумулятор. |
|
|
Дата: Мар 15, 2004 10:57:41 q_q Что будет в твоем цикле при N равном нулю? При N=0 я не буду даже писать этот цикл ;-) Хотя, вероятно, Вы имели ввиду синтаксис MASM, там действительно N может быть не КОНСТАНТОЙ, а ячейкой памяти. А результаты вызова api на предыдущих итерациях? Все же я не считаю логичным пренебрегать фактом, что результат вызова API находится в eax - можно привыкнуть. |
|
|
Дата: Мар 15, 2004 11:26:56 · Поправил: q_q S_T_A_S_ При N=0 я не буду даже писать этот цикл Я не имел в виду константу. синтаксис MASM, там действительно ... В чьем синтаксисе не может быть ячейкой? я не считаю логичным пренебрегать фактом ... А на предыдущих итерациях пренебрегать логично? Imho цель вопроса - как организовать цикл в ассемблере. |
|
|
Дата: Мар 15, 2004 13:43:24 q_q Я не имел в виду константу. Логично, хотя это нельзя однозначно сказать исходя из записи. Проблема в том, что IA32 не имеет строго регламентируемого синтаксиса, отсюда и двойственность MASM. Если взять FASM/NASM (думаю SpAsm&ROSAsm, etc - тоже) то там символ N однозначно интерпретируется как метка. (т.е. просто - число) [N] - вот это уже ячейка памяти. Я пытаюсь следовать такому принципу, учитывая например, что Privalov - математик, придерживается строгой логики и не допускает ДВОЯКОСТЕЙ, чего не скажешь об известном производителе HLL компиляторов. В общем-то причина возникшего спора - хороший пример кривости синтаксиса MASM. А на предыдущих итерациях пренебрегать логично? Логично придерживаться определенных правил. Даже если они лишние сейчас, они помогут потом. К тому же, в том примере с WriteConsole EAX вполне логично проверить после цикла. Если это делать внутри - тогда код примет паросто ужасный вид. цель вопроса - как организовать цикл в ассемблере. На ассемблере - существует 28 разных способов.. И по размеру их никакой компилятор оптимизировать не будет. Надо учиться самому. Я не вижу совершенно никакого смысла использовать add esp,4. Да это быстрее, но мы говорим об API call. Причем состояния 2х регистров не определены. IMHO, мы уходим куда-то в бесперспективный флейм. Я очень люблю спорить, но на темы которые приносят полезный результат. Например, такие |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.116 |