Главная страница
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.48 MB
Время: 0.021 c
1-1081230177
Tornado
2004-04-06 09:42
2004.04.25
Можно ли использовать *.chm-файл?


1-1081620253
Liona
2004-04-10 22:04
2004.04.25
Как главную форму положить под все окна приложения?


8-1074944902
_MAD_
2004-01-24 14:48
2004.04.25
работа с bmp


3-1080547927
Rule
2004-03-29 12:12
2004.04.25
Я в расстеряности, что деласть со связаными таблицами в IBX????


7-1077792734
Petrovitch
2004-02-26 13:52
2004.04.25
Установить курсор в нужную позицию Формы (X,Y) ???