Сейчас на форуме: user99, _MBK_, ManHunter, Magister Yoda, rtsgreg1989 (+9 невидимых) |
![]() |
eXeL@B —› Основной форум —› Объясните как перевести на Паскаль |
Посл.ответ | Сообщение |
|
Создано: 14 октября 2005 17:34 · Личное сообщение · #1 Здравствуйте! Имею такой кусок: 00403656 |. BF 08000000 |MOV EDI,8 0040365B |. 83C8 FF |OR EAX,FFFFFFFF 0040365E |. 8A140A |MOV DL,BYTE PTR DS:[EDX+ECX] В DL заносится первый символ имени 00403661 |> D1E0 |/SHL EAX,1 00403663 |. D0E2 ||SHL DL,1 00403665 |. 8BC8 ||MOV ECX,EAX 00403667 |. 8ADA ||MOV BL,DL 00403669 |. C1E9 17 ||SHR ECX,17 0040366C |. 81E1 80000000 ||AND ECX,80 00403672 |. 81E3 80000000 ||AND EBX,80 00403678 |. 33CB ||XOR ECX,EBX 0040367A |. 74 05 ||JE SHORT RCube.00403681 0040367C |. 35 2083B8ED ||XOR EAX,EDB88320 00403681 |> 4F ||DEC EDI 00403682 |.^75 DD |\JNZ SHORT RCube.00403661 Например, пусть первый символ будет "А", пройдя весть этот код, в EAX будет: 91711080 Подскажите, как этот код перевести на Паскаль. Меня смущают такие команды: 00403661 |> D1E0 |/SHL EAX,1 00403663 |. D0E2 ||SHL DL,1 ~~~~~~~~~~~~~~~~~ 00403669 |. C1E9 17 ||SHR ECX,17 0040366C |. 81E1 80000000 ||AND ECX,80 00403672 |. 81E3 80000000 ||AND EBX,80 ![]() |
|
Создано: 14 октября 2005 17:40 · Личное сообщение · #2 |
|
Создано: 14 октября 2005 17:44 · Личное сообщение · #3 |
|
Создано: 14 октября 2005 17:56 · Личное сообщение · #4 |
|
Создано: 14 октября 2005 18:02 · Личное сообщение · #5 |
|
Создано: 14 октября 2005 18:03 · Личное сообщение · #6 пиши на паскале так: var chislo: integer; sdvig: byte; begin chislo:=ord('A'); //к примеру sdvig:=17; //к примеру asm push eax //на всякий случай mov eax, chislo shl eax, sdvig and eax, 80 shr eax, sdvig pop eax //на всякий случай end; end; ----- Никогда не делай то, что возможно. Стремись сделать то что невозможно впринципе! ![]() |
|
Создано: 14 октября 2005 18:10 · Личное сообщение · #7 |
|
Создано: 14 октября 2005 18:12 · Личное сообщение · #8 |
|
Создано: 14 октября 2005 18:32 · Личное сообщение · #9 |
|
Создано: 14 октября 2005 18:49 · Личное сообщение · #10 да я пример для дельфей кинул... если чистый паскал - попробуй использовать 16 разрядные регистры... скажу чессно - никогда на досовском паскале не писал и не изучал... но думаю там по сравнению с дельфями моло различий в работе стандартными способами ----- Никогда не делай то, что возможно. Стремись сделать то что невозможно впринципе! ![]() |
|
Создано: 14 октября 2005 20:20 · Личное сообщение · #11 AVE А точнее можно наисать какой пасовский компилятор юзаешь? Если BP 7.0 или TP 7.0, то делать asm-вставки с 32-битными регистрами не получится(EAX, EBX...). В зависимости от логики проги нужно заменить 32-битные регистры на 16-битные(если это не приведет к потерям) либо заменять регистры на переменные и полностью все переводить на Pascal. И еще: не пойму для чего EDI; обычно в нем адрес строки, но здесь на это не похоже. ![]() ![]() |
|
Создано: 14 октября 2005 20:24 · Личное сообщение · #12 |
|
Создано: 15 октября 2005 02:18 · Личное сообщение · #13 |
|
Создано: 15 октября 2005 09:20 · Личное сообщение · #14 |
|
Создано: 15 октября 2005 11:20 · Личное сообщение · #15 |
|
Создано: 15 октября 2005 11:30 · Личное сообщение · #16 |
|
Создано: 15 октября 2005 13:51 · Личное сообщение · #17 xShadow пишет: В паскле нет 32-х битных регистров но можно записать всё опкодами Простите, это как? ![]() var EDI,EAX,ECX ![]() DL,BL:byte; begin ... EAX:=EAX or $FFFFFFFF; DL:=Str[1]; // наша строка for EDI:=8 DOWNTO 0 Do begin EAX:=EAX shl 1; DL:= Dl shl 1; ECX:=(EAX SHR $17) and $80; BL:=DL and $80; if (ECX xor EBX)=0 then eax:=eax xor $EDB88320 end; Могут быть в синтаксисе ошибки, проверь сам ----- Подписи - ЗЛО! Нужно убирать! ![]() |
|
Создано: 15 октября 2005 15:31 · Личное сообщение · #18 xShadow пишет: В паскле нет 32-х битных регистров но можно записать всё опкодами. nice пишет: Простите, это как? Вы для начала определитесь, о каком "Паскале" вы говорите ;) Если на то пошло, то в стандартном Паскале (если под этим понимать стандарт) вообще нет асм-вставок, и shl/shr - тоже нет. ----- crypto.freak ![]() |
|
Создано: 15 октября 2005 15:45 · Поправил: xShadow · Личное сообщение · #19 |
|
Создано: 15 октября 2005 16:19 · Личное сообщение · #20 |
|
Создано: 15 октября 2005 17:18 · Поправил: nice · Личное сообщение · #21 |
![]() |
eXeL@B —› Основной форум —› Объясните как перевести на Паскаль |