Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.25;
Скачать: CL | DM;

Вниз

Asm --> Delphi   Найти похожие ветки 

 
Andy BitOff ©   (2004-03-30 01:11) [0]

Здравствуйте.
Подскажите как оформить этот код в дельфях. В принципе все работает и меня вполне устраивает, но чисто из спортивного интереса.

var
 p:Pointer;
 h:hFile;
 a,b:integer;
 s:string;
begin
 GetMem(p,19);
 try
   h:=_lopen(PChar(s),OF_READ);
   _lread(h,p,19);
   asm
     mov edx,p
     mov ecx,0dh;
     cmp byte ptr [edx+ecx],0
     jz @loop1
     inc ecx
     xor eax,eax
     mov ah, [edx+ecx]
     inc ecx
     mov al, [edx+ecx]
     mov a,eax
     inc ecx
     mov ah, [edx+ecx]
     inc ecx
     mov al, [edx+ecx]
     mov b,eax
     jmp @loop2
   @loop1:
     mov a,-1
     mov b,-1
   @loop2:
   end;
   _lclose(h);
   if a<>-1 then begin
     s:=s+"  ===  "+IntToStr(a)+"x"+IntToStr(b);
   end;
 finally
   FreeMem(p);
 end;
end;


Мне иногда (довольно часто) проще оформить некоторый кусок на асме, чем на дельфях. Но для самосовершенствования всетаки хочется знать как?
Происходит здесь следующее. Читается из jpg"а информация о DPI. По смещению 0Dh от начала файла - boolean (есть или нет инфа), затем сама информация, два числа в виде word"а, причем не как обычно, а hi,low т.е. 257=0100 (в файле). Ну вообщем и все. Загвоздка была именно в word"е и не стандартном расположении в памяти.
Покажите какой-нибудь красивый вариант, если, конечно, не влом.


 
lyeh ©   (2004-03-30 03:22) [1]

Между запятыми, плюсами и прочей ботвой делай пробелы, например

if a<>-1 then begin
s:=s+"  ===  "+IntToStr(a)+"x"+IntToStr(b);
 end;

будет красивее так

if a <> -1 then
begin
 s := s + "  ===  " + IntToStr(a) + "x" + IntToStr(b);
end;


 
MBo ©   (2004-03-30 06:38) [2]

проще всего воспользоваться TFileStream
Position
Read(Boolvar)
Read(Wordvar)

того же можно достичь и с помощью более низкоуровневых файловых операций
CreateFile- ReadFile
FileOpen-FileRead
и т.д.


 
MBo ©   (2004-03-30 06:39) [3]

P.S. Обзор методов можно посмотреть в уроках А.Подгорецкого в Лицее delphikingdom.ru


 
Digitman ©   (2004-03-30 09:15) [4]


> Andy BitOff


считываемое значение имеет иной порядок байт ?

все что тебе требовалось - прочитать слово в буфер типа word и выполнить Swap()

для чего здесь потребовалось мудрить с asm - ума не приложу



Страницы: 1 вся ветка

Текущий архив: 2004.04.25;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.033 c
7-1077820225
Vince
2004-02-26 21:30
2004.04.25
Опрос COM-порта под Win9x


1-1081267867
an-na2002
2004-04-06 20:11
2004.04.25
сохранение в файл


14-1080798086
Polevi
2004-04-01 09:41
2004.04.25
MS Open Sourse


3-1080536840
Olegka
2004-03-29 09:07
2004.04.25
надо в инсталл проги вставить инсталл Firebird.


9-1067535623
delpher_gray
2003-10-30 20:40
2004.04.25
Алгоритм A*