помоему так Код (Text): begin w2350:=w233C shr 3; w2390 := w2338 + w2350; w2394:=w233C+7; w2360:=8; w2394:w2360 - w2394; w2368:=0; if w2394 < w2340 then begin w2350:=w2350 + 1; w2360:=$FF; w2364:=w2360 + w2394; if w2390 < w2398 then read (bp_4,b_24C3); w2398:=w2390; else begin w2364:=b_234C; w2390:=w2390 + 1; w2358:= w2364 + w235C; w2368:= w2394 + w2368; w2340:=w2340 - w2394; w2394:=8; end; end; else w2358 :=w2368 + w2340; w2368:=w2350 + w2338; if w2368 < w2398 then read (bp_4,b_243C); w2398:= w2368; else begin w235C :=b_243C; w2364:=w2394 - w2340; w2360:=w235C + w2364; w2364:=$ff; w2368:=w2364 + w2340; w2368:= w2360 + w235C; end; end.
Esbolov Ну что неплохо. Ты часть логических операций "переврал" - сложение написал. И там где у тебя куча end, на самом деле хитрая конструкция : if ...... then do ..... while ..... Код (Text): pocedure sub_0(fil); begin w2350:=w233C shr 3; w2390 := w2338 + w2350; w2394:=w233C and $7; //*** w2360:=8; w2394:=w2360 - w2394; w2368:=0; if w2394 < w2340 then do //**** w2350:=w2350 + 1; w2360:=$FF; w2364:=w2360 shl w2394; // *** w235c:=not w2364; if w2390 < w2398 then begin // *** read (fil,b_243C); w2398:=w2390; end; w2364:=b_243C; //*** w2390:=w2390 + 1; w2358:= w2364 and w235C; //*** w2368:= w2368 shl w2394; w2340:=w2340 - w2394; w2394:=8; // ***** w2368 :=w2368 or w2358; // *** while w2394 < w2340 //*** *********************************************** //*** помечены исправления до конца сил не хватило...
Код (Text): sub_0(file) { dword_2350 := dword_233C shr 3; dword_2390 := dword_2338 + dword_2350; dword_2394 := dword_233C and 7; dword_2360 := 8; dword_2394 := dword_2360 - dword_2394: dword_2368 := 0; while (dword_2394 < dword_2340) do begin Inc(dword_2350); dword_2360 := $FF; dword_2364 := dword_2360 shl dword_2394; dword_235C := not dword_2364; if (dword_2398 < dword_2390) or (dword_2398 = 0) then begin Read(file, @byte_243C); dword_2398 := dword_2390; end; dword_2364 := byte_243C; Inc(dword_2390); dword_2358 := dword_2364 and dword_235C; dword_2368 := dword_2368 shl dword_2394; dword_2340 := dword_2340 - dword_2394; dword_2394 := 8; dword_2368 := dword_2368 or dword_2358; end; dword_2358 := dword_2368 shl dword_2340; dword_2368 := dword_2338 + dword_2350; if (dword_2398 < dword_2368) or (dword_2398 = 0) then begin Read(file, @byte_243C); dword_2398 := dword_2368; end; dword_235C := byte_243C; dword_2364 := dword_2394 - dword_2340; dword_2360 := dword_235C shr dword_2364; dword_2364 := $FF; dword_2368 := dword_2364 shl dword_2340; dword_235C := not dword_2368; dword_2368 := dword_2360 and dword_235C; dword_2390 := dword_2358 or dword_2368; } Дежавю...
проверьте это так Код (Text): begin w236C:=w2338; w2370:=w233C; w2374:=w2340; w237C:=0; w2338:=w2370; w233C:=0; w2340:=8; sub_0(arg_0); w2338:=w2370; w2338:=8; w2340:=8; sub_0(arg_0); w2384:=w2390; if w2374 < w2376 then w2338 := w2370; w233C:=w2378; w2340:=1; sub_0(arg_0); w2394:=1; w2378:=w2378+1; if w2394=0 then w233c:=w2378; w2340:=w2388; w2338:=w2370; sub_0(arg_0); w2380:=w2390; w2338:=w2370; w2378:=w2378+w2388; w233C:=w2378; w2340:=w2384; sub_0(arg_0); w2378:=w2378+w2384; w2348:=w2390+3; if w2380>w237c then begin w2364:=w237c+w2348; if w2364 < w2374 then w234c:=w2348; w2390:=$FFFF; else if w234c > 0 or w2358=0 or 2350<>0 then w2358:=0; else w2358:=1; w2350:w234c shr 3; w2344:=0; end; else begin w2394:=w237c - w2380; w2394:= w236c + w2394; w2390:= w236c + w237c; w2344:w2350 shl 3; end; seek(arg_0,w2396); read(arg_0,var_202[1]); w2364:=var_202[1]; seek(arg_0,w2392); var_202[1]:=w2364; write(arg_0,var_202[1]); seek(arg_202,w2394+1); read(arg_0,var_202[1]); w2360:=var_202[1]; seek(arg_0,w2390+1); var_202[1]:=w2360; write(arg_0,var_202[1]); seek(arg_0,w2394+2); read(arg_0,var_202[1]); w235c:=var_202[1]; seek(arg_0,w2390+2); var_202[1]:=w235c; write(arg_0,var_202[1]); seek(arg_0,w2394+3); read(arg_0,var_202[1]); 2358:=var_202[1]; seek(arg_0,2390+3); var_202[1]:=w2358; seek(arg_0,w2394+4); read(arg_0,var_202[1]); w2360:=var_202[1]; seek(arg_0,2390+4); var_202[1]:=w2360; write(arg_0,var_202[1]); seek(arg_0,w2394+5); read(arg_0,var_202[1]); w235c:=var_202[1]; var_202[1]:=w235c; seek(arg_0,w2390+5); write(arg_0,var_202[1]); seek(arg_0,w2394+6); read(arg_0,var_202[1]); w2358:=var_202[1]; var_202[1]:=w2358; seek(arg_0,w2390+6) write(arg_0,var_202[1]); seek(arg_0,w2394+7); read(arg_0,var_202[1]); w2368:=var_202[1]; var_202[1]:=w2368; seek(arg_0,w2390+7); write(arg_0,var_202[1]); w2390:=w2390+8; w2394:=w2394+8; w2350:=w2350-1; w2350:=234c+7; w2394:=w2380-w237c; w2394:=w2394+w2344; w2394:=w2394+w236c; w2390:=w2344+w237c; w2390:=w2390+w236c; w2390:=w2390+1; w2394:=w2394+1; seek(arg_0,w2394-1); read(arg_0,var_202[1]); w2360:=var_202[1]; w2350:=w2350-1; seek(arg_0,w2390-1); var_202[1]:=w2360; write(arg_0,var_202[1]); w237c:=w2348+w237c; else begin w233c:=2378; w2340:=8; w2338:=w2370; loc_0(arg_4); w2378:=w2378+8; w2380:=w236c+w237c; w237c:=w237c+1; var:_202[1]:=w2390; seek(arg_0,w2382); write(arg_0,var_202[1]); end; else Close(arg_4); end.
ну что есть у каго данныи процедура sub_2E4 вот процедура PROGRAM Код (Text): uses dos; var Count : Word; tmpStr : String; word_One: Word; cur_Byte: Byte; fInf : File of Byte; fOut : File of Byte; tmp1 : Byte; tmp2 : Byte; tmp3 : Byte; tmp4 : Byte; wTmp1 : Word; wTmp2 : Word; lArr1 : array[1..20] of longint; lArr2 : array[1..20] of longint; var l_2338 : longint; l_233C : longint; l_2340 : longint; l_2344 : longint; l_2348 : longint; l_234C : longint; l_2350 : longint; l_2354 : longint; l_2358 : longint; l_235C : longint; l_2360 : longint; l_2364 : longint; l_2368 : longint; l_2390 : longint; l_2394 : longint; l_236C : longint; l_2370 : longint; l_2374 : longint; l_2378 : longint; l_237C : longint; l_2380 : longint; l_2384 : longint; l_2388 : longint; l_2398 : longint; procedure sub_2E4(var fI, fO); begin end; procedure Programm; var var_2: Word; var_102: array[0..99] of Byte; begin Assign(fInf, 'main.img'); Reset(fInf); Count := 0; while (true) do begin { loc_CFE } Read(fInf, cur_Byte); Inc(Count); if cur_Byte = $A0 then begin { loc_D25 } Read(fInf, cur_Byte); if cur_Byte = $2 then begin { loc_D4C } { нашли сигнатуру 02A0h } Seek(fInf, Count-2); Read(fInf, cur_Byte); Writeln(0, cur_Byte, ' ', Count); var_2 := cur_Byte; if var_2 > 1 then begin { loc_DD5 } for word_One := 1 to var_2 do begin Seek(fInf, (word_One shl 4)+(Count-$0D)); Read(fInf, tmp1, tmp2, tmp3, tmp4); wTmp1 := tmp2+(tmp1 shl 8); wTmp2 := tmp4+(tmp3 shl 8); lArr1[word_One] := wTmp1*$10000+wTmp2; Seek(fInf, (word_One shl 4) + (Count-9)); Read(fInf, tmp1, tmp2, tmp3, tmp4); wTmp1 := tmp2+(tmp1 shl 8); wTmp2 := tmp4+(tmp3 shl 8); lArr2[word_One] := wTmp1*$10000+wTmp2; Writeln('off=', lArr1[word_One], ' ', lArr2[word_One]); end; {for} end; { loc_F9E: } var_2 := cur_Byte; if var_2 > 1 then begin { loc_FB1 } for word_One := 1 to var_2 do begin Str(word_One, tmpStr); if word_One < 10 then tmpStr := '0'+tmpStr; tmpStr := 're.'+tmpStr; Assign(fOut, tmpStr); ReWrite(fOut); l_2338 := 0; l_233C := 0; l_2340 := 0; l_2344 := 0; l_2348 := 0; l_234C := 0; l_2350 := 0; l_2354 := 0; l_2358 := 0; l_235C := 0; l_2360 := 0; l_2364 := 0; l_2368 := 0; l_2390 := 0; l_2394 := 0; l_236C := 0; l_2370 := 0; l_2374 := 0; l_2378 := 0; l_237C := 0; l_2380 := 0; l_2384 := 0; l_2388 := 0; l_2368 := $0B; l_236C := $28; l_2364 := 1; l_235C := 0; l_2338 := 0; l_233C := l_2374 + l_235C; { ! } l_2340 := lArr2[word_One]; l_2398 := 0; Reset(fInf); Seek(fInf, lArr1[word_One]); sub_2E4(fInf, fOut); Close(fOut); end; { for } end; { loc_11B2: } Halt(0); end else Inc(Count); end; end; {while(true)} end; begin Programm; end. а коды на асамблере прекрепил типерь нужен только процедура sub_2E4 кто нибудь поможет
Esbolov Сказал волшебное слово. Хочется процитировать птичку Тари Вот код, я его не проверял (ес-но, это теперь твоя задача). Сам разбирайся, только мне вопросов про Buf не задавай - это теперь твой геморрой. Код (Text): procedure sub_2E4(...) begin dword_236C := dword_2338; dword_2370 := dword_233C; dword_2374 := dword_2340; dword_237C := 0; dword_2338 := dword_2370; dword_233C := 0; dword_2340 := 8; loc_0(arg_4); dword_2388 := dword_2390; dword_2338 := dword_2370; dword_233C := 8; dword_2340 := 8; loc_0(arg_4); dword_2378 := 16; dword_2384 := dword_2390; while dword_237C < dword_2374 do begin dword_2338 := dword_2370; while 1 do begin dword_233C := dword_2378; dword_2340 := 1; loc_0(arg_4); dword_2394 := 1; Inc(dword_2378); if dword_2390 <> dword_2394 then break; dword_233C := dword_2378; dword_2340 := dword_2388; dword_2338 := dword_2370; loc_0(arg_4); dword_2380 := dword_2390; dword_2338 := dword_2370; dword_2378 := dword_2378 + dword_2388; dword_233C := dword_2378; dword_2340 := dword_2384; loc_0(arg_4); dword_2378 := dword_2378 + dword_2384; dword_2348 := dword_2390 + 3; if dword_237C < dword_2380 then begin Close(arg_4); Exit; end; dword_2364 := dword_237C + dword_2348; if dword_2374 >= dword_2364 then begin dword_2390 := -1; Close(arg_4); Exit; end; else dword_234C := dword_2348; if dword_234C <= 0 then dword_2358 := 1; else dword_2358 := 0; if dword_2358 <> 0 then dword_234C := 0; dword_2350 := dword_234C Shr 3; dword_2344 := 0; if dword_2350 <> 0 then begin dword_2394 := dword_237C - dword_2380 + dword_236C; dword_2390 := dword_236C + dword_237C; dword_2344 := dword_2350 Shl 3; repeat Seek(arg_0, dword_2394); Read(arg_0, Buf); dword_2364 := Buf[1]; Seek(arg_0, dword_2390); Buf[1] := dword_2364; Write(arg_0, Buf); Seek(arg_0, dword_2394 + 1); Read(arg_0, Buf); dword_2360 := Buf[1]; Seek(arg_0, dword_2390 + 1); Buf[1] := dword_2360; Write(arg_0, Buf); Seek(arg_0, dword_2394 + 2); Read(arg_0, Buf); dword_235C := Buf[1]; Seek(arg_0, dword_2390 + 2); Buf[1] := dword_235C; Write(arg_0, Buf); Seek(arg_0, dword_2394 + 3); Read(arg_0, Buf); dword_2358 := Buf[1]; Seek(arg_0, dword_2390 + 3); Buf[1] := dword_2358; Write(arg_0, Buf); Seek(arg_0, dword_2394 + 4); Read(arg_0, Buf); dword_2360 := Buf[1]; Seek(arg_0, dword_2390 + 4); Buf[1] := dword_2360; Write(arg_0, Buf); Seek(arg_0, dword_2394 + 5); Read(arg_0, Buf); dword_235C := Buf[1]; Buf[1] := dword_235C; Seek(arg_0, dword_2390 + 5); Write(arg_0, Buf); Seek(arg_0, dword_2394 + 6); Read(arg_0, Buf); dword_2358 := Buf[1]; Buf[1] := dword_2358; Seek(arg_0, dword_2390 + 6); Write(arg_0, Buf); Seek(arg_0, dword_2394 + 7); Read(arg_0, Buf); dword_2368 := Buf[1]; Buf[1] := dword_2368; Seek(arg_0, dword_2390 + 7); Write(arg_0, Buf); Inc(dword_2390, 8); Inc(dword_2394, 8); Dec(word_2350); until dword_2350 = 0; end; dword_2350 := dword_234C And 7; dword_2394 := dword_237C - dword_2380; if dword_2350 <> 0 then begin dword_2394 := dword_2394 + dword_2344 + dword_236C; dword_2390 := dword_237C + dword_2344 + dword_236C; repeat Inc(dword_2390); Inc(dword_2394); Seek(arg_0, dword_2394 - 1); Read(arg_0, Buf); dword_2360 := Buf[1]; Dec(dword_2350); Seek(arg_0, dword_2390 - 1); Buf[1] := dword_2360; Write(arg_0, Buf); until dword_2350 = 0; end; dword_237C := dword_237C + dword_2348; if dword_237C >= dword_2374 then begin Close(arg_4); Exit; end; dword_2338 := dword_2370; end; //while 1 dword_233C := dword_2378; dword_2340 := 8; dword_2338 := dword_2370; loc_0(arg_4); Inc(dword_2378, 8); dword_2380 := dword_236C + dword_237C; Inc(dword_237C); Buf[1] := dword_2390; Seek(arg_0, dword_2380); Write(arg_0, Buf); end; Close(arg_4); end;
crypto Скорее мой. Хотя Esbolov кое-что и сам сделал - молодец. Жаль у меня пока настроения нет этим заняться. Кстати, есть и сама прога - может займешься на досуге. Пожалуйста
crypto блогодарен я вам за помащь valterg тебе тоже блогодарен работаю и учусь вродебы нормально получается если какито предложение будут по компоновке выкладоваите а я как только 3 блока скомпаную выложу сюда блогодарен всем кто мне помогал с уважением Esbolov
народ вот что уменя получилась только я не мог разобратся с Buf это переменая или всетаки масив Buf[1] укаго что есть
народ если убрать этот ветвление то программа запустится но будет пропускать некоторыие символы dword_2390 := -1; Close(fI); Exit;