Forth http://fforum.winglion.ru/ |
|
битовые накопительные массивы http://fforum.winglion.ru/viewtopic.php?f=18&t=829 |
Страница 1 из 5 |
Автор: | mOleg [ Ср июн 27, 2007 23:45 ] |
Заголовок сообщения: | битовые накопительные массивы |
вдруг понадобилась такая штука... Код: \ 25-06-2007 ~mOleg
\ Copyright [C] 2007 mOleg mininoleg@yahoo.com \ битовый буффер накопитель REQUIRE ?DEFINED devel\~mOleg\lib\util\ifdef.f REQUIRE B@ devel\~mOleg\lib\util\bytes.f USER retain \ количество сохраненных бит 8 CONSTANT bits/addr \ бит в байте bits/addr CELLS CONSTANT bits/cell \ бит в ячейке \ вернуть адрес и смещение конца битового массива : bAddr ( base --> disp addr ) retain @ bits/addr /MOD ROT + ; \ сместить битовое поле u в старшие разряды : [barr ( u # --> |u # ) TUCK bits/cell SWAP - LSHIFT SWAP ; \ поменять порядок байт в числе : bSwap ( u --> u ) [ 0x0F B, 0xC8 B, ] ; \ сдвинуть число u вправо на # бит с получением результата двойной длины : shrd ( u # --> D ) [ 0x8B B, 0xC8 B, 0x33 B, 0xC0 B, 0x8B B, 0x55 B, 0x00 B, 0x0F B, 0xAD B, 0xD0 B, 0xD3 B, 0xEA B, 0x89 B, 0x55 B, 0x00 B, ] ; \ добавить битовое поле в конец битового массива \ битовое поле начинается со старшего бита числа и занимает # бит вправо : accrue ( u # base --> ) bAddr >R SWAP retain +! shrd bSwap R@ CELL + ! bSwap R> +! ; USER barray \ адрес начала буфера \ добавить битовое поле в конец массива \ битовое поле начинается с 0 бита и занимает # бит влево : bPlus ( u # --> ) [barr barray @ accrue ; \ перед использованием bPlus надо обнулить retain и установить barray \ shrd можно реализовать через цикл с D2/ - просто будет дольше выполняться \ bSwap просто меняет порядок следования байт в cell на обратный \ буфер, перед сохранением в него битового потока должен быть очищен с помощью \ ERASE ?DEFINED test{ \EOF -- тестовая секция --------------------------------------- test{ 0x12 8 [barr 8 = SWAP 0x12000000 = AND 0= THROW \ [barr 0x12345678 bSwap 0x78563412 <> THROW \ bSwap 0x12345678 0x10 shrd 0x56780000 = SWAP 0x1234 = AND 0= THROW \ shrd HERE 10 + barray ! 5 5 bPlus 0x12345678 0x20 bPlus 0 bAddr 5 4 D= 0= THROW \ bAddr barray @ @ 0xB3A29128 <> THROW \ bPlus 0x11111111 0x20 bPlus barray @ CELL + @ 0x888888C0 <> THROW \ bPlus S" passed" TYPE }test |
Автор: | mOleg [ Ср июн 27, 2007 23:50 ] |
Заголовок сообщения: | |
использование приведенной выше либы для трансляции потоков чисел в битовые массивы Код: \ 24-06-2007 ~mOleg
\ Copyright [C] 2007 mOleg mininoleg@yahoo.com \ преобразование потока чисел в бинарное представление REQUIRE ?DEFINED devel\~moleg\lib\util\ifdef.f REQUIRE SkipChar devel\~mOleg\lib\util\parser.f REQUIRE >CIPHER devel\~moleg\lib\parsing\number.f REQUIRE bPlus devel\~moleg\lib\arrays\barray.f USER-VALUE bit-size \ сколько бит занимает один символ USER-VALUE max-char \ максимально допустимое цифровое значение символа \ направляем битовый поток в PAD : |bbuf ( --> ) SYSTEM-PAD DUP barray ! PAD OVER - ERASE 0 retain ! ; \ вернуть адрес начала битового массива и его длину в байтах : bbuf> ( --> addr # ) barray @ retain @ bits/addr /MOD SWAP 0<> NEGATE + ; \ определяем тип потока : stream-type ( --> ) SkipDelimiters PeekChar \ шестнадцатиричные [CHAR] x OVER = OVER [CHAR] X = OR IF DROP SkipChar 4 TO bit-size 0x10 TO max-char EXIT THEN \ восьмиричные [CHAR] o OVER = OVER [CHAR] O = OR IF DROP SkipChar 3 TO bit-size 0x8 TO max-char EXIT THEN \ двоичные [CHAR] b OVER = OVER [CHAR] B = OR IF DROP SkipChar 1 TO bit-size 0x2 TO max-char EXIT THEN \ по умолчанию 16ричные числа DROP 4 TO bit-size 0x10 TO max-char ; \ разобрать входной поток до завершающей скобки '}' или ']' : parse-stream ( --> ) BEGIN SkipDelimiters GetChar WHILE \ не исчерпан входной поток >CIPHER DUP 0 max-char WITHIN WHILE \ допустимые символы bit-size bPlus SkipChar REPEAT \ возможно завершающая скобка PeekChar [CHAR] } = PeekChar [CHAR] ] = OR IF SkipChar DROP EXIT THEN THEN DROP -1 THROW ; \ вернуть адрес преобразованного потока в двоичное представление : STREAM{ ( /stream} --> addr # ) |bbuf stream-type ['] parse-stream CATCH THROW bbuf> ; \ компилировать поток в текущее определение : STREAM[ ( /stream --> ) STREAM{ S, ; IMMEDIATE ?DEFINED test{ \EOF -- тестовая секция --------------------------------------- test{ STREAM{ FAD3C5EB} DROP @ 0xEBC5D3FA <> THROW STREAM{ o1234560} DROP @ 0x80CB29 <> THROW STREAM{ b1110 1010 1101 0101 0101 0111 } DROP @ 0x57D5EA <> THROW S" passed" TYPE }test |
Автор: | mOleg [ Ср июн 27, 2007 23:55 ] |
Заголовок сообщения: | |
и пример использования различных методик для создания ассемблерных приметивов первый вариант с использованием ассемблера(правда псеводассемблера) второй, типичный для СПФ без подключения асма третий с использованием приведенных выше либ... Код: \ 24-06-2007 ~mOleg
\ Copyright [C] 2007 mOleg mininoleg@yahoo.com \ манипуляции данными на стеке возвратов \ в трех вариантах исполнения REQUIRE ?DEFINED devel\~moleg\lib\util\ifdef.f REQUIRE STREAM[ devel\~mOleg\lib\arrays\stream.f \ REQUIRE B@ devel\~mOleg\lib\util\bytes.f \ REQUIRE dpush devel\~mOleg\lib\asm\psevdoasm.f \ поменять местами два числа \ верхнее на стеке данных с верхним на стеке возвратов \ CODE R><D ( r: a d: b --> r: b d: a ) \ rpop addr \ XCHG tos , [rtop] \ JMP addr \ END-CODE \ : R><D ( r: a d: b --> r: b d: a ) \ [ 0x5B B, 0x87 B, 0x04 B, 0x24 B, 0xFF B, 0xE3 B, ] ; : R><D ( r: a d: b --> r: b d: a ) STREAM[ x5B870424FFE3 ] ; \ поменять местами два числа на стеке возвратов \ CODE RSWAP ( r: a b --> r: b a ) \ rpop addr \ rpop temp \ rpop cntr \ rpush temp \ rpush cntr \ JMP addr \ END-CODE \ : RSWAP ( r: a b --> r: b a ) \ [ 0x5B B, 0x5A B, 0x59 B, 0x52 B, 0x51 B, 0xFF B, 0xE3 B, ] ; : RSWAP ( r: a b --> r: b a ) STREAM[ x5B5A595251FFE3 ] ; \ удалить второй по счету элемент от вершины стека возвратов \ CODE RNIP ( r: a b --> r: b ) \ rpop addr \ rpop temp \ rpop cntr \ rpush temp \ JMP addr \ END-CODE \ : RNIP ( r: a b --> r: b ) \ [ 0x5B B, 0x5A B, 0x59 B, 0x52 B, 0xFF B, 0xE3 B, ] ; : RNIP ( r: a b --> r: b ) STREAM[ x5B5A5952FFE3 ] ; \ копировать верхний элемент на вершине стека возвратов \ CODE RDUP ( r: a --> r: a a ) \ rpop addr \ MOV temp , [rtop] \ rpush temp \ JMP addr \ END-CODE \ : RDUP ( r: a --> r: a a ) \ [ 0x5B B, 0x8B B, 0x14 B, 0x24 B, 0x52 B, 0xFF B, 0xE3 B, ] ; : RDUP ( r: a --> r: a a ) STREAM[ x5B8B142452FFE3 ] ; \ положить поверх верхнего элемента копию нижнего на стеке возвратов \ CODE ROVER ( r: a b --> r: a b a ) \ rpop addr \ MOV temp , CELL [rtop] \ rpush temp \ JMP addr \ END-CODE \ : ROVER ( r: a b --> r: a b a ) \ [ 0x5B B, 0x8B B, 0x54 B, 0x24 B, 0x04 B, 0x52 B, 0xFF B, 0xE3 B, ] ; : ROVER ( r: a b --> r: a b a ) STREAM[ x5B8B54240452FFE3 ] ; \ подложить копию верхнего элемента, находящегося на вершине стека \ возвратов под нижний \ CODE RTUCK ( r: a b --> r: b a b ) \ rpop addr \ rpop temp \ rpop cntr \ rpush temp \ rpush cntr \ rpush temp \ JMP addr \ END-CODE \ : RTUCK ( r: a b --> r: b a b ) \ [ 0x5B B, 0x5A B, 0x59 B, 0x52 B, 0x51 B, 0x52 B, 0xFF B, 0xE3 B, ] ; : RTUCK ( r: a b --> r: b a b ) STREAM[ x5B5A59525152FFE3 ] ; \ провернуть три верхних элемента на вершине стека возвратов влево \ CODE RROT ( r: a b c --> r: b c a ) \ rpop addr \ rpop temp \ rpop cntr \ rpop templ \ rpush cntr \ rpush temp \ rpush templ \ JMP addr \ END-CODE \ : RROT ( r: a b c --> r: b c a ) \ [ 0x5B B, 0x5A B, 0x59 B, 0x5E B, 0x51 B, 0x52 B, 0x56 B, \ 0xFF B, 0xE3 B, ] ; : RROT ( r: a b c --> r: b c a ) STREAM[ x5B5A595E515256FFE3 ] ; \ добавить число к находящемуся на стеке возвратов \ : R+ ( r: a d: b --> r: a+b ) 2R> -ROT + >R >R ; \ CODE R+ ( r: a d: b --> r: a+b ) \ rpop addr \ ADD [rtop] , tos \ dpop tos \ JMP addr \ END-CODE \ : R+ ( r: a d: b --> r: a+b ) \ [ 0x5B B, 0x01 B, 0x04 B, 0x24 B, 0x8B B, 0x45 B, 0x00 B, \ 0x8D B, 0x6D B, 0x04 B, 0xFF B, 0xE3 B, ] ; : R+ ( r: a d: b --> r: a+b ) STREAM[ x5B0104248B45008D6D04FFE3 ] ; ?DEFINED test{ \EOF -- тестовая секция --------------------------------------- test{ : first 1 >R 2 R><D R> ; first 1 2 D= 0= THROW \ R><D : second 1 >R 2 >R RSWAP R> R> ; second 1 2 D= 0= THROW \ RSWAP : thrid 1 >R 2 >R RNIP R> ; thrid 2 <> THROW \ RNIP : fourth 1 >R RDUP R> R> ; fourth <> THROW \ RDUP : fifth 1 >R 2 >R ROVER R> R> R> ; fifth 1 = SWAP 2 = AND SWAP 1 = AND 0= THROW \ ROVER : sixth 1 >R 2 >R RTUCK R> R> R> ; sixth 2 = SWAP 1 = AND SWAP 2 = AND 0= THROW \ RTUCK : seventh 1 >R 2 >R 3 >R RROT R> R> R> ; seventh 2 = SWAP 3 = AND SWAP 1 = AND 0= THROW \ RROT : eighth 10 1 >R R+ R> ; eighth 11 <> THROW \ R+ S" passed" TYPE }test |
Автор: | profiT [ Чт июн 28, 2007 00:06 ] |
Заголовок сообщения: | |
--- |
Автор: | mOleg [ Чт июн 28, 2007 00:11 ] |
Заголовок сообщения: | |
profiT писал(а): SPF_DEVEL:
Цитата: REQUIRE x.mask ~mlg/SrcLib/bitfield.f \ Битовые структуры а у меня не структуры, и туда, между прочим я первым делом посмотрел |
Автор: | Sotnik [ Чт фев 03, 2022 01:05 ] |
Заголовок сообщения: | Re: битовые накопительные массивы |
mOleg писал(а): вдруг понадобилась такая штука... вот спасибочки, как вовремя - акурат цикл убыстритсяКод: \ 25-06-2007 ~mOleg\ поменять порядок байт в числе : bSwap ( u --> u ) [ 0x0F B, 0xC8 B, ] ; Код: 12345678 bswap . побольше бы таких быстрых примитивов78563412 Ok ещё бы два быстрых слова для анализа в цикле Код: : I4 ( u32 -> a b c d ) число на стеке 32 бит разложить на составные 4 байта 11223344 -> 11 22 33 44 или где-то такие быстрые слова тихенько сидят в переписке, как bSwap, и помалкивают?
: 4I ( a b c d -> u32 ) числа (младшие байты) на стеке собрать в одно число 11 22 33 44 -> 11223344 |
Автор: | Victor__v [ Чт фев 03, 2022 13:18 ] |
Заголовок сообщения: | Re: битовые накопительные массивы |
Если говорить про bSwap, то для придумывания данного примитива достаточно поковыряться в справочнике по архитектуре x86 от Интела) I4 4I зачем они? Я делал что-то подобное для удобного задания IP-адресов Код: : IP:
SkipDelimiters '.' PARSE STR>NUM THROW \ 0x00 LSHIFT '.' PARSE STR>NUM THROW 0x08 LSHIFT '.' PARSE STR>NUM THROW 0x10 LSHIFT PARSE-NAME STR>NUM THROW 0x18 LSHIFT + + + ?LIT ; IMMEDIATE : >IP \ N1 N2 N3 N4 -- IP [ BASE @ HEX C1 C, E0 C, 0x18 C, \ SHL EAX , 18 8B C, 4D C, 0x00 C, \ MOV ECX , 0 [EBP] 8B C, 55 C, 0x04 C, \ MOV EDX , 4 [EBP] 8B C, 5D C, 0x08 C, \ MOV EBX , 8 [EBP] C1 C, E1 C, 0x10 C, \ SHL ECX , 10 C1 C, E2 C, 0x08 C, \ SHL EDX , 8 8D C, 04 C, 10 C, \ LEA EAX , [EAX] [EDX] 8D C, 04 C, 08 C, \ LEA EAX , [EAX] [ECX] 8D C, 04 C, 18 C, \ LEA EAX , [EAX] [EBX] BASE ! ] NIP NIP NIP ; |
Автор: | Sotnik [ Чт фев 03, 2022 16:06 ] |
Заголовок сообщения: | Re: битовые накопительные массивы |
Victor__v писал(а): Если говорить про bSwap, то для придумывания данного примитива достаточно поковыряться в справочнике по архитектуре x86 от Интела) Иногда надо работать с байтами очень быстро, а сдвигать долго.I4 4I зачем они? Я делал что-то подобное для удобного задания IP-адресов Порыться в асме можно, десятки лет назад я так и делал. Потиху надо вспоминать. Victor__v писал(а): Код: : IP: SkipDelimiters '.' PARSE STR>NUM THROW \ 0x00 LSHIFT '.' PARSE STR>NUM THROW 0x08 LSHIFT '.' PARSE STR>NUM THROW 0x10 LSHIFT PARSE-NAME STR>NUM THROW 0x18 LSHIFT + + + ?LIT ; IMMEDIATE '.' PARSE STR>NUM THROW ^ -2003 WORD OR FILE NOT FOUND '.' - в наработках упоминается применение, исходника нет STR>NUM - тож неведом - в комплекте не упоминается, что надо подключить? LSHIFT - тормозит цикл раза в четыре, почему я тут и спрашиваю прямые коды Victor__v писал(а): Код: : >IP \ N1 N2 N3 N4 -- IP [ BASE @ HEX C1 C, E0 C, 0x18 C, \ SHL EAX , 18 8B C, 4D C, 0x00 C, \ MOV ECX , 0 [EBP] 8B C, 55 C, 0x04 C, \ MOV EDX , 4 [EBP] 8B C, 5D C, 0x08 C, \ MOV EBX , 8 [EBP] C1 C, E1 C, 0x10 C, \ SHL ECX , 10 C1 C, E2 C, 0x08 C, \ SHL EDX , 8 8D C, 04 C, 10 C, \ LEA EAX , [EAX] [EDX] 8D C, 04 C, 08 C, \ LEA EAX , [EAX] [ECX] 8D C, 04 C, 18 C, \ LEA EAX , [EAX] [EBX] BASE ! ] NIP NIP NIP ; Код: 12 34 56 78 >IP . 78563412 >IP отработало великолепно!!! Спасибо!
|
Автор: | chess [ Чт фев 03, 2022 17:33 ] |
Заголовок сообщения: | Re: битовые накопительные массивы |
На встроенном ассемблере очень просто реализуется с минимумом обращений к памяти Код: : I4 ( u32 -> a b c d ) $ -C Pa D=A $ FF000000 D&# $ 18 #D>> $ 8 @P=D D=A $ FF0000 D&# $ 10 #D>> $ 4 @P=D D=A $ FF00 D&# $ 8 #D>> $ 0 @P=D $ FF A&# ; SEE I4 : 4I ( a b c d -> u32 ) $ 8 D=@P $ 18 #D<< A|D $ 4 D=@P $ 10 #D<< A|D $ 0 D=@P $ 8 #D<< A|D $ C Pa ; SEE 4I HEX 11223344 I4 11 22 33 44 4I : TST 0x11223344 I4 ; TIME : tst 0x11 0x22 0x33 0x44 4I ; time ЛОГ Код: CODE I4
622BA3 8D6DF4 LEA EBP , F4 [EBP] 622BA6 8BD0 MOV EDX , EAX 622BA8 81E2000000FF AND EDX , # FF000000 622BAE C1EA18 SHR EDX , 18 622BB1 895508 MOV 8 [EBP] , EDX 622BB4 8BD0 MOV EDX , EAX 622BB6 81E20000FF00 AND EDX , # FF0000 622BBC C1EA10 SHR EDX , 10 622BBF 895504 MOV 4 [EBP] , EDX 622BC2 8BD0 MOV EDX , EAX 622BC4 81E200FF0000 AND EDX , # FF00 622BCA C1EA08 SHR EDX , 8 622BCD 895500 MOV 0 [EBP] , EDX 622BD0 81E0FF000000 AND EAX , # FF 622BD6 C3 RET NEAR END-CODE ( 52 bytes, 15 instructions ) CODE 4I 622BE7 8B5508 MOV EDX , 8 [EBP] 622BEA C1E218 SHL EDX , 18 622BED 0BC2 OR EAX , EDX 622BEF 8B5504 MOV EDX , 4 [EBP] 622BF2 C1E210 SHL EDX , 10 622BF5 0BC2 OR EAX , EDX 622BF7 8B5500 MOV EDX , 0 [EBP] 622BFA C1E208 SHL EDX , 8 622BFD 0BC2 OR EAX , EDX 622BFF 8D6D0C LEA EBP , C [EBP] 622C02 C3 RET NEAR END-CODE ( 28 bytes, 11 instructions ) 4 ns ( время I4, при тактовой частоте процессора 3500 Ггц) 2 ns ( время 4I) |
Автор: | Sotnik [ Чт фев 03, 2022 19:49 ] |
Заголовок сообщения: | Re: битовые накопительные массивы |
chess писал(а): Код: 4 ns ( время I4, при тактовой частоте процессора 3500 Ггц) 2 ns ( время 4I) \ сразу подавился на $, порылся в библиотеках - нашёл и попробовал все 4 варианта - не то \ ------------------------------ \ получить очередную цифру \ : $ ( n --> n*base C) CurrentBase @ UM* >digit ; \ ? - CurrentBase \ получить очередную цифру \ : $ ( n --> n*base ) BASE @ UM* >DIGIT KEEP ; \ ? - >DIGIT \ : $ ( D -- Char ) @BASE UM* >DIGIT ; \ ? - >DIGIT ? - @BASE \ : $ ( n -- ) _cell this-var @ variant! this-var @ _currency coerce-variant ?AUERROR ; \ ? - _cell \ ------------------------------ chess писал(а): На встроенном ассемблере очень просто реализуется с минимумом обращений к памяти по поиску нашёл 14 (четырнацать) файлов.f с именем *asm*.fкакой подключать? А можно сразу в кодах, как слово >IP реализовано? какой день сегодня интересный, столько секса :-/ А язык Форт, конечно, самый-самый на планете. Блин... |
Автор: | KPG [ Чт фев 03, 2022 20:46 ] |
Заголовок сообщения: | Re: битовые накопительные массивы |
Sotnik писал(а): какой день сегодня интересный, столько секса :-/ А язык Форт, конечно, самый-самый на планете. Блин... Ну да, от пользователя к пользователю пеpедаётся знание при прямом контакте или по пониманию умолчаний в представленном коде. |
Автор: | chess [ Чт фев 03, 2022 21:05 ] |
Заголовок сообщения: | Re: битовые накопительные массивы |
Код: HEX : I4 [ 8D C, 6D C, F4 C, \ LEA EBP , F4 [EBP] 8B C, D0 C, \ MOV EDX , EAX 81 C, E2 C, 00 C, 00 C, 00 C, FF C, \ AND EDX , # FF000000 C1 C, EA C, 18 C, \ SHR EDX , 18 89 C, 55 C, 08 C, \ MOV 8 [EBP] , EDX 8B C, D0 C, \ MOV EDX , EAX 81 C, E2 C, 00 C, 00 C, FF C, 00 C, \ AND EDX , # FF0000 C1 C, EA C, 10 C, \ SHR EDX , 10 89 C, 55 C, 04 C, \ MOV 4 [EBP] , EDX 8B C, D0 C, \ MOV EDX , EAX 81 C, E2 C, 00 C, FF C, 00 C, 00 C, \ AND EDX , # FF00 C1 C, EA C, 08 C, \ SHR EDX , 8 89 C, 55 C, 00 C, \ MOV 0 [EBP] , EDX 81 C, E0 C, FF C, 00 C, 00 C, 00 C, \ AND EAX , # FF ] ; : 4I [ 8B C, 55 C, 08 C, \ MOV EDX , 8 [EBP] C1 C, E2 C, 18 C, \ SHL EDX , 18 0B C, C2 C, \ OR EAX , EDX 8B C, 55 C, 04 C, \ MOV EDX , 4 [EBP] C1 C, E2 C, 10 C, \ SHL EDX , 10 0B C, C2 C, \ OR EAX , EDX 8B C, 55 C, 00 C, \ MOV EDX , 0 [EBP] C1 C, E2 C, 08 C, \ SHL EDX , 8 0B C, C2 C, \ OR EAX , EDX 8D C, 6D C, 0C C, \ LEA EBP , C [EBP] ] ; Можно и так тупо переписать. Но лучше немного времени посвятить ассемблеру. |
Автор: | Sotnik [ Пт фев 04, 2022 00:38 ] |
Заголовок сообщения: | Re: битовые накопительные массивы |
chess писал(а): Но лучше немного времени посвятить ассемблеру. Вспомнить надо. Сейчас есть примеры. Спасибо. >> по поиску нашёл 14 (четырнацать) файлов.f с именем *asm*.f >> какой подключать? Что выбрать? |
Автор: | chess [ Пт фев 04, 2022 11:14 ] |
Заголовок сообщения: | Re: битовые накопительные массивы |
Sotnik писал(а): Что выбрать? SPF4\lib\ext\spf-asm.f |
Автор: | chess [ Вс фев 06, 2022 18:03 ] |
Заголовок сообщения: | Re: битовые накопительные массивы |
Для преобразования кода слов, написанных на ассемблере(а ассемблер у каждого может быть свой), в текст, который поймет транслятор форт-системы, можно использовать что-то вроде этого: Код: : code->txt { xt } HEX ." : NAME" CR ." [" xt 200 aDO I xt - 8 MOD 0= IF CR THEN I C@ DUP 0xC3 <> IF 2 .0 ." C, " ELSE DROP LEAVE THEN LOOP CR ." ]" CR ." ;" CR ; Пример использования: Код: : I4 ( u32 -> a b c d ) $ -C Pa D=A $ FF000000 D&# $ 18 #D>> $ 8 @P=D D=A $ FF0000 D&# $ 10 #D>> $ 4 @P=D D=A $ FF00 D&# $ 8 #D>> $ 0 @P=D $ FF A&# ; ' I4 code->txt LOG Код: : NAME [ 8D C, 6D C, F4 C, 8B C, D0 C, 81 C, E2 C, 00 C, 00 C, 00 C, FF C, C1 C, EA C, 18 C, 89 C, 55 C, 08 C, 8B C, D0 C, 81 C, E2 C, 00 C, 00 C, FF C, 00 C, C1 C, EA C, 10 C, 89 C, 55 C, 04 C, 8B C, D0 C, 81 C, E2 C, 00 C, FF C, 00 C, 00 C, C1 C, EA C, 08 C, 89 C, 55 C, 00 C, 81 C, E0 C, FF C, 00 C, 00 C, 00 C, ] ; NAME можно затем заменить на любое имя. |
Страница 1 из 5 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |