Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: test ????  (Прочитано 6037 раз)
0 Пользователей и 1 Гость смотрят эту тему.
RaptuGava
Гость
« : 29-12-2003 13:13 » 

ХАЙ АЛЛ!:roll:
обяснить мне ктонить следующий кусок кода


call    Какаянить ф-ия
test    eax,eax
jz    кудата

я Непонял  :?: если test выполняет логичесоке умножение при этом ничего неизменяя кромя флагов
нафига это надо если результат постоянно будет один и тотже)
Спасибо заранее !
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #1 : 29-12-2003 14:54 » 

Это равнозначно следующему коду

if(!f())//call  потом test eax,eax
{
 goto error;
}
ф-ция возвращает результат в eax, потом его проверяют.  test eax,eax и есть проверка на ноль. Если eax==0x0, то 0x0 | 0x0 = 0x0 то есть результат сравнения ноль и zf==1, а если eax не ноль, например eax==0xc0b, то 0xc0b | 0xc0b = 0xc0b и zf будет ноль, так как результат операции не ноль.
P.S. Вроде не напутал test записывает 1 в флаг zf если результат ноль.
Записан
Mouse
Молодой специалист

ru
Offline Offline

« Ответ #2 : 29-12-2003 15:17 » 

RaptuGava, проще говоря, "test eax,eax" проверяет, равно ли нулю содержиммое eax. Если eax = 0, zf устанавливается = 1 и совершается переход по jz (Jump if Zero). А флаг zf устанавливается именно test'ом. Иначе, если (eax != 0), то переход не осуществляется.
Короче, если (eax == 0), то прыгаем по jz, иначе jz не выполняется.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines