Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.023 c
1-1081265591
Pahan_
2004-04-06 19:33
2004.04.25
Рисование на TToolBar


14-1080635255
able
2004-03-30 12:27
2004.04.25
WIndows 2003 server


3-1080545540
Dr.Karter
2004-03-29 11:32
2004.04.25
Работа с базой Access глазами Delphi


14-1080798965
MBo
2004-04-01 09:56
2004.04.25
Тенденции...


14-1080634026
Фикус
2004-03-30 12:07
2004.04.25
Вопрос по Excel




   Наверх