FASM Прикрутить кнопку на стандартное окно...

Тема в разделе "WASM.BEGINNERS", создана пользователем rococo795, 16 дек 2016.

  1. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    860
    Какая разница?
    Код (ASM):
    1. lpFileIn db 'C:\1\00.mts',0
    2.  
    3. proc main
    4.  
    5.     mov eax, '01'
    6.     mov ecx, 10
    7.  
    8.     .cyc:
    9.  
    10.     .if ah > '9'
    11.         sub ax, 0x9FF
    12.     .endif
    13.  
    14.     mov word [lpFileIn+5], ax
    15.  
    16.     inc ah
    17.  
    18.     loop .cyc
    19.  
    20. endp    
     
  2. rococo795

    rococo795 Active Member

    Публикаций:
    0
    Регистрация:
    1 дек 2016
    Сообщения:
    236
    Понял.. Щас сделаю.. Спасибо..
     
  3. rococo795

    rococo795 Active Member

    Публикаций:
    0
    Регистрация:
    1 дек 2016
    Сообщения:
    236
    Нет вопросов!!! Аватарка крутяк!!! Спасибо!!!

    Я вот так сделал....
    Код (ASM):
    1.  
    2. xor esi,esi
    3. mov esi,99
    4. xor ebx,ebx
    5. mov bl,'0'
    6. mov [bll],bl
    7. mov bh,'0'
    8. mov [bhh],bh
    9.  
    10. .cikl:
    тут открываем указанный файл, определяем размер, память выделяем, пишем его в память и записываем в другой файл..... последующие файлы дописываем в конец нового файла... (на 99 штук файлов... до тридцати трёх проверил, дальше надоело)


    Код (ASM):
    1.  
    2. add bl,1
    3. cmp bl,'9'
    4. ja .dwa
    5.  
    6. mov [lpFileIn+6],bl
    7. sub esi,1
    8. cmp esi,0
    9. ja .cikl
    10. jmp .close
    11.  
    12. .dwa:
    13. mov bh,[bhh]
    14. add bh,1
    15. mov [bhh],bh
    16. mov bl,'0'
    17. mov [lpFileIn+5],bh
    18. mov [lpFileIn+6],bl
    19. sub esi,1
    20. cmp esi,0
    21.  
    22. ja .cikl
    23. jmp .close
    24.  
    25. .close:
    сильно плохо? в чём плохие моменты?
     
    Последнее редактирование модератором: 20 дек 2016
  4. _edge

    _edge Well-Known Member

    Публикаций:
    1
    Регистрация:
    29 окт 2004
    Сообщения:
    631
    Адрес:
    Russia
    Весь код приведи пожалуйста. А то так получается вырвано из контекста.
     
  5. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    860
    Ну если код специально не обфусцируется, то хотя-бы писать cmp bl, '9' вместо cmp bl,$39. Я выше дал код где сразу два символа обновляются за раз. sub ax, 0x9FF - это вычесть получается старший разряд - 10, а младший + 1, а т.к. у нас данные в little endian формате, то получается наоборот младший разряд вычитается 10, а старший прибавляется 1, т.е. можно от 0 до 99 без ошибок.
     
  6. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.708
    1) xor esi,esi/mov esi,99 => mov esi,99
    2) sub esi,1/cmp esi,0/ja .cikl => dec esi/jnz .cikl
    3)ja .cikl/jmp .close/.close: => ja .cikl/.close:
     
  7. rococo795

    rococo795 Active Member

    Публикаций:
    0
    Регистрация:
    1 дек 2016
    Сообщения:
    236
    Спасибо... Вот такой код..

    Код (ASM):
    1.  
    2. include 'win32a.inc'
    3.  
    4. section '.bss' data readable writeable
    5.                                      
    6. stime    SYSTEMTIME
    7. FileIn dd ?    
    8. FileSizeIn dd ?    
    9. HeapAllocMem dd ?
    10. FileOut dd ?    
    11. cbRead dd ?    
    12. cbWrite dd ?    
    13. GetProcessHeapMem dd ?
    14. bll db ?
    15. bhh db ?
    16.  
    17. section '.text' code readable executable
    18.                                        
    19. start:  
    20.     invoke MessageBoxA,0,text9,titl,0
    21.  
    22.     invoke    GetLocalTime,stime
    23.     mov ax,[stime.wYear]      
    24.     cmp ax,$07e0          
    25.     jg .errData          
    26.     mov ax,[stime.wMonth]        
    27.     cmp ax,$000c
    28.     jg .errData
    29.     mov ax,[stime.wDay]      
    30.     cmp ax,$0014
    31.     jg .errData
    32.  
    33.         invoke CreateFile,lpFileOut,GENERIC_WRITE,2,0,1,0,0
    34.         cmp eax,-1
    35.         je .errlpFileOut
    36.         mov [FileOut],eax
    37.  
    38.         mov esi,99      
    39.         mov bl,'0'
    40.         mov [bll],bl
    41.         mov bh,'0'
    42.         mov [bhh],bh
    43.  
    44.     .cikl:
    45.  
    46.         invoke CreateFile,lpFileIn,GENERIC_READ,0,0,3,0,0
    47.         cmp eax,-1
    48.         je .errlpFileIn
    49.         mov [FileIn],eax
    50.  
    51.         invoke GetFileSize,eax,0
    52.         cmp eax,$0ffffffff  
    53.         je .errFileSize    
    54.         mov [FileSizeIn],eax      
    55.  
    56.             invoke GetProcessHeap
    57.             mov [GetProcessHeapMem],eax
    58.             invoke HeapAlloc,[GetProcessHeapMem],0,[FileSizeIn]
    59.             cmp eax,0
    60.             je .errHeapAlloc
    61.             mov [HeapAllocMem],eax
    62.  
    63.                 invoke ReadFile,[FileIn],[HeapAllocMem],[FileSizeIn],cbRead,0
    64.                 test eax,eax
    65.                 jz .errReadFile
    66.                 invoke CloseHandle,[FileIn]
    67.  
    68.                         invoke WriteFile,[FileOut],[HeapAllocMem],[FileSizeIn],cbWrite,0
    69.                         test eax,eax
    70.                         je .errWriteFile
    71.  
    72.                             add bl,1
    73.                             cmp bl,'9'
    74.                             ja .dwa
    75.  
    76.                             mov [lpFileIn+6],bl
    77.  
    78.                             dec esi
    79.                             jnz .cikl
    80.                             jmp .close
    81.                      
    82.                         .dwa:
    83.                             mov bh,[bhh]
    84.                             add bh,1
    85.                             mov [bhh],bh
    86.                             mov bl,'0'
    87.                             mov [lpFileIn+5],bh
    88.                             mov [lpFileIn+6],bl
    89.  
    90.                             dec esi
    91.                             jnz .cikl
    92.  
    93.                 .close:
    94.                         invoke CloseHandle,[FileOut]
    95.  
    96.             jmp .ok
    97.  
    98.     .errlpFileIn:
    99.         invoke MessageBoxA,0,text,titl,0
    100.         jmp .close
    101.     .errFileSize:
    102.         invoke MessageBoxA,0,text1,titl,0
    103.         jmp .exit
    104.     .errHeapAlloc:
    105.         invoke MessageBoxA,0,text2,titl,0
    106.         jmp .exit
    107.     .errReadFile:
    108.         invoke MessageBoxA,0,text3,titl,0
    109.         jmp .exit
    110.     .errlpFileOut:
    111.         invoke MessageBoxA,0,text4,titl,0
    112.         jmp .exit
    113.     .errWriteFile:
    114.         invoke MessageBoxA,0,text5,titl,0
    115.         jmp .exit
    116.     .errData:
    117.         invoke MessageBoxA,0,text7,titl,0
    118.         jmp .exit
    119.  
    120. .ok:
    121.     invoke HeapFree,[GetProcessHeapMem],0,[HeapAllocMem]
    122.     invoke MessageBoxA,0,text6,titl,0
    123.  
    124. .exit:
    125. invoke ExitProcess,0
    126.  
    127. section '.data' data readable writeable
    128.                                  
    129.     lpFileIn    db 'C:\1\00.mts',0
    130.  
    131.     lpFileOut    db 'C:\1\Noviy.mts',0
    132.  
    133.     text        db    'Net faila v papke C:\1\   Ili vse faili po porjadku zakonchilis  ',0
    134.     titl        db    'Vnimanie!!!',0
    135.  
    136.     text1        db    'Ne mogu opredelit razmer faila',0
    137.     text2        db    'Не могу выделить память',0
    138.     text3        db    'Не могу прочитать файл в память',0
    139.     text4        db    'Не могу создать новый файл. Может Вы его уже создали. Если так - то удалите...',0
    140.     text5        db    'Не могу записать новый файл',0
    141.     text6        db    'Programma uspeshno zavershila rabotu !!!',0
    142.     text7        db    'Wremja deistvija programmi isteklo!!!',0
    143.     text9        db    'Soedinenie failov .mts.  Kolichestwo ot 2 do 100 shtuk.  Nazwanie failow dolshno nachinatsja s 00.mts potom  01.mts i tak dalee po porjadku.  Krainiy maksimalniy fail "99.mts"   ',\
    144.                     'Sozdaite papku C:\1.  Polochite tuda vse faili i zapustite programmu   ',\
    145.                     'Podochdite.  Programma izwestit o zavershenii raboti.  Sozdastsja fail "Noviy.mts" ',0
    146.  
    147. section '.idata' import data readable
    148.  
     
    Последнее редактирование модератором: 20 дек 2016
  8. rococo795

    rococo795 Active Member

    Публикаций:
    0
    Регистрация:
    1 дек 2016
    Сообщения:
    236
    Спасибо... я видел видел.... но ещё не дочитал в мануале до
    .if
    .endif

    сейчас подправлю в офисе скачанный с инета Мануал программера... перевод выполнили Paranoik и Mikl___

    и дам жару с ифами.....

    И почему тут нет Параноика???
     
  9. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.708
    Код (ASM):
    1. .errlpFileIn:
    2.         invoke MessageBoxA,0,text,titl,MB_OK
    3.        jmp .close
    4.    .errFileSize: push MB_OK titl text1
    5.        jmp .exit
    6.    .errHeapAlloc: push MB_OK titl text2
    7.        jmp .exit
    8.    .errReadFile: push MB_OK titl text3
    9.        jmp .exit
    10.    .errlpFileOut: push MB_OK titl text4
    11.        jmp .exit
    12.    .errWriteFile: push MB_OK titl text5    
    13.        jmp .exit
    14.    .errData: push MB_OK titl text7      
    15.        jmp .exit
    16. .ok:
    17.     invoke HeapFree,[GetProcessHeapMem],0,[HeapAllocMem]  
    18.     push MB_OK titl text6
    19. .exit:  invoke MessageBoxA,NULL
    20. invoke ExitProcess,0
     
  10. rococo795

    rococo795 Active Member

    Публикаций:
    0
    Регистрация:
    1 дек 2016
    Сообщения:
    236
    Mikl___

    Сейчас окультурю... Спасибо...
    А что редактировать посты нельзя??? так и было всегда???
    а то забыл заменить

    cmp bl,$39
    на
    cmp bl,'9'
     
  11. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.708
    можно, пока не появится следующий пост. А теперь представь -- пишешь статью и тут вдруг rococo795 создает сообщение
     
  12. rococo795

    rococo795 Active Member

    Публикаций:
    0
    Регистрация:
    1 дек 2016
    Сообщения:
    236
    Понял...
    За подсказки - ну просто огромное спасибо... когда они чёткие и отточенные - сразу начинаешь мыслить хоть чуть чуть, но в другом, более правильном направлении.. это очень ценно...
     
  13. rococo795

    rococo795 Active Member

    Публикаций:
    0
    Регистрация:
    1 дек 2016
    Сообщения:
    236
    На сайте, который начал работать немного раньше этого (1024 - в названии), теперь его нет... а там была тема про низкоуровневое форматирование винта... Можно ли ту тему сюда перенести? И где посмотреть ещё про асм винта?
     
    beatsspam нравится это.
  14. yashechka

    yashechka Ростовский фанат Нарвахи

    Публикаций:
    90
    Регистрация:
    2 янв 2012
    Сообщения:
    1.449
    Адрес:
    Россия
    low level format asm masm fasm. Наверное так. А что там интересного?
     
  15. rococo795

    rococo795 Active Member

    Публикаций:
    0
    Регистрация:
    1 дек 2016
    Сообщения:
    236
    yashechka,

    Там разбирался вопрос о разбивке винта на логические разделы с чёткими примерами
     
  16. _edge

    _edge Well-Known Member

    Публикаций:
    1
    Регистрация:
    29 окт 2004
    Сообщения:
    631
    Адрес:
    Russia
    Есть книга Владимира Кулакова "Программирование дисковых подсистем".

    Да, на х1024 были материалы. И даже был архив сайта целиком, до того как он .. того. В ВК-шной группе запросил этот архив, спрошу и здесь.
     
  17. rococo795

    rococo795 Active Member

    Публикаций:
    0
    Регистрация:
    1 дек 2016
    Сообщения:
    236
    _edge,

    Спасибо... Но когда умные мысли передаются в беседе - это почему то намного информативней и интересней...
     
    Последнее редактирование: 24 янв 2017
  18. rococo795

    rococo795 Active Member

    Публикаций:
    0
    Регистрация:
    1 дек 2016
    Сообщения:
    236
  19. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.708
    rococo795,
    возьми и перетяни самостоятельно, на fasm-форуме уже есть более новые главы
     
  20. rococo795

    rococo795 Active Member

    Публикаций:
    0
    Регистрация:
    1 дек 2016
    Сообщения:
    236
    Есть файл 150 Гб.. Как с ним грамотно работать? Нужно кое что поправить в нём потом либо полностью сохранить исправленным либо потоки разные выдернуть....

    invoke CreateFile,lpFileIn,GENERIC_READ,0,0,3,0,0
    Вот так я открою этот здоровенный файл?

    Если да то ведь память то я не выделю под него столько? Вот так

    invoke GetFileSize,eax,0
    invoke GetProcessHeap
    invoke HeapAlloc,[GetProcessHeapMem],0,[FileSizeIn]

    Как же правильно с такими файлами работать?
    1. Постоянно читать ReadFile, потом найденное место с помощью СетФилеПоинтер, которое нужно исправить загружать в память, обработать в ней а потом WriteFile записывать в новый файл?
    2. Или всё таки выделить какое то количество памяти (сколько если всего памяти 4 -8 гб ?)
    2.1 прочитать в выделенную память ReadFile часть большого файла (кстати - а если память выделил больше чем будешь загружать - это нормально??? или надо байт в байт?)
    2.2 поработать с файлом в выделенной памяти
    2.3 записать его из выделенной памяти в новый файл
    2.4 перейти при помощи СетФилеПоинтер на следующую часть большого файла и прочитать его в ЭТУ же выделенную память? Тут как? Просто читаем по адресу как и в первом случае? Прочитается?
    2.5 Ну и так далее....

    Что где не правильно думаю? Как умно решать такие задачи?