Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Пт окт 20, 2017 6:30 am

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 9 сообщений ] 
Автор Сообщение
 Заголовок сообщения: dll.Load и проверка or
СообщениеДобавлено: Ср мар 16, 2016 11:40 pm 
Не в сети
Moderator

Зарегистрирован: Чт апр 08, 2010 8:11 pm
Сообщения: 265
Здравствуйте!

Помогите, не могу понять логику работы команды:

Код:
mov eax,68
mov ebx,11
int 0x40

stdcall dll.Load, @IMPORT
or eax,eax
jnz exit

Выделяем кучу, затем загружаем библиотеку, затем смотрим влезает она в нашу кучу или нет? Правильно?
Если так, то не совсем понимаю логику работы связки or и jnz:

Например:
mov eax,11
mov ebx,2
or eax,ebx
jnz срабатывает

mov eax,2
mov ebx,11
or eax,ebx
jnz срабатывает

В каком случае флаг ZF при or становится 1?
Спасибо!


Вернуться к началу
 Заголовок сообщения: Re: dll.Load и проверка or
СообщениеДобавлено: Чт мар 17, 2016 12:02 am 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3929
popovpa
or eax, eax - проверка на 0. ZF соответственно будет 1.


Вернуться к началу
 Заголовок сообщения: Re: dll.Load и проверка or
СообщениеДобавлено: Чт мар 17, 2016 12:09 am 
Не в сети
Moderator

Зарегистрирован: Чт апр 08, 2010 8:11 pm
Сообщения: 265
В смысле на 0? Значение eax 0? Тогда проверку поидее надо делать после вызова 68 функции? (Просто код не мой) Раз куча не выделилась то и загружать ничего не надо? Или вообще желательно и там и там проверку делать? И тогда вопрос а почему or? test ведь быстрей и меньше? А что возвращает dll.Load?


Вернуться к началу
 Заголовок сообщения: Re: dll.Load и проверка or
СообщениеДобавлено: Чт мар 17, 2016 3:37 am 
Не в сети
Аватара пользователя

Зарегистрирован: Пн ноя 19, 2012 5:22 pm
Сообщения: 439
dll.Load возвращает 1(неудача) или 0(успех). Вот затем и eax на 0 проверялся.

_________________
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!


Вернуться к началу
 Заголовок сообщения: Re: dll.Load и проверка or
СообщениеДобавлено: Чт мар 17, 2016 8:36 am 
Не в сети
Moderator

Зарегистрирован: Чт апр 08, 2010 8:11 pm
Сообщения: 265
Нашёл http://wiki.kolibrios.org/wiki/Libraries вопросы отпали...так положено :)

Почему вместо or нельзя использовать test она ведь быстрей?


Вернуться к началу
 Заголовок сообщения: Re: dll.Load и проверка or
СообщениеДобавлено: Чт мар 17, 2016 10:23 am 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1187
Можно использовать or, and, test, нет никакой разницы вообще.


Вернуться к началу
 Заголовок сообщения: Re: dll.Load и проверка or
СообщениеДобавлено: Чт мар 17, 2016 10:46 am 
Не в сети
Moderator

Зарегистрирован: Чт апр 08, 2010 8:11 pm
Сообщения: 265
test сравнивает и меняет только флаги, a or записывает значение в приёмник...значит test быстрее? Вот я и не могу понять почему везде or, у нас ведь система на ассемблере и мы хотим чтобы она была максимально компактной и быстрой...


Вернуться к началу
 Заголовок сообщения: Re: dll.Load и проверка or
СообщениеДобавлено: Чт мар 17, 2016 2:48 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1187
У современных процессоров с конвейерной архитектурой эффективная скорость выполнения всех команд — 1 такт (кроме умножения и деления).


Вернуться к началу
 Заголовок сообщения: Re: dll.Load и проверка or
СообщениеДобавлено: Чт мар 17, 2016 3:30 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3929
popovpa
У меня подозрение, что не все знают о существовании команды test.
В любом случае test предпочтительней. Она не требует регистра для сохранения результата, а на современный процессорах пара test и coditional jump объединяются в одну микроинструкцию за счёт macro-fusion.
Цитата:
Use TEST when comparing a value in a register with zero. TEST essentially ANDs operands together without writing to a destination register. TEST is preferred over AND because AND produces an extra result register. TEST is better than CMP ..., 0 because the instruction size is smaller.


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 9 сообщений ] 

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB