purebasic.info

PureBasic forum
Текущее время: Пн дек 11, 2017 4:38 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Проверка числа на чётность
СообщениеДобавлено: Ср сен 06, 2017 12:54 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 545
Благодарил (а): 2 раз.
Поблагодарили: 30 раз.
Пункты репутации: 9
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
Procedure.i proverka_hetnosti(*mem)
    !BT  dword [esp+4],0
    !JC f  ;нечётное
    !mov dword eax,1
    !retn 4
    !f:
   !xor eax,eax
    !retn 4
EndProcedure
Procedure.i proverka_nehetnosti(*mem)
    !BT  dword [esp+4],0
    !JC ff  ;нечётное
    !xor eax,eax
    !retn 4
    !ff:
   !mov dword eax,1
    !retn 4
EndProcedure
  Debug proverka_hetnosti(80)
  Debug proverka_nehetnosti(81)
 


Что интересно ещё,то что код вроде как реагирует на дробное число до и после его половины типа функцию int()
можно сделать для округления :roll:


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Проверка числа на чётность
СообщениеДобавлено: Ср сен 06, 2017 2:19 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11069
Благодарил (а): 4 раз.
Поблагодарили: 381 раз.
Не проще написать?
Код:
1
2
Debug 1!(80&1)
Debug 81&1


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Проверка числа на чётность
СообщениеДобавлено: Чт сен 07, 2017 12:25 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 545
Благодарил (а): 2 раз.
Поблагодарили: 30 раз.
Пункты репутации: 9
Это так к примеру,а лучше было бы написать макрос типа такого,так как код на выходе куда лучше.
Но пурик похоже не понимает что если директива в квадратных скобках то нужно не тупо переменную [i]а подставить для фасма нужную константу[v_i]
таким образом в макрос наверное придётся записывать сразу константу фасма?
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
Macro if_hetnoe(x)
!BT dword x,0
!JC @f
EndMacro
Macro if_nehetnoe(x)
!BT  dword [x],0
!JNC @f
EndMacro
 
Macro endif_hetnost
!@@:  
EndMacro
 
 
  Global i.i=80
  Global i1.i=81
 
  if_hetnoe([v_i])
  Debug 1
  endif_hetnost
  if_nehetnoe(v_i1)
    Debug 2
  endif_hetnost
 



:roll:


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Проверка числа на чётность
СообщениеДобавлено: Чт сен 07, 2017 8:55 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11069
Благодарил (а): 4 раз.
Поблагодарили: 381 раз.
Сергейчик писал(а):
Но пурик похоже не понимает
То что после ! передается фасму без обработки.
Если нужна обработка, то следует писать немного по другому.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
EnableASM
 
Macro if_hetnoe(x)
  BT x,0
  !JC @f
EndMacro
Macro if_nehetnoe(x)
  BT  x,0
  !JNC @f
EndMacro
 
Macro endif_hetnost
  !@@:  
EndMacro
 
 
Global i.i=80
Global i1.i=81
 
if_hetnoe(i)
Debug 1
endif_hetnost
if_nehetnoe(i1)
Debug 2
endif_hetnost


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Проверка числа на чётность
СообщениеДобавлено: Чт сен 07, 2017 10:25 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 545
Благодарил (а): 2 раз.
Поблагодарили: 30 раз.
Пункты репутации: 9
Пётр писал(а):
Сергейчик писал(а):
Но пурик похоже не понимает
То что после ! передается фасму без обработки.
Если нужна обработка, то следует писать немного по другому.

Я почему то думал что enableasm для masma сделан а для fasma достаточно знака ! :evil:
И наверно тогда вот как нужно.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
 
Macro if_hetnoe(x)
EnableASM  
  BT x,0
  !JC @f
EndMacro
Macro if_nehetnoe(x)
EnableASM
  BT  x,0
  !JNC @f
EndMacro
Macro eseif_hetnoe(x)
!@@:  
BT  x,0
!JC @f
EndMacro
Macro elseif_nehetnoe(x)
!@@:  
BT x,0
!JNC @f
EndMacro
Macro else_hetnost
!@@:
EndMacro
Macro endif_hetnost
!@@:
DisableASM  
EndMacro
 
 
Global i.i=80
Global i1.i=81
 
if_hetnoe(i)
Debug 1
endif_hetnost
if_nehetnoe(i1)
Debug 2
endif_hetnost
 
if_hetnoe(i1)
Debug 1
elseif_nehetnoe(i1)
Debug 2
endif_hetnost
 
if_hetnoe(i1)
Debug 1
elseif_nehetnoe(i)
Debug 2
else_hetnost
Debug 3
endif_hetnost
 



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

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

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


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

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB