Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #31  
Старый 26.04.2013, 20:52
DrGeorg DrGeorg вне форума
Прохожий
 
Регистрация: 26.04.2013
Сообщения: 38
Версия Delphi: RAD Studio XE3
Репутация: 10
По умолчанию

Пришел к выводу, что ассемблерный код не читабелен и ужасен - надо искать альтернативу...
Код:
DD $F983460E,$C12B7310,$828D02E9,$FFFFF7FF,$C933C12B,$C1460E8A,$C12B02E1,$8840088A,$88A420A,$420A8840
__________________
Все смелые до begin...

Последний раз редактировалось DrGeorg, 26.04.2013 в 21:03.
Ответить с цитированием
  #32  
Старый 26.04.2013, 21:12
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

это не ассемблерный код.
А на кой тебе его читать?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #33  
Старый 26.04.2013, 21:39
DrGeorg DrGeorg вне форума
Прохожий
 
Регистрация: 26.04.2013
Сообщения: 38
Версия Delphi: RAD Studio XE3
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
это не ассемблерный код.
А на кой тебе его читать?
1. А что-же еще?:
Код:
asm
  DB $51
  DD $458B5653,$C558B08,$F08BD003,$33FC5589,$144D8BD2,$68A1189,$3C10558B,$331C7611,$83C88AC9
  DD $8346EFC1,$820F04F9,$1C9,$8846068A,$75494202,$3366EBF7,$460E8AC9,$F10F983,$8D83,$75C98500,$8107EB18
  DD $FFC1,$3E804600,$33F47400,$83068AC0,$C8030FC0,$83068B46,$28904C6,$4904C283,$F9832F74,$8B217204,$83028906
  DD $C68304C2,$4E98304,$7304F983,$76C985EE,$46068A14,$49420288,$9EBF775,$8846068A,$75494202,$8AC933F7
  DD $F983460E,$C12B7310,$828D02E9,$FFFFF7FF,$C933C12B,$C1460E8A,$C12B02E1,$8840088A,$88A420A,$420A8840
  DD $288008A,$113E942,$F9830000,$8B207240,$FF428DD9,$8302EBC1,$C32B07E3,$1E8ADB33,$3E3C146,$2B05E9C1
  DD $D9E949C3,$83000000,$2F7220F9,$851FE183,$EB1875C9,$FFC18107,$46000000,$74003E80,$8AC033F4,$1FC08306
  DD $F46C803,$FBC11EB7,$FF428D02,$C683C32B,$8369EB02,$457210F9,$D98BC28B,$C108E383,$C32B0BE3,$8507E183
  DD $EB1875C9,$FFC18107,$46000000,$74003E80,$8ADB33F4,$7C3831E,$F46CB03,$FBC11EB7,$83C32B02,$D03B02C6
  DD $9A840F,$2D0000,$EB000040,$2E9C11F,$2BFF428D,$8AC933C1,$E1C1460E,$8AC12B02,$A884008,$88008A42
  DD $51EB4202,$7206F983,$2BDA8B37,$4FB83D8,$188B2E7C,$8904C083,$4C2831A,$8B02E983,$831A8918,$C08304C2
  DD $4E98304,$7304F983,$76C985EE,$40188A20,$49421A88,$15EBF775,$8840188A,$188A421A,$421A8840,$8840188A
  DD $7549421A,$8AC933F7,$E183FE4E,$FC98503,$FFFE4284,$46068AFF,$49420288,$C933F775,$E9460E8A,$FFFFFECA
  DD $8B10552B,$10891445,$75FC753B,$EBC03304,$FFF8B80D,$753BFFFF,$830372FC,$5B5E04C0,$90C35D59
end;
Ключевое слово asm вам ни чего не говорит?

2. Читаю не я, а компилятор и процессор.
__________________
Все смелые до begin...
Ответить с цитированием
  #34  
Старый 26.04.2013, 22:11
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Это уже скомпилированный кусок кода. Просто если на асме его вставить, там портянка не на одну страницу выйдет, просто так короче и это работает.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #35  
Старый 26.04.2013, 22:56
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Интересное представление об ассемблере... Можно было и загуглить.
Это называется машинный код. Ассемблер - язык. А машинный код - набор байт. В ассемблере можно через директиву db/dd вписывать непосредственно байты, в данном случае машинный код.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #36  
Старый 26.04.2013, 23:42
DrGeorg DrGeorg вне форума
Прохожий
 
Регистрация: 26.04.2013
Сообщения: 38
Версия Delphi: RAD Studio XE3
Репутация: 10
По умолчанию

Благодарю за разъяснение, но все работает, только на больших файлах при распаковке иногда выдает ошибку - Access violation at address...

Код:
ms2.Size := lzodecompress(Byte(ms.Memory^), Byte(ms2.Memory^));

Цитата:
Сообщение от DrGeorg
Цитата:
http://yadi.sk/d/trb9HmQC4MM2m
Там в консоли надо ввести параметр:
zlop -7 или -8 или -9 "Путь\Имя Файла.расш"
или
zlop "Путь\Имя Файла.расш"
Поймешь разницу!
Просто после максимальной степени сжатия файла (параметр "-9") с последующей его распаковкой (при помощи функции lzo_decompress) появляется эта ошибка - видимо алгоритм распаковки другой...

Хорошо бы узнать какой?

Цитата:
Сообщение от M.A.D.M.A.N.
Я дописал, глянь мой пост. У меня вроде работает нормально, по крайней мере вход до сжатия совпадает с выходом после распаковки.
Если из памяти, то надо как-то так передавать параметр: integer(ptr^).
Максимальный размер файла после декомпрессии - 10240Кб!!!
Вернее при компрессии функция его обрезает!

Я так понял надо кусками файл загружать, только как реализовать?
__________________
Все смелые до begin...

Последний раз редактировалось M.A.D.M.A.N., 27.04.2013 в 12:35.
Ответить с цитированием
  #37  
Старый 27.04.2013, 11:51
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Оффтоп: Стесняюсь спросить , а вообще для чего нужно сжатие файлов, для экономии места или по криптографическим соображениям? Ведь с обычным файлом работать намного быстрее, чем с архивом. Непонятки.
Ответить с цитированием
  #38  
Старый 27.04.2013, 11:59
DrGeorg DrGeorg вне форума
Прохожий
 
Регистрация: 26.04.2013
Сообщения: 38
Версия Delphi: RAD Studio XE3
Репутация: 10
По умолчанию

Сов. верно - для экономии места если не сжать - выходной файл в 600Mb весить будет, а так на половину меньше! (Вернее, приблизительно на 43%).
Потом у меня такая позиция - загружаю архив в память, там его разжимаю, и вывожу от туда в текст на экран...
__________________
Все смелые до begin...

Последний раз редактировалось DrGeorg, 27.04.2013 в 12:09.
Ответить с цитированием
  #39  
Старый 27.04.2013, 12:18
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от DrGeorg
...выходной файл в 600Mb весить будет, а так на половину меньше!
Потом у меня такая позиция - загружаю архив в память, там его разжимаю, и вывожу от туда в текст на экран...
300Мб изначально, потом 600, машинке их надо загрузить, распаковать, вернуть обратно... это сколько же процесс загрузки будет так длиться, пользователь случайно не уснёт?

Что-то здесь в организации работы не так - походу надо или разбить контент на несколько частей, на группы, или может базой данных воспользоваться, машинку жалко, столько инфы переваривать каждый раз при запуске, жалко.
Ответить с цитированием
  #40  
Старый 27.04.2013, 12:21
DrGeorg DrGeorg вне форума
Прохожий
 
Регистрация: 26.04.2013
Сообщения: 38
Версия Delphi: RAD Studio XE3
Репутация: 10
По умолчанию

Я наверное не правильно объяснил: 600Mb занимает не один файл - их 10!!! И загружать надо не все подряд файлы, а какой нибудь один!
Дэ факто: 50Mb на файл - сёравно ощутимо!..
Вопрос в другом - как подгружать файл в память частями для распаковки этих частей по отдельности, короче как заставить перелопатить большой файл через эту функцию:
Код:
var
  ms, ms2: TMemoryStream;
  zs: TCompressionStream;
begin
  ms :=  TMemoryStream.Create;
  ms2 := TMemoryStream.Create;
//  zs := TCompressionStream.Create(ms2, zcMax);
  try
    ms.LoadFromFile('C:\qqq.lzo');
//    zs.CopyFrom(ms, ms.Size);
    ms2.Size := 1024*1024*10;
 
    ms2.Size := lzodecompress(Byte(ms.Memory^), Byte(ms2.Memory^));
    RichEdit1.LinesLoadFromStream(ms2);
  finally
    ms2.Free;
    ms.Free;
  end;
__________________
Все смелые до begin...

Последний раз редактировалось DrGeorg, 27.04.2013 в 12:37.
Ответить с цитированием
  #41  
Старый 27.04.2013, 12:37
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Дак во моем примере я 10 мегабайт памяти выделял под распакованные данные, (1024*1024*10), у тебя объем больше, вот и вылазить AV.

Чето совсем как-то печально у тебя с программированием.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #42  
Старый 27.04.2013, 12:39
DrGeorg DrGeorg вне форума
Прохожий
 
Регистрация: 26.04.2013
Сообщения: 38
Версия Delphi: RAD Studio XE3
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Чето совсем как-то печально у тебя с программированием.
Я случаем не ошибся адресом - раздел, кажется называется [ "Начинающим" ]?

Цитата:
Сообщение от M.A.D.M.A.N.
Дак во моем примере я 10 мегабайт памяти выделял под распакованные данные, (1024*1024*10), у тебя объем больше, вот и вылазить AV.
Я пробовал изменять эти параметры (вплоть до: Out of Memory) - не помогло!
__________________
Все смелые до begin...

Последний раз редактировалось DrGeorg, 27.04.2013 в 12:47.
Ответить с цитированием
  #43  
Старый 27.04.2013, 12:57
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Да, ошибся.
Для таких тяжелых случаев есть два раздела: "код на шару" и "работа".
Тем более у нас правило: один вопрос - одна тема.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #44  
Старый 27.04.2013, 13:02
DrGeorg DrGeorg вне форума
Прохожий
 
Регистрация: 26.04.2013
Сообщения: 38
Версия Delphi: RAD Studio XE3
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Да, ошибся.
Для таких тяжелых случаев есть два раздела: "код на шару" и "работа".
Тем более у нас правило: один вопрос - одна тема.
Да я читал: http://www.delphisources.ru/forum/forumdisplay.php?f=53
Прям уж таки и тяжелый?
Да у меня пробел по выделению блоков памяти...

Ok - разобрался, помогло - 1024*1024*1024
__________________
Все смелые до begin...

Последний раз редактировалось M.A.D.M.A.N., 27.04.2013 в 13:14.
Ответить с цитированием
  #45  
Старый 27.04.2013, 13:14
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Гиг памяти, не многовато?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:32.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter