· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Организация циклов при вызове API

<< . 1 . 2 .

Посл.отвђт Сообщен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, мы уходим куда-то в бесперспективный флейм.
Я очень люблю спорить, но на темы которые приносят полезный результат. Например, такие

<< . 1 . 2 .


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.116