Вверх ↑
Этот топик читают: Гость
Ответов: 273
Рейтинг: 29
#16: 2009-05-30 17:00:55 ЛС | профиль | цитата
Спасибо всем. Последние две схемы около 270кб/сек выдают, вдесятеро быстрее моей(но в них используется MemoriStream, так что он тоже свою долю вносит)! Табличная хиасмовская реализация за 85сек шифрует 18мб, ассемблерный инвертор тратит 65сек, хиасмовский инвертор 450сек. Раз ассемблерный инвертор быстрее хиасмовского в 7 раз, то ассемблерный табличный инвертор теоретически может во столько же раз быстрее хиасмовского работать, а это около 1500кб/сек!
Пока хватит и 270кб/сек, попозже может и ассемблерный допишу, т.к. по коду вроде ассемблер не так уж и сложен.

ЗЫ сам никогда таблицы не заполнял вручную, всегда генераторы писал
карма: 0

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#17: 2009-05-30 17:28:27 ЛС | профиль | цитата
tomas писал(а):
то ассемблерный табличный инвертор теоретически может во столько же раз быстрее хиасмовского работать

Ну, это -- далеко не факт. Должен работать быстрее, но вряд ли в 7 раз
карма: 22

0
Ответов: 273
Рейтинг: 29
#18: 2009-05-30 17:47:35 ЛС | профиль | цитата
Не факт, но медленнее хиасмовского работать вряд-ли будет Хотя... Тут все от автора кода зависит... Контроллеры на 1Мгц еще не тормозили Хотя ассемблер компактен, так посмотришь на размер алгоритма, а потом на размер бинарника по нему.... Но сам еще чистый ассемблер не учил. Хотя есть к чему стремится, например 15кб microjoiner - шедевр по сравнению с моими монстрами, которые весят больше, а могут меньше.
карма: 0

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#19: 2009-05-30 17:54:22 ЛС | профиль | цитата
tomas писал(а):
но медленнее хиасмовского работать вряд-ли будет

Про медленнее никто и не говорил
------------ Дoбавленo в 21.10:
Да, кстати. Вот ассемблерный вариант табличного реверс-алгоритма. Можно попробовать, но я не увидел большого выигрыша по сравнению с нетабличным алгоритмом


Add(InlineCode,7056652,511,602)
{
@Hint=#30:Reverse BYTE (table algorithm)|
WorkPoints=#7:doInput|
EventPoints=#8:onResult|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|24: onResult:THI_Event;|51: procedure doInput(var Data:TData; Index:word);|5: end;|0:|14:implementation|0:|30:procedure THiAsmClass.doInput;|3:var|17: A, B: Cardinal;|5:begin|29: A := Byte(ToInteger(Data));|3:asm|17: MOV ECX, A|27: LEA EDX, @ReverseTbl|31: MOV EAX, [EDX + ECX * 4]|17: MOV B, EAX|16: JMP @Done|12:@ReverseTbl:|92: DD $00000000, $00000080, $00000040, $000000C0, $00000020, $000000A0, $00000060, $000000E0 |92: DD $00000010, $00000090, $00000050, $000000D0, $00000030, $000000B0, $00000070, $000000F0 |92: DD $00000008, $00000088, $00000048, $000000C8, $00000028, $000000A8, $00000068, $000000E8 |92: DD $00000018, $00000098, $00000058, $000000D8, $00000038, $000000B8, $00000078, $000000F8 |92: DD $00000004, $00000084, $00000044, $000000C4, $00000024, $000000A4, $00000064, $000000E4 |92: DD $00000014, $00000094, $00000054, $000000D4, $00000034, $000000B4, $00000074, $000000F4 |92: DD $0000000C, $0000008C, $0000004C, $000000CC, $0000002C, $000000AC, $0000006C, $000000EC |92: DD $0000001C, $0000009C, $0000005C, $000000DC, $0000003C, $000000BC, $0000007C, $000000FC |92: DD $00000002, $00000082, $00000042, $000000C2, $00000022, $000000A2, $00000062, $000000E2 |92: DD $00000012, $00000092, $00000052, $000000D2, $00000032, $000000B2, $00000072, $000000F2 |92: DD $0000000A, $0000008A, $0000004A, $000000CA, $0000002A, $000000AA, $0000006A, $000000EA |92: DD $0000001A, $0000009A, $0000005A, $000000DA, $0000003A, $000000BA, $0000007A, $000000FA |92: DD $00000006, $00000086, $00000046, $000000C6, $00000026, $000000A6, $00000066, $000000E6 |92: DD $00000016, $00000096, $00000056, $000000D6, $00000036, $000000B6, $00000076, $000000F6 |92: DD $0000000E, $0000008E, $0000004E, $000000CE, $0000002E, $000000AE, $0000006E, $000000EE |92: DD $0000001E, $0000009E, $0000005E, $000000DE, $0000003E, $000000BE, $0000007E, $000000FE |92: DD $00000001, $00000081, $00000041, $000000C1, $00000021, $000000A1, $00000061, $000000E1 |92: DD $00000011, $00000091, $00000051, $000000D1, $00000031, $000000B1, $00000071, $000000F1 |92: DD $00000009, $00000089, $00000049, $000000C9, $00000029, $000000A9, $00000069, $000000E9 |92: DD $00000019, $00000099, $00000059, $000000D9, $00000039, $000000B9, $00000079, $000000F9 |92: DD $00000005, $00000085, $00000045, $000000C5, $00000025, $000000A5, $00000065, $000000E5 |92: DD $00000015, $00000095, $00000055, $000000D5, $00000035, $000000B5, $00000075, $000000F5 |92: DD $0000000D, $0000008D, $0000004D, $000000CD, $0000002D, $000000AD, $0000006D, $000000ED |92: DD $0000001D, $0000009D, $0000005D, $000000DD, $0000003D, $000000BD, $0000007D, $000000FD |92: DD $00000003, $00000083, $00000043, $000000C3, $00000023, $000000A3, $00000063, $000000E3 |92: DD $00000013, $00000093, $00000053, $000000D3, $00000033, $000000B3, $00000073, $000000F3 |92: DD $0000000B, $0000008B, $0000004B, $000000CB, $0000002B, $000000AB, $0000006B, $000000EB |92: DD $0000001B, $0000009B, $0000005B, $000000DB, $0000003B, $000000BB, $0000007B, $000000FB |92: DD $00000007, $00000087, $00000047, $000000C7, $00000027, $000000A7, $00000067, $000000E7 |92: DD $00000017, $00000097, $00000057, $000000D7, $00000037, $000000B7, $00000077, $000000F7 |92: DD $0000000F, $0000008F, $0000004F, $000000CF, $0000002F, $000000AF, $0000006F, $000000EF |92: DD $0000001F, $0000009F, $0000005F, $000000DF, $0000003F, $000000BF, $0000007F, $000000FF |8: @Done:|6:end; |28: _hi_onEvent(onResult, B);|4:end;|0:|4:end.|
}

карма: 22

0
Ответов: 273
Рейтинг: 29
#20: 2009-05-30 23:07:53 ЛС | профиль | цитата
Не хочет прогресс обновлять, пока все не закодирует...

А ассемблерный табличный вариант по скорости такой же как и нетабличный... Может алгоритм неоптимальный...

Make(delphi)ver(4.02 build 178)
Add(MainForm,78857,357,427)
{
Left=21
Top=105
Width=115
Height=60
Color=0
Caption="MyCriptor"
BorderStyle=4
Icon=[ZIPBE08000078DAED944148D3511CC7BF73ADB9D65ABAE65A6BCD35D75CD3CCCCCC6C4D5D6BAE656BBD96AD656BD9AA55AB0C3C78F0E0C183070F1E3C78101111131111111111111111111111111111111111111111917F6FC4720EFE42A72E7DFFFCDFE17D3EBCDFEF3DFEFF0770E89398083AC6E2672C90002099BE740AB9F83D7F5C0E0E0EB0B7B7879D9D1D6C6D6D616363036B6B6B585959C1D2D212161616303737879999194C4D4D61626202636363181919C1D0D010060606C0E3F1B0BFBF8FDDDD5D6C6F6F63737313EBEBEB585D5DC5F2F232161717313F3F8FD9D9594C4F4F63727212E3E3E3181D1DC5F0F030060707D1DFDF8FDEDE5E747777A3B3B313EDEDED686D6D457373331A1B1B919797070E8783BEBE3EF4F4F4A0ABAB0B1D1D1D686B6B434B4B0B9A9A9AD0D0D080FAFA7AD4D5D5A1B6B616353535A8AEAE465555152A2B2BE1F57A61341A515151018FC783ECEC6C949797A3A8A808999999282B2B032104E9E9E9282D2D85C3E1406A6A2A82C120EC763BF47A3D028100AC562BB45A2DFC7E3FCC6633D46A353D49063E9F0F2693094AA512C5C5C5C8C9C9815C2E87DBED46565616A452295C2E1732323210171707A7D389B4B434884422141616C26030402010C066B341A7D3C162B140A3D140A55241A150402693412291402C1643281482CFE783CBE5A2A4A404FFF33F7F138661E08F4F39D6E17C341873CD0F6C8F1C4F9FBB5F79DF46FBCCD91F774DF99602FB63A7EB85E7B5EFDD87C0A7CF5F825FBF7D2FFDCDC5FA9C7B79F7AD0F0B9F3C2B7A59FCA6E47DC482217E26F90EAB10E2225D36AB404B30A7AFDC6615BE532ED466B10ADF283F95748B55F84AB94093C92A04298FBD7C9355F842395F9D7128D09B8544089F293F9978E38F40C87D6BA4F089729E2A3D2C10122A410E4B0452C09CB8743D2C1012D5C38778305C655A582024AAC9777E303117AF850542A276E17B0B86A3480D0B84446DF3B5977E4317E2C20221A15D9043C1F38A72F9D9234264932FDC949F17470A477A703DA75C762642387AD4CEA79427885885C70ECAA5A75905FB23CACF095985021BE59253AC82E541E81F12B00AF9E6108F65154CB921CE6715EE1A439C46724E9A203B2FBFA0B8A8BCA44A545FD62469AFE892F5570D29CC917062B827782723168C678E0D27E65FDF41BF0088F0CF1E]
DragForm=0
SavePosName="MyCriptor"
Point(Close)
}
Add(DoData,72744,461,294)
{
link(onEventData,62742:doCopyFromStream,[])
link(Data,14911304:Data2,[(467,199)(439,199)])
}
Add(MemoryStream,2940,280,168)
{
Point(doPosition)
link(SrcStream,5717:Stream,[])
}
Add(FileStream,5717,280,112)
{
link(onLoad,43116:doEvent1,[(318,118)(318,151)(145,151)(145,209)])
}
Add(For,58053,280,287)
{
Start=1
link(onEvent,60844:doGet,[(333,293)(333,237)])
link(onStop,72744:doData,[])
link(End,3384174:Data1,[])
}
Add(DataToFile,83748,426,224)
{
link(Stream,14911304:Data1,[])
}
Add(Hub,43116,154,203)
{
OutCount=8
link(onEvent1,2940:doClear,[(225,209)(225,181)])
link(onEvent2,46227:doClear,[(230,216)(230,160)])
link(onEvent3,2940:doCopy,[(220,223)(220,174)])
link(onEvent4,5717:doClose,[(215,230)(215,125)])
link(onEvent5,34245:doData,[])
link(onEvent6,13577346:doStart,[(200,244)(200,426)])
link(onEvent7,58053:doFor,[(212,251)(212,293)])
link(onEvent8,13577346:doStop,[(194,258)(194,433)])
}
Add(DataToFile,60844,342,224)
{
link(onGet,7325296:doInput,[])
link(Stream,2940:Stream,[(348,209)(286,209)])
}
Add(MemoryStream,46227,328,147)
{
}
Add(FileStream,62742,510,280)
{
Mode=1
AutoCopy=0
Point(doCopyFromStream)
link(FileName,13229149:Value,[])
}
Add(DoData,34245,217,231)
{
Data=Integer(0)
link(onEventData,2940:doPosition,[(265,237)(265,188)])
}
Add(InlineCode,7325296,385,224)
{
@Hint=#12:Reverse BYTE|
WorkPoints=#7:doInput|
EventPoints=#8:onResult|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|24: onResult:THI_Event;|51: procedure doInput(var Data:TData; Index:word);|5: end;|0:|14:implementation|0:|30:procedure THiAsmClass.doInput;|3:var|17: A, B: Cardinal;|5:begin|29: A := Byte(ToInteger(Data));|3:asm|16: MOV B, 0;|16: SHL A, 24|18: MOV ECX, 8;|6:@@loo:|16: RCL A, 1;|16: RCR B, 1;|16: LOOP @@loo|16: SHR B, 24|6:end; |28: _hi_onEvent(onResult, B);|4:end;|0:|4:end.|
link(onResult,83748:doPut,[])
}
Add(DropFile,15956738,119,98)
{
link(onDropFile,14889583:doEvent1,[])
}
Add(TimeCounter,13577346,210,420)
{
link(onStop,2764373:doOperation,[])
}
Add(MultiElementEx,4450772,329,98)
{
@Hint=#31:Проверка и переименование файла|
link(onEvent1,13229149:doValue,[])
}
BEGIN_SDK
Add(EditMultiEx,6163439,21,21)
{
WorkCount=#37:doPart=Полный путь проверяемого файла|
EventCount=#24:onEvent1=Новое имя файла|
Width=293
Height=158
link(doPart,3687376:doValue,[(33,27)(33,62)])
}
Add(FilePart,11307332,84,56)
{
link(onPath,6814599:doValue,[(138,62)(138,34)])
link(onName,1966325:doValue,[(229,69)(229,34)])
link(onExt,10883205:doCompare,[(124,76)(124,132)])
}
Add(StrCat,14097887,210,91)
{
link(onStrCat,10216141:doEvent1,[(250,97)(250,132)])
link(Str1,6814599:Value,[(216,79)(195,79)])
link(Str2,1966325:Value,[(223,79)(244,79)])
}
Add(Memory,6814599,189,28)
{
@Hint=#4:Путь|
}
Add(If_else,10883205,147,126)
{
Op2=String(crpt)
link(onTrue,14097887:doStrCat,[(187,132)(187,97)])
link(onFalse,10123228:doStrCat,[])
}
Add(Memory,1966325,238,28)
{
@Hint=#3:Имя|
}
Add(Hub,10216141,258,126)
{
InCount=2
OutCount=1
link(onEvent1,6163439:onEvent1,[(301,132)(301,27)])
}
Add(StrCat,10123228,196,133)
{
Str2=".crpt"
link(onStrCat,10216141:doEvent2,[])
link(Str1,3687376:Value,[(202,115)(48,115)])
}
Add(Memory,3687376,42,56)
{
link(onData,11307332:doPart,[])
}
END_SDK
Add(Math,2764373,259,427)
{
OpType=2
Op2=0.001
link(onResult,6855408:doStrCat,[])
}
Add(StrCat,6855408,308,427)
{
Str2=" sec"
link(onStrCat,78857:doCaption,[])
}
Add(Hub,14889583,168,98)
{
OutCount=4
link(onEvent1,12527712:doData,[(206,104)(206,384)])
link(onEvent2,4450772:doPart,[(264,111)(264,104)])
link(onEvent3,5717:doOpen,[])
link(onEvent4,8694835:doDelete,[(211,125)(211,90)])
}
Add(Memory,13229149,510,98)
{
}
Add(GetData,14911304,426,154)
{
link(Data,46227:Stream,[(432,142)(380,142)(380,190)(334,190)])
}
Add(FileTools,8694835,224,70)
{
DelToRecycle=1
link(onEnd,62742:doClose,[(501,76)(501,293)])
}
Add(Version,9860979,154,266)
{
Version="0.2"
Description="MyCriptor"
InternalName="MyCriptor"
E-mail="hiasm.com"
}
Add(StyleXP,12894195,154,301)
{
}
Add(Application,617425,448,378)
{
Info="MyCriptor"
Wait=1
}
Add(GProgressBar,12058691,448,336)
{
Top=30
Width=120
Height=10
Color=0
LightProgress=65280
}
Add(Math,15428893,308,336)
{
OpType=3
link(onResult,4687125:doOperation,[])
link(Op1,58053:Position,[(314,328)(286,328)])
link(Op2,3384174:Data2,[(321,270)(300,270)])
}
Add(Math,4687125,350,336)
{
OpType=2
Op2=100
ResultType=0
link(onResult,398682:doEvent1,[])
}
Add(GetData,3384174,287,224)
{
link(Data,2940:Size,[])
}
Add(Timer,11335752,259,336)
{
Interval=200
link(onTimer,15428893:doOperation,[])
}
Add(Hub,398682,399,336)
{
InCount=2
link(onEvent1,12058691:doPosition,[])
link(onEvent2,617425:doProcessMessages,[(439,349)(439,384)])
}
Add(DoData,12527712,350,378)
{
Data=Integer(0)
link(onEventData,398682:doEvent2,[(390,384)(390,349)])
}
Add(InlineCode,7056652,777,441)
{
@Hint=#30:Reverse BYTE (table algorithm)|
WorkPoints=#7:doInput|
EventPoints=#8:onResult|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|24: onResult:THI_Event;|51: procedure doInput(var Data:TData; Index:word);|5: end;|0:|14:implementation|0:|30:procedure THiAsmClass.doInput;|3:var|17: A, B: Cardinal;|5:begin|29: A := Byte(ToInteger(Data));|3:asm|17: MOV ECX, A|27: LEA EDX, @ReverseTbl|31: MOV EAX, [EDX + ECX * 4]|17: MOV B, EAX|16: JMP @Done|12:@ReverseTbl:|92: DD $00000000, $00000080, $00000040, $000000C0, $00000020, $000000A0, $00000060, $000000E0 |92: DD $00000010, $00000090, $00000050, $000000D0, $00000030, $000000B0, $00000070, $000000F0 |92: DD $00000008, $00000088, $00000048, $000000C8, $00000028, $000000A8, $00000068, $000000E8 |92: DD $00000018, $00000098, $00000058, $000000D8, $00000038, $000000B8, $00000078, $000000F8 |92: DD $00000004, $00000084, $00000044, $000000C4, $00000024, $000000A4, $00000064, $000000E4 |92: DD $00000014, $00000094, $00000054, $000000D4, $00000034, $000000B4, $00000074, $000000F4 |92: DD $0000000C, $0000008C, $0000004C, $000000CC, $0000002C, $000000AC, $0000006C, $000000EC |92: DD $0000001C, $0000009C, $0000005C, $000000DC, $0000003C, $000000BC, $0000007C, $000000FC |92: DD $00000002, $00000082, $00000042, $000000C2, $00000022, $000000A2, $00000062, $000000E2 |92: DD $00000012, $00000092, $00000052, $000000D2, $00000032, $000000B2, $00000072, $000000F2 |92: DD $0000000A, $0000008A, $0000004A, $000000CA, $0000002A, $000000AA, $0000006A, $000000EA |92: DD $0000001A, $0000009A, $0000005A, $000000DA, $0000003A, $000000BA, $0000007A, $000000FA |92: DD $00000006, $00000086, $00000046, $000000C6, $00000026, $000000A6, $00000066, $000000E6 |92: DD $00000016, $00000096, $00000056, $000000D6, $00000036, $000000B6, $00000076, $000000F6 |92: DD $0000000E, $0000008E, $0000004E, $000000CE, $0000002E, $000000AE, $0000006E, $000000EE |92: DD $0000001E, $0000009E, $0000005E, $000000DE, $0000003E, $000000BE, $0000007E, $000000FE |92: DD $00000001, $00000081, $00000041, $000000C1, $00000021, $000000A1, $00000061, $000000E1 |92: DD $00000011, $00000091, $00000051, $000000D1, $00000031, $000000B1, $00000071, $000000F1 |92: DD $00000009, $00000089, $00000049, $000000C9, $00000029, $000000A9, $00000069, $000000E9 |92: DD $00000019, $00000099, $00000059, $000000D9, $00000039, $000000B9, $00000079, $000000F9 |92: DD $00000005, $00000085, $00000045, $000000C5, $00000025, $000000A5, $00000065, $000000E5 |92: DD $00000015, $00000095, $00000055, $000000D5, $00000035, $000000B5, $00000075, $000000F5 |92: DD $0000000D, $0000008D, $0000004D, $000000CD, $0000002D, $000000AD, $0000006D, $000000ED |92: DD $0000001D, $0000009D, $0000005D, $000000DD, $0000003D, $000000BD, $0000007D, $000000FD |92: DD $00000003, $00000083, $00000043, $000000C3, $00000023, $000000A3, $00000063, $000000E3 |92: DD $00000013, $00000093, $00000053, $000000D3, $00000033, $000000B3, $00000073, $000000F3 |92: DD $0000000B, $0000008B, $0000004B, $000000CB, $0000002B, $000000AB, $0000006B, $000000EB |92: DD $0000001B, $0000009B, $0000005B, $000000DB, $0000003B, $000000BB, $0000007B, $000000FB |92: DD $00000007, $00000087, $00000047, $000000C7, $00000027, $000000A7, $00000067, $000000E7 |92: DD $00000017, $00000097, $00000057, $000000D7, $00000037, $000000B7, $00000077, $000000F7 |92: DD $0000000F, $0000008F, $0000004F, $000000CF, $0000002F, $000000AF, $0000006F, $000000EF |92: DD $0000001F, $0000009F, $0000005F, $000000DF, $0000003F, $000000BF, $0000007F, $000000FF |8: @Done:|6:end; |28: _hi_onEvent(onResult, B);|4:end;|0:|4:end.|
}
Add(MultiElementEx,16246726,777,546)
{
@Hint=#8:Инвертор|
}
BEGIN_SDK
Add(EditMultiEx,4802494,21,21)
{
WorkCount=#24:doCrypt=Инвертирует байт|
EventCount=#75:onNumber=Событие происходит после инвертирования байта и выдает его в поток|
Width=244
Height=396
link(doCrypt,6521553:doEvent1,[(33,27)(33,279)])
}
Add(Memory,728938,189,196)
{
}
Add(Memory,6993452,196,238)
{
}
Add(IntToBits,14517467,105,308)
{
Data_0=Integer(1)
Data_1=Integer(0)
link(onBit1,4657016:doValue,[(149,314)(149,34)])
link(onBit2,16247303:doValue,[(151,321)(151,76)])
link(onBit3,16738823:doValue,[(153,328)(153,118)])
link(onBit4,2875915:doValue,[(155,335)(155,160)])
link(onBit5,728938:doValue,[(157,342)(157,202)])
link(onBit6,6993452:doValue,[(159,349)(159,244)])
link(onBit7,3088944:doValue,[(161,356)(161,286)])
link(onBit8,15086153:doValue,[(163,363)(163,328)])
}
Add(BitsToInt,618167,161,371)
{
Count=8
link(onNumber,4802494:onNumber,[(251,377)(251,27)])
link(Bit1,4657016:Value,[])
link(Bit2,16247303:Value,[])
link(Bit3,16738823:Value,[])
link(Bit4,2875915:Value,[])
link(Bit5,728938:Value,[])
link(Bit6,6993452:Value,[])
link(Bit7,3088944:Value,[])
link(Bit8,15086153:Value,[])
}
Add(Memory,15086153,210,322)
{
}
Add(Memory,4657016,161,28)
{
}
Add(Memory,16247303,168,70)
{
}
Add(Memory,16738823,175,112)
{
}
Add(Memory,2875915,182,154)
{
}
Add(Memory,3088944,203,280)
{
}
Add(Hub,6521553,42,273)
{
link(onEvent1,14517467:doBitsRev,[(90,279)(90,321)])
link(onEvent2,618167:doNumber,[(84,286)(84,377)])
}
END_SDK
Add(MultiElementEx,7661291,777,511)
{
@Hint=#15:Инвертор (табл)|
}
BEGIN_SDK
Add(EditMultiEx,4802494,21,21)
{
WorkCount=#24:doCrypt=Инвертирует байт|
EventCount=#75:onNumber=Событие происходит после инвертирования байта и выдает его в поток|
Width=76
Height=102
link(doCrypt,4970074:doRead,[(31,27)(31,83)])
}
Add(IntegerArray,13904064,42,28)
{
IntArray=['0'=0,'1'=128,'2'=64,'3'=192,'4'=32,'5'=160,'6'=96,'7'=224,'8'=16,'9'=144,'10'=80,'11'=208,'12'=48,'13'=176,'14'=112,'15'=240,'16'=8,'17'=136,'18'=72,'19'=200,'20'=40,'21'=168,'22'=104,'23'=232,'24'=24,'25'=152,'26'=88,'27'=216,'28'=56,'29'=184,'30'=120,'31'=248,'32'=4,'33'=132,'34'=68,'35'=196,'36'=36,'37'=164,'38'=100,'39'=228,'40'=20,'41'=148,'42'=84,'43'=212,'44'=52,'45'=180,'46'=116,'47'=244,'48'=12,'49'=140,'50'=76,'51'=204,'52'=44,'53'=172,'54'=108,'55'=236,'56'=28,'57'=156,'58'=92,'59'=220,'60'=60,'61'=188,'62'=124,'63'=252,'64'=2,'65'=130,'66'=66,'67'=194,'68'=34,'69'=162,'70'=98,'71'=226,'72'=18,'73'=146,'74'=82,'75'=210,'76'=50,'77'=178,'78'=114,'79'=242,'80'=10,'81'=138,'82'=74,'83'=202,'84'=42,'85'=170,'86'=106,'87'=234,'88'=26,'89'=154,'90'=90,'91'=218,'92'=58,'93'=186,'94'=122,'95'=250,'96'=6,'97'=134,'98'=70,'99'=198,'100'=38,'101'=166,'102'=102,'103'=230,'104'=22,'105'=150,'106'=86,'107'=214,'108'=54,'109'=182,'110'=118,'111'=246,'112'=14,'113'=142,'114'=78,'115'=206,'116'=46,'117'=174,'118'=110,'119'=238,'120'=30,'121'=158,'122'=94,'123'=222,'124'=62,'125'=190,'126'=126,'127'=254,'128'=1,'129'=129,'130'=65,'131'=193,'132'=33,'133'=161,'134'=97,'135'=225,'136'=17,'137'=145,'138'=81,'139'=209,'140'=49,'141'=177,'142'=113,'143'=241,'144'=9,'145'=137,'146'=73,'147'=201,'148'=41,'149'=169,'150'=105,'151'=233,'152'=25,'153'=153,'154'=89,'155'=217,'156'=57,'157'=185,'158'=121,'159'=249,'160'=5,'161'=133,'162'=69,'163'=197,'164'=37,'165'=165,'166'=101,'167'=229,'168'=21,'169'=149,'170'=85,'171'=213,'172'=53,'173'=181,'174'=117,'175'=245,'176'=13,'177'=141,'178'=77,'179'=205,'180'=45,'181'=173,'182'=109,'183'=237,'184'=29,'185'=157,'186'=93,'187'=221,'188'=61,'189'=189,'190'=125,'191'=253,'192'=3,'193'=131,'194'=67,'195'=195,'196'=35,'197'=163,'198'=99,'199'=227,'200'=19,'201'=147,'202'=83,'203'=211,'204'=51,'205'=179,'206'=115,'207'=243,'208'=11,'209'=139,'210'=75,'211'=203,'212'=43,'213'=171,'214'=107,'215'=235,'216'=27,'217'=155,'218'=91,'219'=219,'220'=59,'221'=187,'222'=123,'223'=251,'224'=7,'225'=135,'226'=71,'227'=199,'228'=39,'229'=167,'230'=103,'231'=231,'232'=23,'233'=151,'234'=87,'235'=215,'236'=55,'237'=183,'238'=119,'239'=247,'240'=15,'241'=143,'242'=79,'243'=207,'244'=47,'245'=175,'246'=111,'247'=239,'248'=31,'249'=159,'250'=95,'251'=223,'252'=63,'253'=191,'254'=127,'255'=255]
}
Add(ArrayRW,4970074,42,77)
{
link(onRead,4802494:onNumber,[(85,83)(85,27)])
link(Array,13904064:Array,[])
}
END_SDK
карма: 0

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#21: 2009-05-30 23:30:49 ЛС | профиль | цитата
tomas писал(а):
Может алгоритм неоптимальный...


Да шо там того алгоритма, выбрать слово из таблицы по смещению. Входные и выходные присвоения в обоих случаях одинаковые, так что, мы видим разницу быстродействия натив кода asm.
карма: 22

0
Ответов: 273
Рейтинг: 29
#22: 2009-05-31 00:24:43 ЛС | профиль | цитата
Ну если оптимальный... Все-равно странно. Winrar быстрее работает, хотя по идее должен медленнее быть. Хотя нет, походу и winrar с той же скоростью работает, значит он тоже табличным методом работает - по заранее рассчитанным таблицам.
карма: 0

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#23: 2009-05-31 00:35:39 ЛС | профиль | цитата
Вот еще попробуй табличный на Delphi. Из серии -- проще не придумаешь


Add(InlineCode,2281793,511,637)
{
@Hint=#30:Reverse BYTE (table algorithm)|
WorkPoints=#7:doInput|
EventPoints=#8:onResult|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|5:const|46: ReverseTable: array[0..255] of Cardinal = (|92: $00000000, $00000080, $00000040, $000000C0, $00000020, $000000A0, $00000060, $000000E0, |92: $00000010, $00000090, $00000050, $000000D0, $00000030, $000000B0, $00000070, $000000F0, |92: $00000008, $00000088, $00000048, $000000C8, $00000028, $000000A8, $00000068, $000000E8, |92: $00000018, $00000098, $00000058, $000000D8, $00000038, $000000B8, $00000078, $000000F8, |92: $00000004, $00000084, $00000044, $000000C4, $00000024, $000000A4, $00000064, $000000E4, |92: $00000014, $00000094, $00000054, $000000D4, $00000034, $000000B4, $00000074, $000000F4, |92: $0000000C, $0000008C, $0000004C, $000000CC, $0000002C, $000000AC, $0000006C, $000000EC, |92: $0000001C, $0000009C, $0000005C, $000000DC, $0000003C, $000000BC, $0000007C, $000000FC, |92: $00000002, $00000082, $00000042, $000000C2, $00000022, $000000A2, $00000062, $000000E2, |92: $00000012, $00000092, $00000052, $000000D2, $00000032, $000000B2, $00000072, $000000F2, |92: $0000000A, $0000008A, $0000004A, $000000CA, $0000002A, $000000AA, $0000006A, $000000EA, |92: $0000001A, $0000009A, $0000005A, $000000DA, $0000003A, $000000BA, $0000007A, $000000FA, |92: $00000006, $00000086, $00000046, $000000C6, $00000026, $000000A6, $00000066, $000000E6, |92: $00000016, $00000096, $00000056, $000000D6, $00000036, $000000B6, $00000076, $000000F6, |92: $0000000E, $0000008E, $0000004E, $000000CE, $0000002E, $000000AE, $0000006E, $000000EE, |92: $0000001E, $0000009E, $0000005E, $000000DE, $0000003E, $000000BE, $0000007E, $000000FE, |92: $00000001, $00000081, $00000041, $000000C1, $00000021, $000000A1, $00000061, $000000E1, |92: $00000011, $00000091, $00000051, $000000D1, $00000031, $000000B1, $00000071, $000000F1, |92: $00000009, $00000089, $00000049, $000000C9, $00000029, $000000A9, $00000069, $000000E9, |92: $00000019, $00000099, $00000059, $000000D9, $00000039, $000000B9, $00000079, $000000F9, |92: $00000005, $00000085, $00000045, $000000C5, $00000025, $000000A5, $00000065, $000000E5, |92: $00000015, $00000095, $00000055, $000000D5, $00000035, $000000B5, $00000075, $000000F5, |92: $0000000D, $0000008D, $0000004D, $000000CD, $0000002D, $000000AD, $0000006D, $000000ED, |92: $0000001D, $0000009D, $0000005D, $000000DD, $0000003D, $000000BD, $0000007D, $000000FD, |92: $00000003, $00000083, $00000043, $000000C3, $00000023, $000000A3, $00000063, $000000E3, |92: $00000013, $00000093, $00000053, $000000D3, $00000033, $000000B3, $00000073, $000000F3, |92: $0000000B, $0000008B, $0000004B, $000000CB, $0000002B, $000000AB, $0000006B, $000000EB, |92: $0000001B, $0000009B, $0000005B, $000000DB, $0000003B, $000000BB, $0000007B, $000000FB, |92: $00000007, $00000087, $00000047, $000000C7, $00000027, $000000A7, $00000067, $000000E7, |92: $00000017, $00000097, $00000057, $000000D7, $00000037, $000000B7, $00000077, $000000F7, |92: $0000000F, $0000008F, $0000004F, $000000CF, $0000002F, $000000AF, $0000006F, $000000EF, |94: $0000001F, $0000009F, $0000005F, $000000DF, $0000003F, $000000BF, $0000007F, $000000FF ); |2: |0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|24: onResult:THI_Event;|51: procedure doInput(var Data:TData; Index:word);|5: end;|0:|14:implementation|0:|30:procedure THiAsmClass.doInput;|5:begin|55: _hi_onEvent(onResult, ReverseTable[ToInteger(Data)]);|4:end;|0:|4:end.|
}


tomas писал(а):
Winrar быстрее работает

Не забывай остальные линковочные схемные преобразования. По-хорошему, надо писать на Delphi все, что находится в цикле а не один модуль, врезанный в цикл
карма: 22

0
Ответов: 273
Рейтинг: 29
#24: 2009-05-31 00:53:06 ЛС | профиль | цитата
Ну забыть я их не смогу - тупо не знаю
Ну а новый алгоритм по скорости равен предыдущему. Но он самый быстрый - один байт на цикл(там просто извлечение из массива, никаких вычислений). Дальше некуда оптимизировать. Хотя да, если создать массив один раз, только в начале кодирования, а не на каждый байт по созданию массива, то может че и выйдет. Хотя при компиляции раз массив константа он его только один раз запишет, а вызывать будет многократно, тогда разницы не будет.
Хотя и так сойдет, тем более, что щас скорость обработки в десятеро превышает начальную, нормальная оптимизация

Лучше помоги прогресс прорисовать - я не смог, хотя использовал вызов перерисовки по таймеру.
карма: 0

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#25: 2009-05-31 01:37:53 ЛС | профиль | цитата
tomas писал(а):
Хотя да, если создать массив один раз

Так он и так один раз создается, он же не динамический, а константа.
tomas писал(а):
нормальная оптимизация

Ну не думаю, что это предел. Есть еще FileMaping, но там с размером проблема, так быстро на IC не напишишь.

Насчет прогресса, то попробуй вот так

карма: 22

0
файлы: 1project_crypt_xxx.sha [15.5KB] [213]
Ответов: 273
Рейтинг: 29
#26: 2009-06-01 22:20:51 ЛС | профиль | цитата
Спасибо, работает. Правда после некоторых модификаций глючит: файл забудет удалить и создать новый. Но это наверное я плохо понимаю как работает второй поток, ну в принципе это не важно, легко исправляется, главное теперь все работает...

FileMapping? Помню, как-же, только я думаю, что в хиасме его нет, MemoriStream по моему просто файл в память копирует, но что там, что там работа идет с памятью, так что вряд ли сильно по скорости отличатся будут. По хорошему конечно весь цикл на дельфи написать надо, да только не нужно это - прога для себя, особо убиваться ради 5% прироста скорости не нужно.

Короче всем спасибо, end.
карма: 0

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#27: 2009-06-01 22:56:29 ЛС | профиль | цитата
tomas писал(а):
Помню, как-же, только я думаю, что в хиасме его нет

Пока нет
карма: 22

0
Ответов: 273
Рейтинг: 29
#28: 2009-06-01 23:08:22 ЛС | профиль | цитата
Вот что получилось. Оказывается, глюки были из-за остановки уже остановленного потока. С глюками разобрался, схема работает. Перед компиляцией желательно удалить из схемы неиспользуемые блоки справа(или вырезать, скомпилировать, вставить), тогда размер программы уменьшится килобайт на 10(без сжатия). Теперь буду заставлять принимать сразу несколько файлов...
Add(MainForm,78857,357,427){
Left=21
Top=105
Width=115
Height=60
Color=0
Caption="MyCriptor"
BorderStyle=4
Icon=[ZIPBE08000078DAED944148D3511CC7BF73ADB9D65ABAE65A6BCD35D75CD3CCCCCC6C4D5D6BAE656BBD96AD656BD9AA55AB0C3C78F0E0C183070F1E3C78101111131111111111111111111111111111111111111111917F6FC4720EFE42A72E7DFFFCDFE17D3EBCDFEF3DFEFF0770E89398083AC6E2672C90002099BE740AB9F83D7F5C0E0E0EB0B7B7879D9D1D6C6D6D616363036B6B6B585959C1D2D212161616303737879999194C4D4D61626202636363181919C1D0D010060606C0E3F1B0BFBF8FDDDD5D6C6F6F63737313EBEBEB585D5DC5F2F232161717313F3F8FD9D9594C4F4F63727212E3E3E3181D1DC5F0F030060707D1DFDF8FDEDE5E747777A3B3B313EDEDED686D6D457373331A1B1B919797070E8783BEBE3EF4F4F4A0ABAB0B1D1D1D686B6B434B4B0B9A9A9AD0D0D080FAFA7AD4D5D5A1B6B616353535A8AEAE465555152A2B2BE1F57A61341A515151018FC783ECEC6C949797A3A8A808999999282B2B032104E9E9E9282D2D85C3E1406A6A2A82C120EC763BF47A3D028100AC562BB45A2DFC7E3FCC6633D46A353D49063E9F0F2693094AA512C5C5C5C8C9C9815C2E87DBED46565616A452295C2E1732323210171707A7D389B4B434884422141616C26030402010C066B341A7D3C162B140A3D140A55241A150402693412291402C1643281482CFE783CBE5A2A4A404FFF33F7F138661E08F4F39D6E17C341873CD0F6C8F1C4F9FBB5F79DF46FBCCD91F774DF99602FB63A7EB85E7B5EFDD87C0A7CF5F825FBF7D2FFDCDC5FA9C7B79F7AD0F0B9F3C2B7A59FCA6E47DC482217E26F90EAB10E2225D36AB404B30A7AFDC6615BE532ED466B10ADF283F95748B55F84AB94093C92A04298FBD7C9355F842395F9D7128D09B8544089F293F9978E38F40C87D6BA4F089729E2A3D2C10122A410E4B0452C09CB8743D2C1012D5C38778305C655A582024AAC9777E303117AF850542A276E17B0B86A3480D0B84446DF3B5977E4317E2C20221A15D9043C1F38A72F9D9234264932FDC949F17470A477A703DA75C762642387AD4CEA79427885885C70ECAA5A75905FB23CACF095985021BE59253AC82E541E81F12B00AF9E6108F65154CB921CE6715EE1A439C46724E9A203B2FBFA0B8A8BCA44A545FD62469AFE892F5570D29CC917062B827782723168C678E0D27E65FDF41BF0088F0CF1E]
DragForm=0
SavePosName="MyCriptor"
Point(Close)
}
Add(DoData,72744,461,294)
{
link(onEventData,62742:doCopyFromStream,[])
link(Data,14911304:Data2,[(467,199)(439,199)])
}
Add(MemoryStream,2940,280,168)
{
Point(doPosition)
link(SrcStream,5717:Stream,[])
}
Add(FileStream,5717,280,112)
{
link(onLoad,43116:doEvent1,[(318,118)(318,151)(145,151)(145,209)])
}
Add(For,58053,280,287)
{
Start=1
link(onEvent,60844:doGet,[(333,293)(333,237)])
link(onStop,9065686:doEvent1,[(338,300)(338,293)])
link(End,3384174:Data1,[])
}
Add(DataToFile,83748,426,224)
{
link(Stream,14911304:Data1,[])
}
Add(Hub,43116,154,203)
{
OutCount=8
link(onEvent1,2940:doClear,[(225,209)(225,181)])
link(onEvent2,46227:doClear,[(230,216)(230,160)])
link(onEvent3,2940:doCopy,[(220,223)(220,174)])
link(onEvent4,5717:doClose,[(215,230)(215,125)])
link(onEvent5,34245:doData,[])
link(onEvent6,15786728:doStop,[(194,244)(194,466)(416,466)(416,447)])
link(onEvent7,13577346:doStart,[(198,251)(198,426)])
link(onEvent8,3659101:doStart,[(212,258)(212,293)])
}
Add(DataToFile,60844,342,224)
{
link(onGet,2281793:doInput,[])
link(Stream,2940:Stream,[(348,209)(286,209)])
}
Add(MemoryStream,46227,328,147)
{
}
Add(FileStream,62742,510,280)
{
Mode=1
AutoCopy=0
Point(doCopyFromStream)
link(FileName,13229149:Value,[])
}
Add(DoData,34245,217,231)
{
Data=Integer(0)
link(onEventData,2940:doPosition,[(265,237)(265,188)])
}
Add(DropFile,15956738,119,98)
{
link(onDropFile,14889583:doEvent1,[])
}
Add(TimeCounter,13577346,210,420)
{
link(onStop,2764373:doOperation,[])
}
Add(MultiElementEx,4450772,329,98)
{
@Hint=#31:Проверка и переименование файла|
link(onEvent1,13229149:doValue,[])
}
BEGIN_SDK
Add(EditMultiEx,6163439,21,21)
{
WorkCount=#37:doPart=Полный путь проверяемого файла|
EventCount=#24:onEvent1=Новое имя файла|
Width=293
Height=158
link(doPart,3687376:doValue,[(33,27)(33,62)])
}
Add(FilePart,11307332,84,56)
{
link(onPath,6814599:doValue,[(138,62)(138,34)])
link(onName,1966325:doValue,[(229,69)(229,34)])
link(onExt,10883205:doCompare,[(124,76)(124,132)])
}
Add(StrCat,14097887,210,91)
{
link(onStrCat,10216141:doEvent1,[(250,97)(250,132)])
link(Str1,6814599:Value,[(216,79)(195,79)])
link(Str2,1966325:Value,[(223,79)(244,79)])
}
Add(Memory,6814599,189,28)
{
@Hint=#4:Путь|
}
Add(If_else,10883205,147,126)
{
Op2=String(crpt)
link(onTrue,14097887:doStrCat,[(187,132)(187,97)])
link(onFalse,10123228:doStrCat,[])
}
Add(Memory,1966325,238,28)
{
@Hint=#3:Имя|
}
Add(Hub,10216141,258,126)
{
InCount=2
OutCount=1
link(onEvent1,6163439:onEvent1,[(301,132)(301,27)])
}
Add(StrCat,10123228,196,133)
{
Str2=".crpt"
link(onStrCat,10216141:doEvent2,[])
link(Str1,3687376:Value,[(202,115)(48,115)])
}
Add(Memory,3687376,42,56)
{
link(onData,11307332:doPart,[])
}
END_SDK
Add(Math,2764373,259,427)
{
OpType=2
Op2=0.001
link(onResult,6855408:doStrCat,[])
}
Add(StrCat,6855408,308,427)
{
Str2=" sec"
link(onStrCat,78857:doCaption,[])
}
Add(Hub,14889583,168,98)
{
OutCount=3
link(onEvent1,13482679:doValue,[(207,104)(207,384)])
link(onEvent2,4450772:doPart,[(264,111)(264,104)])
link(onEvent3,5717:doOpen,[])
}
Add(Memory,13229149,510,98)
{
}
Add(GetData,14911304,426,154)
{
link(Data,46227:Stream,[(432,142)(380,142)(380,190)(334,190)])
}
Add(FileTools,8694835,546,315)
{
DelToRecycle=1
link(FileName,13482679:Value,[(552,303)(587,303)(587,493)(300,493)])
}
Add(Version,9860979,154,280)
{
Version="0.2"
Description="MyCriptor"
InternalName="MyCriptor"
E-mail="hiasm.com"
}
Add(StyleXP,12894195,154,315)
{
}
Add(Application,617425,448,378)
{
Info="MyCriptor"
Wait=1
}
Add(GProgressBar,12058691,448,336)
{
Top=30
Width=120
Height=10
Color=0
LightProgress=65280
}
Add(Math,15428893,308,336)
{
OpType=3
link(onResult,4687125:doOperation,[])
link(Op1,58053:Position,[(314,328)(286,328)])
link(Op2,3384174:Data2,[(321,270)(300,270)])
}
Add(Math,4687125,350,336)
{
OpType=2
Op2=100
ResultType=0
link(onResult,398682:doEvent1,[])
}
Add(GetData,3384174,287,224)
{
link(Data,2940:Size,[])
}
Add(Timer,11335752,259,336)
{
Interval=200
link(onTimer,15428893:doOperation,[])
}
Add(Hub,398682,399,336)
{
InCount=2
link(onEvent1,12058691:doPosition,[])
link(onEvent2,617425:doProcessMessages,[(439,349)(439,384)])
}
Add(DoData,12527712,350,378)
{
Data=Integer(0)
link(onEventData,398682:doEvent2,[(387,384)(387,349)])
}
Add(InlineCode,2281793,385,224)
{
@Hint=#30:Reverse BYTE (table algorithm)|
WorkPoints=#7:doInput|
EventPoints=#8:onResult|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|5:const|46: ReverseTable: array[0..255] of Cardinal = (|92: $00000000, $00000080, $00000040, $000000C0, $00000020, $000000A0, $00000060, $000000E0, |92: $00000010, $00000090, $00000050, $000000D0, $00000030, $000000B0, $00000070, $000000F0, |92: $00000008, $00000088, $00000048, $000000C8, $00000028, $000000A8, $00000068, $000000E8, |92: $00000018, $00000098, $00000058, $000000D8, $00000038, $000000B8, $00000078, $000000F8, |92: $00000004, $00000084, $00000044, $000000C4, $00000024, $000000A4, $00000064, $000000E4, |92: $00000014, $00000094, $00000054, $000000D4, $00000034, $000000B4, $00000074, $000000F4, |92: $0000000C, $0000008C, $0000004C, $000000CC, $0000002C, $000000AC, $0000006C, $000000EC, |92: $0000001C, $0000009C, $0000005C, $000000DC, $0000003C, $000000BC, $0000007C, $000000FC, |92: $00000002, $00000082, $00000042, $000000C2, $00000022, $000000A2, $00000062, $000000E2, |92: $00000012, $00000092, $00000052, $000000D2, $00000032, $000000B2, $00000072, $000000F2, |92: $0000000A, $0000008A, $0000004A, $000000CA, $0000002A, $000000AA, $0000006A, $000000EA, |92: $0000001A, $0000009A, $0000005A, $000000DA, $0000003A, $000000BA, $0000007A, $000000FA, |92: $00000006, $00000086, $00000046, $000000C6, $00000026, $000000A6, $00000066, $000000E6, |92: $00000016, $00000096, $00000056, $000000D6, $00000036, $000000B6, $00000076, $000000F6, |92: $0000000E, $0000008E, $0000004E, $000000CE, $0000002E, $000000AE, $0000006E, $000000EE, |92: $0000001E, $0000009E, $0000005E, $000000DE, $0000003E, $000000BE, $0000007E, $000000FE, |92: $00000001, $00000081, $00000041, $000000C1, $00000021, $000000A1, $00000061, $000000E1, |92: $00000011, $00000091, $00000051, $000000D1, $00000031, $000000B1, $00000071, $000000F1, |92: $00000009, $00000089, $00000049, $000000C9, $00000029, $000000A9, $00000069, $000000E9, |92: $00000019, $00000099, $00000059, $000000D9, $00000039, $000000B9, $00000079, $000000F9, |92: $00000005, $00000085, $00000045, $000000C5, $00000025, $000000A5, $00000065, $000000E5, |92: $00000015, $00000095, $00000055, $000000D5, $00000035, $000000B5, $00000075, $000000F5, |92: $0000000D, $0000008D, $0000004D, $000000CD, $0000002D, $000000AD, $0000006D, $000000ED, |92: $0000001D, $0000009D, $0000005D, $000000DD, $0000003D, $000000BD, $0000007D, $000000FD, |92: $00000003, $00000083, $00000043, $000000C3, $00000023, $000000A3, $00000063, $000000E3, |92: $00000013, $00000093, $00000053, $000000D3, $00000033, $000000B3, $00000073, $000000F3, |92: $0000000B, $0000008B, $0000004B, $000000CB, $0000002B, $000000AB, $0000006B, $000000EB, |92: $0000001B, $0000009B, $0000005B, $000000DB, $0000003B, $000000BB, $0000007B, $000000FB, |92: $00000007, $00000087, $00000047, $000000C7, $00000027, $000000A7, $00000067, $000000E7, |92: $00000017, $00000097, $00000057, $000000D7, $00000037, $000000B7, $00000077, $000000F7, |92: $0000000F, $0000008F, $0000004F, $000000CF, $0000002F, $000000AF, $0000006F, $000000EF, |94: $0000001F, $0000009F, $0000005F, $000000DF, $0000003F, $000000BF, $0000007F, $000000FF ); |2: |0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|24: onResult:THI_Event;|51: procedure doInput(var Data:TData; Index:word);|5: end;|0:|14:implementation|0:|30:procedure THiAsmClass.doInput;|5:begin|55: _hi_onEvent(onResult, ReverseTable[ToInteger(Data)]);|4:end;|0:|4:end.|
link(onResult,83748:doPut,[])
}
Add(Thread,3659101,231,287)
{
Delay=0
FastStop=0
link(onExec,58053:doFor,[])
}
Add(Hub,9065686,350,287)
{
OutCount=5
link(onEvent1,13577346:doStop,[(392,293)(392,416)(203,416)(203,433)])
link(onEvent2,72744:doData,[])
link(onEvent3,62742:doClose,[(446,307)(446,293)])
link(onEvent4,8694835:doDelete,[(447,314)(447,335)])
link(onEvent5,15786728:doTimer,[(415,321)(415,440)])
}
Add(Memory,13482679,294,378)
{
link(onData,12527712:doData,[])
}
Add(Timer,15786728,448,434)
{
Interval=60000
link(onTimer,78857:doClose,[(490,440)(490,473)(345,473)(345,454)])
}
Add(InlineCode,7325296,768,467)
{
@Hint=#12:Reverse BYTE|
WorkPoints=#7:doInput|
EventPoints=#8:onResult|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|24: onResult:THI_Event;|51: procedure doInput(var Data:TData; Index:word);|5: end;|0:|14:implementation|0:|30:procedure THiAsmClass.doInput;|3:var|17: A, B: Cardinal;|5:begin|29: A := Byte(ToInteger(Data));|3:asm|16: MOV B, 0;|16: SHL A, 24|18: MOV ECX, 8;|6:@@loo:|16: RCL A, 1;|16: RCR B, 1;|16: LOOP @@loo|16: SHR B, 24|6:end; |28: _hi_onEvent(onResult, B);|4:end;|0:|4:end.|
}
Add(InlineCode,7056652,768,432)
{
@Hint=#30:Reverse BYTE (table algorithm)|
WorkPoints=#7:doInput|
EventPoints=#8:onResult|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|24: onResult:THI_Event;|51: procedure doInput(var Data:TData; Index:word);|5: end;|0:|14:implementation|0:|30:procedure THiAsmClass.doInput;|3:var|17: A, B: Cardinal;|5:begin|29: A := Byte(ToInteger(Data));|3:asm|17: MOV ECX, A|27: LEA EDX, @ReverseTbl|31: MOV EAX, [EDX + ECX * 4]|17: MOV B, EAX|16: JMP @Done|12:@ReverseTbl:|92: DD $00000000, $00000080, $00000040, $000000C0, $00000020, $000000A0, $00000060, $000000E0 |92: DD $00000010, $00000090, $00000050, $000000D0, $00000030, $000000B0, $00000070, $000000F0 |92: DD $00000008, $00000088, $00000048, $000000C8, $00000028, $000000A8, $00000068, $000000E8 |92: DD $00000018, $00000098, $00000058, $000000D8, $00000038, $000000B8, $00000078, $000000F8 |92: DD $00000004, $00000084, $00000044, $000000C4, $00000024, $000000A4, $00000064, $000000E4 |92: DD $00000014, $00000094, $00000054, $000000D4, $00000034, $000000B4, $00000074, $000000F4 |92: DD $0000000C, $0000008C, $0000004C, $000000CC, $0000002C, $000000AC, $0000006C, $000000EC |92: DD $0000001C, $0000009C, $0000005C, $000000DC, $0000003C, $000000BC, $0000007C, $000000FC |92: DD $00000002, $00000082, $00000042, $000000C2, $00000022, $000000A2, $00000062, $000000E2 |92: DD $00000012, $00000092, $00000052, $000000D2, $00000032, $000000B2, $00000072, $000000F2 |92: DD $0000000A, $0000008A, $0000004A, $000000CA, $0000002A, $000000AA, $0000006A, $000000EA |92: DD $0000001A, $0000009A, $0000005A, $000000DA, $0000003A, $000000BA, $0000007A, $000000FA |92: DD $00000006, $00000086, $00000046, $000000C6, $00000026, $000000A6, $00000066, $000000E6 |92: DD $00000016, $00000096, $00000056, $000000D6, $00000036, $000000B6, $00000076, $000000F6 |92: DD $0000000E, $0000008E, $0000004E, $000000CE, $0000002E, $000000AE, $0000006E, $000000EE |92: DD $0000001E, $0000009E, $0000005E, $000000DE, $0000003E, $000000BE, $0000007E, $000000FE |92: DD $00000001, $00000081, $00000041, $000000C1, $00000021, $000000A1, $00000061, $000000E1 |92: DD $00000011, $00000091, $00000051, $000000D1, $00000031, $000000B1, $00000071, $000000F1 |92: DD $00000009, $00000089, $00000049, $000000C9, $00000029, $000000A9, $00000069, $000000E9 |92: DD $00000019, $00000099, $00000059, $000000D9, $00000039, $000000B9, $00000079, $000000F9 |92: DD $00000005, $00000085, $00000045, $000000C5, $00000025, $000000A5, $00000065, $000000E5 |92: DD $00000015, $00000095, $00000055, $000000D5, $00000035, $000000B5, $00000075, $000000F5 |92: DD $0000000D, $0000008D, $0000004D, $000000CD, $0000002D, $000000AD, $0000006D, $000000ED |92: DD $0000001D, $0000009D, $0000005D, $000000DD, $0000003D, $000000BD, $0000007D, $000000FD |92: DD $00000003, $00000083, $00000043, $000000C3, $00000023, $000000A3, $00000063, $000000E3 |92: DD $00000013, $00000093, $00000053, $000000D3, $00000033, $000000B3, $00000073, $000000F3 |92: DD $0000000B, $0000008B, $0000004B, $000000CB, $0000002B, $000000AB, $0000006B, $000000EB |92: DD $0000001B, $0000009B, $0000005B, $000000DB, $0000003B, $000000BB, $0000007B, $000000FB |92: DD $00000007, $00000087, $00000047, $000000C7, $00000027, $000000A7, $00000067, $000000E7 |92: DD $00000017, $00000097, $00000057, $000000D7, $00000037, $000000B7, $00000077, $000000F7 |92: DD $0000000F, $0000008F, $0000004F, $000000CF, $0000002F, $000000AF, $0000006F, $000000EF |92: DD $0000001F, $0000009F, $0000005F, $000000DF, $0000003F, $000000BF, $0000007F, $000000FF |8: @Done:|6:end; |28: _hi_onEvent(onResult, B);|4:end;|0:|4:end.|
}
Add(MultiElementEx,16246726,768,537)
{
@Hint=#8:Инвертор|
}
BEGIN_SDK
Add(EditMultiEx,4802494,21,21)
{
WorkCount=#24:doCrypt=Инвертирует байт|
EventCount=#75:onNumber=Событие происходит после инвертирования байта и выдает его в поток|
Width=244
Height=396
link(doCrypt,6521553:doEvent1,[(33,27)(33,279)])
}
Add(Memory,728938,189,196)
{
}
Add(Memory,6993452,196,238)
{
}
Add(IntToBits,14517467,105,308)
{
Data_0=Integer(1)
Data_1=Integer(0)
link(onBit1,4657016:doValue,[(149,314)(149,34)])
link(onBit2,16247303:doValue,[(151,321)(151,76)])
link(onBit3,16738823:doValue,[(153,328)(153,118)])
link(onBit4,2875915:doValue,[(155,335)(155,160)])
link(onBit5,728938:doValue,[(157,342)(157,202)])
link(onBit6,6993452:doValue,[(159,349)(159,244)])
link(onBit7,3088944:doValue,[(161,356)(161,286)])
link(onBit8,15086153:doValue,[(163,363)(163,328)])
}
Add(BitsToInt,618167,161,371)
{
Count=8
link(onNumber,4802494:onNumber,[(251,377)(251,27)])
link(Bit1,4657016:Value,[])
link(Bit2,16247303:Value,[])
link(Bit3,16738823:Value,[])
link(Bit4,2875915:Value,[])
link(Bit5,728938:Value,[])
link(Bit6,6993452:Value,[])
link(Bit7,3088944:Value,[])
link(Bit8,15086153:Value,[])
}
Add(Memory,15086153,210,322)
{
}
Add(Memory,4657016,161,28)
{
}
Add(Memory,16247303,168,70)
{
}
Add(Memory,16738823,175,112)
{
}
Add(Memory,2875915,182,154)
{
}
Add(Memory,3088944,203,280)
{
}
Add(Hub,6521553,42,273)
{
link(onEvent1,14517467:doBitsRev,[(90,279)(90,321)])
link(onEvent2,618167:doNumber,[(84,286)(84,377)])
}
END_SDK
Add(MultiElementEx,7661291,768,502)
{
@Hint=#15:Инвертор (табл)|
}
BEGIN_SDK
Add(EditMultiEx,4802494,21,21)
{
WorkCount=#24:doCrypt=Инвертирует байт|
EventCount=#75:onNumber=Событие происходит после инвертирования байта и выдает его в поток|
Width=76
Height=102
link(doCrypt,4970074:doRead,[(31,27)(31,83)])
}
Add(IntegerArray,13904064,42,28)
{
IntArray=['0'=0,'1'=128,'2'=64,'3'=192,'4'=32,'5'=160,'6'=96,'7'=224,'8'=16,'9'=144,'10'=80,'11'=208,'12'=48,'13'=176,'14'=112,'15'=240,'16'=8,'17'=136,'18'=72,'19'=200,'20'=40,'21'=168,'22'=104,'23'=232,'24'=24,'25'=152,'26'=88,'27'=216,'28'=56,'29'=184,'30'=120,'31'=248,'32'=4,'33'=132,'34'=68,'35'=196,'36'=36,'37'=164,'38'=100,'39'=228,'40'=20,'41'=148,'42'=84,'43'=212,'44'=52,'45'=180,'46'=116,'47'=244,'48'=12,'49'=140,'50'=76,'51'=204,'52'=44,'53'=172,'54'=108,'55'=236,'56'=28,'57'=156,'58'=92,'59'=220,'60'=60,'61'=188,'62'=124,'63'=252,'64'=2,'65'=130,'66'=66,'67'=194,'68'=34,'69'=162,'70'=98,'71'=226,'72'=18,'73'=146,'74'=82,'75'=210,'76'=50,'77'=178,'78'=114,'79'=242,'80'=10,'81'=138,'82'=74,'83'=202,'84'=42,'85'=170,'86'=106,'87'=234,'88'=26,'89'=154,'90'=90,'91'=218,'92'=58,'93'=186,'94'=122,'95'=250,'96'=6,'97'=134,'98'=70,'99'=198,'100'=38,'101'=166,'102'=102,'103'=230,'104'=22,'105'=150,'106'=86,'107'=214,'108'=54,'109'=182,'110'=118,'111'=246,'112'=14,'113'=142,'114'=78,'115'=206,'116'=46,'117'=174,'118'=110,'119'=238,'120'=30,'121'=158,'122'=94,'123'=222,'124'=62,'125'=190,'126'=126,'127'=254,'128'=1,'129'=129,'130'=65,'131'=193,'132'=33,'133'=161,'134'=97,'135'=225,'136'=17,'137'=145,'138'=81,'139'=209,'140'=49,'141'=177,'142'=113,'143'=241,'144'=9,'145'=137,'146'=73,'147'=201,'148'=41,'149'=169,'150'=105,'151'=233,'152'=25,'153'=153,'154'=89,'155'=217,'156'=57,'157'=185,'158'=121,'159'=249,'160'=5,'161'=133,'162'=69,'163'=197,'164'=37,'165'=165,'166'=101,'167'=229,'168'=21,'169'=149,'170'=85,'171'=213,'172'=53,'173'=181,'174'=117,'175'=245,'176'=13,'177'=141,'178'=77,'179'=205,'180'=45,'181'=173,'182'=109,'183'=237,'184'=29,'185'=157,'186'=93,'187'=221,'188'=61,'189'=189,'190'=125,'191'=253,'192'=3,'193'=131,'194'=67,'195'=195,'196'=35,'197'=163,'198'=99,'199'=227,'200'=19,'201'=147,'202'=83,'203'=211,'204'=51,'205'=179,'206'=115,'207'=243,'208'=11,'209'=139,'210'=75,'211'=203,'212'=43,'213'=171,'214'=107,'215'=235,'216'=27,'217'=155,'218'=91,'219'=219,'220'=59,'221'=187,'222'=123,'223'=251,'224'=7,'225'=135,'226'=71,'227'=199,'228'=39,'229'=167,'230'=103,'231'=231,'232'=23,'233'=151,'234'=87,'235'=215,'236'=55,'237'=183,'238'=119,'239'=247,'240'=15,'241'=143,'242'=79,'243'=207,'244'=47,'245'=175,'246'=111,'247'=239,'248'=31,'249'=159,'250'=95,'251'=223,'252'=63,'253'=191,'254'=127,'255'=255]
}
Add(ArrayRW,4970074,42,77)
{
link(onRead,4802494:onNumber,[(85,83)(85,27)])
link(Array,13904064:Array,[])
}
END_SDK
Add(InlineCode,12927831,768,579)
{
@Hint=#30:Reverse BYTE (table algorithm)|
WorkPoints=#7:doInput|
EventPoints=#8:onResult|
VarPoints=#33:Value=Номер обрабатываемого байта|
DataPoints=#27:InFile=хэндл входного файла|26:Size=размер входного файла|29:OutFile=жэндл выходного файла|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|5:const|46: ReverseTable: array[0..255] of Cardinal = (|92: $00000000, $00000080, $00000040, $000000C0, $00000020, $000000A0, $00000060, $000000E0, |92: $00000010, $00000090, $00000050, $000000D0, $00000030, $000000B0, $00000070, $000000F0, |92: $00000008, $00000088, $00000048, $000000C8, $00000028, $000000A8, $00000068, $000000E8, |92: $00000018, $00000098, $00000058, $000000D8, $00000038, $000000B8, $00000078, $000000F8, |92: $00000004, $00000084, $00000044, $000000C4, $00000024, $000000A4, $00000064, $000000E4, |92: $00000014, $00000094, $00000054, $000000D4, $00000034, $000000B4, $00000074, $000000F4, |92: $0000000C, $0000008C, $0000004C, $000000CC, $0000002C, $000000AC, $0000006C, $000000EC, |92: $0000001C, $0000009C, $0000005C, $000000DC, $0000003C, $000000BC, $0000007C, $000000FC, |92: $00000002, $00000082, $00000042, $000000C2, $00000022, $000000A2, $00000062, $000000E2, |92: $00000012, $00000092, $00000052, $000000D2, $00000032, $000000B2, $00000072, $000000F2, |92: $0000000A, $0000008A, $0000004A, $000000CA, $0000002A, $000000AA, $0000006A, $000000EA, |92: $0000001A, $0000009A, $0000005A, $000000DA, $0000003A, $000000BA, $0000007A, $000000FA, |92: $00000006, $00000086, $00000046, $000000C6, $00000026, $000000A6, $00000066, $000000E6, |92: $00000016, $00000096, $00000056, $000000D6, $00000036, $000000B6, $00000076, $000000F6, |92: $0000000E, $0000008E, $0000004E, $000000CE, $0000002E, $000000AE, $0000006E, $000000EE, |92: $0000001E, $0000009E, $0000005E, $000000DE, $0000003E, $000000BE, $0000007E, $000000FE, |92: $00000001, $00000081, $00000041, $000000C1, $00000021, $000000A1, $00000061, $000000E1, |92: $00000011, $00000091, $00000051, $000000D1, $00000031, $000000B1, $00000071, $000000F1, |92: $00000009, $00000089, $00000049, $000000C9, $00000029, $000000A9, $00000069, $000000E9, |92: $00000019, $00000099, $00000059, $000000D9, $00000039, $000000B9, $00000079, $000000F9, |92: $00000005, $00000085, $00000045, $000000C5, $00000025, $000000A5, $00000065, $000000E5, |92: $00000015, $00000095, $00000055, $000000D5, $00000035, $000000B5, $00000075, $000000F5, |92: $0000000D, $0000008D, $0000004D, $000000CD, $0000002D, $000000AD, $0000006D, $000000ED, |92: $0000001D, $0000009D, $0000005D, $000000DD, $0000003D, $000000BD, $0000007D, $000000FD, |92: $00000003, $00000083, $00000043, $000000C3, $00000023, $000000A3, $00000063, $000000E3, |92: $00000013, $00000093, $00000053, $000000D3, $00000033, $000000B3, $00000073, $000000F3, |92: $0000000B, $0000008B, $0000004B, $000000CB, $0000002B, $000000AB, $0000006B, $000000EB, |92: $0000001B, $0000009B, $0000005B, $000000DB, $0000003B, $000000BB, $0000007B, $000000FB, |92: $00000007, $00000087, $00000047, $000000C7, $00000027, $000000A7, $00000067, $000000E7, |92: $00000017, $00000097, $00000057, $000000D7, $00000037, $000000B7, $00000077, $000000F7, |92: $0000000F, $0000008F, $0000004F, $000000CF, $0000002F, $000000AF, $0000006F, $000000EF, |94: $0000001F, $0000009F, $0000005F, $000000DF, $0000003F, $000000BF, $0000007F, $000000FF ); |2: |0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|24: onResult:THI_Event;|51: procedure doInput(var Data:TData; Index:word);|5: end;|0:|14:implementation|0:|30:procedure THiAsmClass.doInput;|5:begin|55: _hi_onEvent(onResult, ReverseTable[ToInteger(Data)]);|4:end;|0:|4:end.|
}
карма: 0

0
файлы: 1code_13560.txt [23.2KB] [318]
28
Сообщение
...
Прикрепленные файлы
(файлы не залиты)