Вниз
Скачать: 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.021 c
8-1074421391
DoMenos
2004-01-18 13:23
2004.04.25
Статьи по Direct3D


1-1081254208
hgd
2004-04-06 16:23
2004.04.25
Перемещение компонента внутри другого


3-1080548078
ossa
2004-03-29 12:14
2004.04.25
Как и с помощью каких компонентов происходит работа с PL/SQL и


8-1074505092
vantage10
2004-01-19 12:38
2004.04.25
TImage отображение Jpeg


1-1081603595
Ilg
2004-04-10 17:26
2004.04.25
Максимальное количество строк в Memo




   Наверх