Форум: "Потрепаться";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.172 c