Состязание гуру. Кто меньше?

Тема в разделе "WASM.ASSEMBLER", создана пользователем Morskoivolk, 3 апр 2007.

  1. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Morskoivolk
    ключи в ml вызываются ключем /? или /HELP
    /Cp - Preserve case of user identifiers -- равнозначно тому, если б ты написал в ASM-файле "option casemap :none", кстати она и заметила, что процедура у тебя начинается на TOPXY, а заканчивается на TopXY
    /Gz - use Stdcall calls -- равнозначно том, что ты пишешь .MODEL FLAT, stdcall с этим ключем достаточно ".model flat"
    /I<name> add include path -- где <name>=i:\masm32\include позволяет писать
    "include windows.inc" вместо "include i:\masm32\include\windows.inc"
    для link ключ
    /LIBPATH:<name> где <name>=i:\masm32\lib позволяет писать "includelib user32.lib"
    вместо "includelib i:\masm32\lib\user32.lib"
    PS
    а вообще, самое место теме в BEGGINERS, и еще раз, внимательно читай документацию на сайте :)

    may not run, а может и may run не обращай внимание, это предупреждение, а не ошибка
     
  2. Morskoivolk

    Morskoivolk New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2007
    Сообщения:
    85
    спасибо за досканальное разъяснение)) а также за пожелания PS))
    вобщем из исходника проги вырезал все команды, которые прописываются в опциях компилятора и линковщика (я удалил из make файла LIBPATH и прописал его заново в исходнике проги)....ошибка осталась....
    линковщик именно на ALIGN:16 глюк дает...пишет что "....определяется эта опция без /DRIVER and /VXD.....но этих опций и нету же в маke-файле......
    Далее пишет про то, что нашел много ".text" секций с различными атрибутами.....может это из-за секции неинициализированных данных .data? он не может совместить?
     
  3. Morskoivolk

    Morskoivolk New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2007
    Сообщения:
    85
    ))))))! ты раньше меня!!!!
    все путем....прога запустилась! теперь на моем харде материализовалось 2 272 байта.
    уже не плохо! только ошибка про множественные .text секции осталась....или это предупреждение?))))
    слушай, еще такой вопрос....(ну понятно же что я на этом не остановлюсь)))))
    если написать отдельную процедуру, которая размещает в стеке все структуры, все данные, котрые используют эти структуры (ведь их немного на самом деле), а потом просто использовать соответсвующие процедуры для вызова тех же API, это даст выигрышь?
     
  4. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Morskoivolk
    /MERGE:.data=.text
    если тебе будет спокойней от этого поставь ключ /DRIVER еще раз повторяю это предупреждение, а не ошибка
     
  5. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Morskoivolk
    это как качели, если ты размещаешь все данные в стеке, то у тебя растет размер кода по инициализации этих данных, если данные проинициализированы заранее, например WNDCLASS, то кода мало, но данные занимают место. Истина где-то посередине. Я уже писал, что место отведенное под WNDCLASS, (переменные оттуда используются только функциями CreateWindow и RegisterClass) можно дальше использовать под MSG, смотри примеры...
     
  6. Morskoivolk

    Morskoivolk New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2007
    Сообщения:
    85
    да...да, я помню это.....просто хотел узнать насчет размещения всех данных проги.

    Код (Text):
    1. место отведенное под  WNDCLASS, (переменные оттуда используются только функциями CreateWindow и RegisterClass) можно дальше использовать под MSG, смотри примеры...
    т.е. как бы получается, что место отведенное под одну структуру, можно занять несколькими?
     
  7. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Morskoivolk
    Пиши в личку, иначе нас накажут за флуд
     
  8. reneval

    reneval New Member

    Публикаций:
    0
    Регистрация:
    12 апр 2007
    Сообщения:
    1
    Может быть Morskoivolk'у пригодится такая идейка...Смысл - в установке меток переменных в тех местах кода, который на момент записи в эти переменные будет уже отработан. В асме я еще новичок, так что не судите строго. Писано и проверено в w2k. FASM.
    Программка бипает сигналы точного времени:)

    Код (Text):
    1. include 'WIN32AX.INC'
    2.  
    3. start:     ;метка будет использована для структуры SYSTEMTIME
    4.              invoke CreateMutex,0,1,mutex
    5.     mov eax, [fs:18h]         ;выдрано из GetLastError(w2k)
    6. mutex:                                           ;следующая строка кода (в hex как 83h,78h,34h,0)  используется для CreateMutex(см выше)
    7.     cmp dword[eax+34h],0  ;выдрано из GetLastError;    
    8.              je main
    9.     ret
    10.     align 10h    ;выравнивание под SYSTEMTIME
    11.                             ;т.к. код выше уже отработан и более не будет вызываться - от "start" до "main" мы имеем 32 байта памяти.
    12. main:
    13.     invoke  Sleep,950
    14.     invoke  GetSystemTime,start
    15.     cmp byte[start+10],59 ;минуты
    16.     jne main
    17.     cmp byte[start+12],54 ;секунды
    18.     jb  main
    19.     cmp byte[start+12],59
    20.     je  long_beep
    21.     push    100
    22.     jmp @f
    23. long_beep:
    24.     push    550
    25. @@:
    26.     push    700
    27.     call    [Beep]
    28.     jmp main
    29. ...
    30. далее идет секция импорта
    31. ....
    Итого экономия на строке mutex и структуре SYSTEMTIME : 36 байт
     
  9. coba

    coba New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2002
    Сообщения:
    11
    Адрес:
    Ukraine
    может не в тему... тогда простите за оффтоп
    э пример взят с конкурса на самый маленький файл... если будет нужно потом дам урл
    Код (Text):
    1. ; tiny.asm
    2.  
    3. BITS 32
    4.  
    5. ;
    6. ; MZ header
    7. ;
    8. ; The only two fields that matter are e_magic and e_lfanew
    9.  
    10. mzhdr:
    11.     dw "MZ"       ; e_magic
    12.     dw 0          ; e_cblp UNUSED
    13.  
    14. ;
    15. ; PE signature
    16. ;
    17.  
    18. pesig:
    19.     dd "PE"       ; e_cp, e_crlc UNUSED       ; PE signature
    20.  
    21. ;
    22. ; PE header
    23. ;
    24.  
    25. pehdr:
    26.     dw 0x014C     ; e_cparhdr UNUSED          ; Machine (Intel 386)
    27.     dw 1          ; e_minalloc UNUSED         ; NumberOfSections
    28.  
    29. ;   dd 0xC3582A6A ; e_maxalloc, e_ss UNUSED   ; TimeDateStamp UNUSED
    30.  
    31. ; Entry point
    32.  
    33. start:
    34.     push byte 42
    35.     pop eax
    36.     ret
    37.  
    38. codesize equ $ - start
    39.  
    40.     dd 0          ; e_sp, e_csum UNUSED       ; PointerToSymbolTable UNUSED
    41.     dd 0          ; e_ip, e_cs UNUSED         ; NumberOfSymbols UNUSED
    42.     dw sections-opthdr ; e_lsarlc UNUSED      ; SizeOfOptionalHeader
    43.     dw 0x103      ; e_ovno UNUSED             ; Characteristics
    44.  
    45. ;
    46. ; PE optional header
    47. ;
    48. ; The debug directory size at offset 0x94 from here must be 0
    49.  
    50. filealign equ 4
    51. sectalign equ 4   ; must be 4 because of e_lfanew
    52.  
    53. %define round(n, r) (((n+(r-1))/r)*r)
    54.  
    55. opthdr:
    56.     dw 0x10B      ; e_res UNUSED              ; Magic (PE32)
    57.     db 8                                      ; MajorLinkerVersion UNUSED
    58.     db 0                                      ; MinorLinkerVersion UNUSED
    59.  
    60. ;
    61. ; PE code section
    62. ;
    63.  
    64. sections:
    65.     dd round(codesize, filealign)             ; SizeOfCode UNUSED                  ; Name UNUSED
    66.     dd 0          ; e_oemid, e_oeminfo UNUSED ; SizeOfInitializedData UNUSED
    67.     dd codesize   ; e_res2 UNUSED             ; SizeOfUninitializedData UNUSED     ; VirtualSize
    68.     dd start                                  ; AddressOfEntryPoint                ; VirtualAddress
    69.     dd codesize                               ; BaseOfCode UNUSED                  ; SizeOfRawData
    70.     dd start                                  ; BaseOfData UNUSED                  ; PointerToRawData
    71.     dd 0x400000                               ; ImageBase                          ; PointerToRelocations UNUSED
    72.     dd sectalign  ; e_lfanew                  ; SectionAlignment                   ; PointerToLinenumbers UNUSED
    73.     dd filealign                              ; FileAlignment                      ; NumberOfRelocations, NumberOfLinenumbers UNUSED
    74.     dw 4                                      ; MajorOperatingSystemVersion UNUSED ; Characteristics UNUSED
    75.     dw 0                                      ; MinorOperatingSystemVersion UNUSED
    76.     dw 0                                      ; MajorImageVersion UNUSED
    77.     dw 0                                      ; MinorImageVersion UNUSED
    78.     dw 4                                      ; MajorSubsystemVersion
    79.     dw 0                                      ; MinorSubsystemVersion UNUSED
    80.     dd 0                                      ; Win32VersionValue UNUSED
    81.     dd round(hdrsize, sectalign)+round(codesize,sectalign) ; SizeOfImage
    82.     dd round(hdrsize, filealign)              ; SizeOfHeaders
    83.     dd 0                                      ; CheckSum UNUSED
    84.     db 2                                      ; Subsystem (Win32 GUI)
    85.  
    86. hdrsize equ $ - $$
    87.  
    88. filesize equ $ - $$
    Makefile
    Код (Text):
    1. build: tiny.exe
    2.     @echo File size:
    3.     @echo `du -b tiny.exe | cut -f 1` bytes
    4.     @echo Running tiny.exe
    5.     @./tiny.exe ; echo $$?
    6.  
    7. tiny.exe: tiny.asm
    8.     nasm -f bin -o tiny.exe tiny.asm && chmod 755 tiny.exe
    9.  
    10. clean:
    11.     rm -rf tiny.exe
    12.  
    13. .PHONY: build clean
    в результате размер 97 байт
     
  10. Morskoivolk

    Morskoivolk New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2007
    Сообщения:
    85
    Код (Text):
    1. coba
    этого уже начитался.
    такой файл не будет грузится на Windows 2000, так как в нем импорта нету.....ты ж почитай до конца этот урок.....там же напиано....а там где есть импорт...там уже 133 байта)))))