| Сейчас на форуме: 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  WORD;
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 —› Основной форум —› Объясните как перевести на Паскаль | 










 Для печати