purebasic.info

PureBasic forum
Текущее время: Пт июн 22, 2018 6:21 pm

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




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Процедура конкатенация
СообщениеДобавлено: Вт сен 02, 2014 10:40 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 570
Благодарил (а): 2 раз.
Поблагодарили: 32 раз.
Пункты репутации: 9
Процедура конкатенации,(Юникод)
Код:
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
 
Global f.s="433333"
Global d.s="15.222"
Procedure conkatenaziy(*s,*h)
!mov dword esi,[p.p_h]
!CMP word[esi],0h
!Jz jjn
!mov dword edi,[p.p_s]
!ghf:
!CMP word[edi],0h
!Jz fgv
!add dword edi,4
!CMP word[edi-2],0h
!jnz ghf
!sub dword edi,2
!fgv:
!mov word ax,[esi]
!mov word[edi],ax
!add dword esi,2
!add dword edi,2
!CMP word[esi],0h
!jnz fgv
!mov word[edi],0h
!jjn:
EndProcedure
MessageRequester("", "Начало теста")
   time = GetTickCount_()
   For q=0 To 40000
f+d
 Next
  t.d = (GetTickCount_() - time)/1000
  MessageRequester("", "Количество  циклов=" + q + #CR$ + "Время теста= " + t)
MessageRequester("", "Начало теста")
   time = GetTickCount_()
   For q=0 To 40000
conkatenaziy(@f,@d)
 Next
  t = (GetTickCount_() - time)/1000
  MessageRequester("", "Количество  циклов=" + q + #CR$ + "Время теста= " + t)
Debug f
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Процедура конкатенация
СообщениеДобавлено: Чт сен 25, 2014 10:33 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 570
Благодарил (а): 2 раз.
Поблагодарили: 32 раз.
Пункты репутации: 9
Возник вопрос .
В конце строк после завершающего 0 есть код 0badf00dh.так вот что он значит(он нужен)? :roll:
Причём когда выделяем память через AllocateMemory то получается что можно использовать на 2байта меньше(юникод)иначе затирается завершающий 0!
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
Global f.s=""
*j=AllocateMemory(2)
;PokeS(*j,"5",#PB_Unicode)
 
Debug PeekA(*j)
Debug PeekA(*j+1)
Debug PeekA(*j+2)
Debug PeekA(*j+3)
Debug PeekA(*j+4)
Debug PeekA(*j+5)
Debug PeekA(*j+6)
Debug PeekA(*j+7)
Debug PeekA(*j+8)
Debug PeekA(*j+9)
Debug PeekA(*j+10)
 
Debug PeekA(@f)
Debug PeekA(@f+1)
Debug PeekA(@f+2)
Debug PeekA(@f+3)
Debug PeekA(@f+4)
Debug PeekA(@f+5)
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Процедура конкатенация
СообщениеДобавлено: Чт сен 25, 2014 11:12 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11187
Благодарил (а): 4 раз.
Поблагодарили: 415 раз.
Зачем выходить за пределы выделенной памяти?

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Процедура конкатенация
СообщениеДобавлено: Чт сен 25, 2014 11:16 pm 
Не в сети
PureBasic Coder
Аватар пользователя

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 70 раз.
Поблагодарили: 81 раз.
Пункты репутации: 24
Может быть это?
http://ru.wikipedia.org/wiki/Hexspeak

_________________
Пурик - лучший язык программирования


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Процедура конкатенация
СообщениеДобавлено: Чт сен 25, 2014 11:27 pm 
Не в сети
профессор

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

Так эта функция и создаёт этот код я вышел чтоб это видно было.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Процедура конкатенация
СообщениеДобавлено: Чт сен 25, 2014 11:40 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11187
Благодарил (а): 4 раз.
Поблагодарили: 415 раз.
Это код за пределами выделенной памяти. Это может быть "мусор" или отладочный код.

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Процедура конкатенация
СообщениеДобавлено: Вс сен 28, 2014 10:28 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 570
Благодарил (а): 2 раз.
Поблагодарили: 32 раз.
Пункты репутации: 9
Да мы выйдем за память что не гуд.
а типа вот так можно :?:
Код:
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
 
Procedure$ OCT4(*s,st$)
  !mov dword edi,[p.v_st$]
  !mov dword esi,[p.p_s]
  !mov word ax,31
  ;;;;;;;;;;;;;
  !BT [esi],ax
  !Jc mbb;Переход, если бит равен 1
  !sub word ax,1
  !BT [esi],ax
  !Jc jjk
  !mov word[edi],30h
  !jmp sss
  !jjk:
 !mov word[edi],31h
  !jmp sss
  !mbb:
 !sub word ax,1
  !BT [esi],ax
  !jc ghj
  !mov word[edi],32h
  !jmp sss
  !ghj:
 !mov word[edi],33h
  !sss:
 !add dword edi,2
  !sub word ax,1
  ;
   !mov dword ecx,10
   !cld
   !ddfh1:
  !BT word[esi],ax
   !Jc m14;Переход, если бит равен 1
   ;
   !sub word ax,1
   !BT word[esi],ax
   !Jc m15
   ;
   !sub word ax,1
   !BT word[esi],ax
   !Jc m17
   ;
   !mov word bx,30h
   !jmp wwwd
   ;
   !m14:
  !sub word ax,1
   !BT word[esi],ax
   !Jc m16
   ;
   !sub word ax,1
   !BT word[esi],ax
   !Jc m18
   ;
   !mov word bx,34h
   !jmp wwwd
   !m15:
  !sub word ax,1
   !BT word[esi],ax
   !Jc m19
   !mov word bx,32h
   !jmp wwwd
   ;
   !m16:
  !sub word ax,1
   !BT word[esi],ax
   !Jc m20
   !mov word bx,36h
   !jmp wwwd
   ;
   !m17:
  !mov word bx,31h
   !jmp wwwd
   ;
   !m18:
  !mov word bx,35h
   !jmp wwwd
   ;
   !m19:
  !mov word bx,33h
   !jmp wwwd
   !m20:
  !mov word bx,37h
   !wwwd:
  !mov word[edi],bx
   !sub word ax,1
   !add edi,2
   !LOOP ddfh1
   !mov word[edi],0h
 ProcedureReturn st$
EndProcedure
 
debug OCT4(?ggg,"         11")
 
 DataSection
  ggg:
 Data.b 7,2,7,7,53,54,55,56,57,58,59
EndDataSection
 



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

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


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

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


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

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