Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2016, 06:30   #1
Виктор Шубин
 
Регистрация: 10.02.2016
Сообщений: 7
По умолчанию Поочередная запись в одну кучу.

Доброго вермени суток всем!
Дело такое, не пойму как организовать запись в кучу(heap) данные.

Получается, что есть переменная , данные которой нужно записать в конце цикла в кучу. Так вот, первый цикл понятно mov и готово... как быть с последующими циклами? Куча вообще позволяет запись своего пространства в несколько подходов, а потом вывод данных.

это из урока по ассемблеру: "Также можно заметно ускорить процесс шифрования, если помещать зашифрованные данные во временный буфер в оперативной памяти и только по заполнению буфера скидывать их на жесткий диск."

Надеюсь на помощь, так как уже вроде адресацию почитал (селекторы, дескрипторы..) но вот как бы не пытался организовать смещение в этой куче, получается ерунда...
Виктор Шубин вне форума Ответить с цитированием
Старый 10.02.2016, 06:41   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Может вы не знаете, но в куче спокойно можно размещать массивы. например...
p51x вне форума Ответить с цитированием
Старый 10.02.2016, 06:52   #3
Виктор Шубин
 
Регистрация: 10.02.2016
Сообщений: 7
По умолчанию

Я очень благодарен Вам за ответ, который толкает на мысль что запись в кучу все же реален отдельными фрагментами и образовавшееся целое поместить куда угодно. Но увы сути я не уловил.. прикажете читать, но что именно? (что бы понять как записать эти самые фрагменты, друг за другом, как будто я прделожение сочиняю, выдергивая из словаря непосредственно слова.)
Виктор Шубин вне форума Ответить с цитированием
Старый 10.02.2016, 07:24   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Если куча пугает своей природой, можно использовать список и/или динамический массив. Чувствуется Вам требуется коллекция/кортеж для физического перемещения данных .
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 10.02.2016, 10:27   #5
Виктор Шубин
 
Регистрация: 10.02.2016
Сообщений: 7
По умолчанию

Да нет же, не пугает куча, просто разобраться не могу. Иные способы оно конечно хорошо, но сансей сказал (как я понял) через кучу. По крайней мере в 7ом уроке, предыдущем, изучалась именно эта функция. И вот в том то весь и прикол, что изучалось это громко сказанно. Сколько бы не искал в нете по поводу записи в кучу, всякая фигня только вылазит с другой интерпритацие слова "куча"

в задаче читается файл с диска по 4 байта в буфер, далее буфер xor`ят и записывают в файл на диск. Моя задача перед записью сначала все скидать в кучу, а потом записать на диск. (для ускорения)

Последний раз редактировалось Виктор Шубин; 10.02.2016 в 10:32.
Виктор Шубин вне форума Ответить с цитированием
Старый 10.02.2016, 10:36   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Ну так познакомьтесь с функциями типа malloc/free, HeapAlloc/HeapFree, ... выделите память и пишите по указателю.

Буфер то у вас где? Статически описан?
p51x вне форума Ответить с цитированием
Старый 10.02.2016, 10:55   #7
Виктор Шубин
 
Регистрация: 10.02.2016
Сообщений: 7
По умолчанию

PHP код:
        include    'win32ax.inc'

        
include    'encoding\WIN1251.INC'

        
MEMSIZE    equ 12365530

        MAXSIZE    
=   260
        PASSIZE    
=   8

.data
        ernopass db 
'Ââåäèòå ïàðîëü!',0
        erdifpass db 
'Ïàðîëü è ïîäòâåðæäåíèå íå ñîâïàäàþò!',0
        erfsize db 
'Ôàéë ñëèøêîì áîëüøîé!',0
        erfname db 
'Ôàéë íå âûáðàí!',0
        bigfile db 
'Ôàéë äîâîëüíî áîëüøîé!',13,10
        db 
'Øèôðîâàíèå ìîæåò çàíÿòü ìíîãî âðåìåíè.',0
        success db 
'Óñïåøíî çàâåðøåíî!',0

        extname db 
'.crpt',0

        errtxt db 
'Êîä îøèáêè: %u',0
        errbuf rb 
$-errtxt+10

        fname1 rb MAXSIZE
        fname2 rb MAXSIZE

        pass1 rb PASSIZE
+1
        pass2 rb PASSIZE
+1

        buf dd 
?

        
passlen dd ?
        
hfile1 dd ?
        
hfile2 dd ?
       
temp dd ?
       
szformat db "%u",0
        temp2  dd 
?
        
temp1  dd ?

        
hheap      dd ?

        
pmem       dd ?

        
allfile    dd ?


        
ofn     OPENFILENAME sizeof.OPENFILENAME,,,,,,,fname1,MAXSIZE,,,,,\
                                    
OFN_FILEMUSTEXIST OFN_PATHMUSTEXIST OFN_EXPLORER

.code

start
:

        
invoke  GetModuleHandle,0
        mov     
[ofn.hInstance],eax

        invoke  DialogBoxParam
,eax,IDD_MAIN,HWND_DESKTOP,DialogProc,0

        invoke  ExitProcess
,0

        proc    DialogProc hwnddlg
,msg,wparam,lparam

        push    ebx esi edi

        cmp     
[msg],WM_INITDIALOG
        je      
.wminitdialog

        cmp     
[msg],WM_COMMAND
        je      
.wmcommand

        cmp     
[msg],WM_DROPFILES
        je      
.drop

        cmp     
[msg],WM_CLOSE
        je      
.wmclose

        
xor     eax,eax
        jmp     
.finish

.wminitdialog:

        
mov     eax,[hwnddlg]
        
mov     [ofn.hwndOwner],eax
        invoke  SendDlgItemMessage
, [hwnddlg], ID_PASS1EM_LIMITTEXTPASSIZE0

        invoke  SendDlgItemMessage
,[hwnddlg],ID_PASS2,EM_LIMITTEXT,PASSIZE,0

        jmp     
.processed

.wmcommand:

        
cmp     [wparam],ID_OPEN
        je      
.open

        cmp     
[wparam],ID_EXIT
        je      
.wmclose

        cmp     
[wparam],ID_CRYPT
        jne     
.finish
;=crypt=
        
cmp     [fname1],0
        je      
.erfname


        invoke  GetDlgItemText
, [hwnddlg], ID_PASS1pass1,PASSIZE+1

        cmp     
[pass1],0
        je      
.ernopass

        invoke  GetDlgItemText
,[hwnddlg],ID_PASS2,pass2,PASSIZE+1
        invoke  lstrcmp
pass1pass2

        test    eax
,eax
        jne     
.erdifpass

        invoke  lstrlen
pass1
        mov     
[passlen],eax

        invoke  CreateFile
,fname1,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,\
                                                                
FILE_ATTRIBUTE_NORMAL,0
        cmp     eax
,-1
        je      
.erfname
        mov     
[hfile1],eax

        invoke  GetFileSize
eax0

        cmp     eax
,-1
        je      
.erfilesize

        test    eax
,eax
        je      
.erfilesize

        mov     ebx
,eax
        mov     
[allfile],eax

        cmp     ebx
,500000h ;5MB
        jb      
.size_ok

        invoke  MessageBox
,[hwnddlg],bigfile,0,MB_OKCANCEL
        cmp     eax
,IDOK
        jne     
.hclose

.size_ok:
        
invoke  lstrcpyfname2fname1
        invoke  lstrcat
fname2extname
        test    eax
,eax
        je      
.erfname

        invoke  CreateFile
,fname2,GENERIC_WRITE,FILE_SHARE_READ,0,CREATE_ALWAYS,\
                                                                  
FILE_ATTRIBUTE_NORMAL,0
        cmp     eax
,-1
        je      
.erfname
        mov     
[hfile2],eax

        invoke  GetProcessHeap
        mov     
[hheap],eax
        invoke  HeapAlloc
, [hheap],HEAP_ZERO_MEMORY,MEMSIZE
        mov     
[pmem],eax

.crypt_cycle:

        
invoke  ReadFile,[hfile1],buf,4,temp1,0

        test    eax
,eax
        je      
.error

        
xor     edx,edx
        mov     eax
,ebx

        div     
[passlen]
        
add     edx,pass1

      
;  mov     al,[edx]
      ;  
mov     ah,[edx+1]
      ;  xor     
byte [buf], al
      
;  xor     byte [buf+1], ah
      
;  mov     al, [edx+2]
      ;  
mov     ah, [edx+3]
      ;  xor     
byte [buf+2], al
      
;  xor     byte [buf+3], ah


        mov      eax
,buf          ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        
mov      [pmem],eax
        sub ebx
, [temp1]


        
test    ebx,ebx
        jne     
.crypt_cycle

        invoke  WriteFile
,[hfile2],[pmem],10,temp2,0
        test    eax
,eax
        je      
.error

        invoke  HeapFree
,[hheap],0,[pmem]


        
invoke  CloseHandle,[hfile1]

        
invoke  CloseHandle,[hfile2]

        
invoke  SetFileAttributesfname1FILE_ATTRIBUTE_NORMAL

        invoke  DeleteFile
fname1

        test    eax
,eax
        je      
.error

        invoke  MoveFile
fname2fname1
        test    eax
,eax
        je      
.error

        invoke  MessageBox
,[hwnddlg],success,0,0
        jmp     
.processed

.ernopass:
        
invoke  MessageBox,[hwnddlg],ernopass,0,0
        jmp     
.processed

.erdifpass:
        
invoke  MessageBox,[hwnddlg],erdifpass,0,0
        jmp     
.processed
.erfname:
        
invoke  MessageBox,[hwnddlg],erfname,0,0
        jmp     
.processed

.erfilesize:
        
invoke  MessageBox,[hwnddlg],erfsize,0,0
        jmp     
.hclose

.error:
        
invoke  GetLastError
        invoke  wsprintf
,errbuf,errtxt,eax
        invoke  MessageBox
,[hwnddlg],errbuf,0,0

.hclose:
        
invoke  CloseHandle,[hfile1]
        
invoke  CloseHandle,[hfile2]
        
jmp     .processed

.drop:
        
invoke  DragQueryFile,[wparam],0,fname1,MAXSIZE
        jmp     
.new_file

.open:
        
invoke  GetOpenFileName,ofn
        test    eax
,eax
        je      
.processed

.new_file:
        
invoke  SetDlgItemText,[hwnddlg], ID_NAMESTRING,fname1
        jmp     
.processed

.wmclose:
        
invoke  EndDialog,[hwnddlg],0

.processed:
        
mov     eax,1

.finish:
        
pop     edi esi ebx
        ret
        endp

.end start

section 
'.rsrc' resource data readable
        IDD_MAIN       
100
        ID_NAMESTRING  
101
        ID_PASS1       
102
        ID_PASS2       
103
        ID_OPEN        
104
        ID_CRYPT       
105
        ID_EXIT        
109


        directory RT_DIALOG
,dialogs


        resource dialogs
,\
                 
IDD_MAIN,LANG_RUSSIAN+SUBLANG_DEFAULT,main_dialog

   dialog main_dialog
,'Ïðîñòåéøèé Øèôðîâàëüùèê',240,120,190,175,WS_CAPTION+WS_POPUP+WS_SYSMENU+ \
                                                                      
DS_MODALFRAME,WS_EX_ACCEPTFILES

       dialogitem 
'STATIC','&Ôàéë:',             -1,10,10,70,8WS_VISIBLE
       dialogitem 
'EDIT','',       ID_NAMESTRING,10,20,170,13,  WS_VISIBLE+WS_BORDERES_AUTOHSCROLL+ES_READONLY
       dialogitem 
'STATIC','&Ïàðîëü:',           -110,50,70,8,WS_VISIBLE
       dialogitem 
'EDIT','',            ID_PASS1,1060,60,13,  WS_VISIBLE+WS_BORDERWS_TABSTOP+ES_AUTOHSCROLL
       dialogitem 
'STATIC','&Ïîäòâåðæäåíèå:',    -110,80,70,8,WS_VISIBLE
       dialogitem 
'EDIT','',            ID_PASS2,1090,60,13,  WS_VISIBLE+WS_BORDERWS_TABSTOP+ES_AUTOHSCROLL
       dialogitem 
'BUTTON','&Îòêðûòü',   ID_OPEN,10,150,45,15,  WS_VISIBLE+WS_TABSTOPBS_DEFPUSHBUTTON
       dialogitem 
'BUTTON','&Øèôðîâàòü',ID_CRYPT,85,150,45,15,  WS_VISIBLE+WS_TABSTOPBS_DEFPUSHBUTTON
       dialogitem 
'BUTTON','Â&ûõîä',    ID_EXIT,135,150,45,15,  WS_VISIBLE+WS_TABSTOPBS_PUSHBUTTON
       enddialog 
Виктор Шубин вне форума Ответить с цитированием
Старый 10.02.2016, 10:57   #8
Виктор Шубин
 
Регистрация: 10.02.2016
Сообщений: 7
По умолчанию

buf - куда пишем по 4 байта
pmem - дескритор кучи
Виктор Шубин вне форума Ответить с цитированием
Старый 10.02.2016, 19:04   #9
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Ломоносовы, на русский переключаем, когда копипастим...
Iron Monk вне форума Ответить с цитированием
Старый 13.02.2016, 15:38   #10
Виктор Шубин
 
Регистрация: 10.02.2016
Сообщений: 7
По умолчанию

Значит ни кто не знает как производить запись в кучу фрагментами, а затем вытащит из кучи все фрагменты целиком
Виктор Шубин вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Из DBGrid в FastReport одну запись Ghjuhfvvf Помощь студентам 5 27.05.2011 11:23
Возвращает только одну запись.... Cartman18 БД в Delphi 5 15.09.2010 16:53
Как в удалить кучу строк, через одну? levohotnik Microsoft Office Excel 6 09.09.2010 21:08
Запись всех строк в одну. Lazio Помощь студентам 1 10.10.2009 21:44
Запись в одну строку Terran Общие вопросы Delphi 2 08.05.2008 23:35