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

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

  1. 10110111

    10110111 New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    319
    Адрес:
    Санкт-Петербург
    orbb
    IMHO, пиши на аглицком - понятней будет... я думаю, со мной все согласятся)
     
  2. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    spencer
    MCNet
    Зря прикалываетесь. orbb болгарин, посмотрите на его другие сообщения.
    Пришлось бы нам по-болгарски писать - получилось бы значительно хуже.
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    чтобы было понятно всем, I suggest using english =)
     
  4. spencer

    spencer New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2005
    Сообщения:
    277
    so do i
     
  5. orbb

    orbb New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2007
    Сообщения:
    16
    да я Болгар ,Спасибо за разбораниу. Буду пишем еще. Туда одна ваша песен сегодня хит номер1 - ремикса Хаидучи - Водка - если хочете я send еи на маилов.
     
  6. orbb

    orbb New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2007
    Сообщения:
    16
    Молоко хорошо ,ну а водку еи еще лучше ...
    еи диджеи водочку налеи
     
  7. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    green
    Да можно. C++ Builder явно собирать без rtl не даёт, надо делать подмену c0w32, что вобщем-то работает, окно ~5 кв, но не так удобно.
    В VC можно поменять название точки входа, и rtl отвалится. Консоль ~ 2кб. Окошко ~11 кб, без ресурсов, но надо ещё TCHAR-ы убрать и nCmdShow, иначе у меня оно не показывалось. Но на асме всё равно меньше -).
     
  8. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    Booster
    На VC++ даже без особых ухищрений можно получить минимальную GUI прогу с ресурсами (типа той, которую визард делает - окно с меню и диалогом About) размером 2-3 КВ.
     
  9. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    Ну ща будем уменьшать твою прогу:
    push 0 - твой занимает ~6 байт
    Когда push [eax,ebx,ecx,edx,esi,edi] - занимают всего 1 байт.

    так что делаем следующее(один раз):
    xor ebx,ebx - xor команда принята интелом как команда обнуления.
    И визде где нужно push 0, ставим Push ebx.

    Убери нафиг сегмент данных (_DATA SEGMENT), и вставь (сами переменные) в задницу в сегмент кода. Я так на fasm'е делаю.

    Незнаю как masm32, понимает .if eax==0, но думаю он делает cmp, а лучше test eax,eax,
    jz - если ноль, jnz если не ноль. Это как раз подойдет твоему:
    ; cmp eax,0
    ; jz err
    на
    ; test eax,eax
    ; jz err

    Ну и вправда здесь и оптимизировать толком нечего. Ну попытаюсь переписать на fasm :)
    Посмотрим что получиться:)

    sergh ага любой регистр :) щас он начнет ss cs gs fs ds es дергать. Лучшеб сказал
    один из регистров общего назначения, т. е. eax, ebx, ecx, edx, edi, esi.

    Да оставьте уже в пакое VC++, ну действительно хорошь он, и можно на нем писать маленькие проги. Но на асме, хоть на один байт но меньше :)
     
  10. Morskoivolk

    Morskoivolk New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2007
    Сообщения:
    85
    Arthur
    Я уже все это сделал...ну почти все))) кроме cmp и test...
    прога уменьшилась за счет того что сегмент данных я перенес в задницу в сегмент кода. теперь прога заняла 3072 Кб. т.е. от на 1 Кб. инициализированных данных прога стала меньше.
    Также на все структуры я ввел секцию неинициализированных данных .data? Но....все теже 3072 Кб.
    большее уже наверное тут не наоптимизируешь.....мне тут советовали и даже приводили пример...как разместить структуру MSG на стеке. ....разместил....но разницы не заметил. снова 3072 Кб.
    меня больше интересует как можно "косвенно" включить эти структуры в прогу....чтобы они не прибавляли ей лишних байт....и возможно ли это без изменения заголовка PE файла, удаления печати Баала и прочей дребедени PE формата??
     
  11. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Сделай ребилд прогой какой нибудь
    и пожми пакером
     
  12. Morskoivolk

    Morskoivolk New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2007
    Сообщения:
    85
    пакером это конечно можно...но хотелось бы ручками все:))
    к тому же мой UPX тот же проги весящие меньше 3 КБ отказывается сжимать....может думает, что это уже наглость)))))
     
  13. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    Вот FASM генерит PE, заголовок так: Весь заголовок MZ, (Не просто буквы MZ, и характеристики MZ заголовка) далее идет весь PE заголово + заглушка если прога запускается не из под виндаунс. Далее для процедур создается тоже заглушки, которые передают указатель на __imp_[winapi], но вроде у тебя без этой лабуды. Далее много места занимают сами строковые метки. Если вручную создавать заголовок и секцию импорта моно очь хорошо уменьшить прогу. Каждая секция программы (если в ней инициализированна хоть одна переменная, или имеются команды процца) весит 1024, если размер переваливает, то секция увеличивается до 2048, ну и т. д. Ну вот такая лабуда на свете. А MASM в PE заголовке вааще чудеса творит.
     
  14. Morskoivolk

    Morskoivolk New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2007
    Сообщения:
    85
    Код (Text):
    1. Каждая секция программы (если в ней инициализированна хоть одна переменная, или имеются команды процца) весит 1024, если размер переваливает, то секция увеличивается до 2048, ну и т. д.
    а нельзя ли сократить эту секцию до нужного размера....если учесть выравнивание и все такое....
    например, если я забил секцию полностью данными и командами на 1 Кб....а на второй Кб у меня только пойдет пару байт дополнительнывх данных, нельзя обрезать ненужную часть? Или все таки без правки PE тут никак?
     
  15. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Morskoivolk
    Вот пример bat-файла, который создает из ASM-файла EXE
    Код (Text):
    1. \masm32\bin\ml /c /Cp /Gz /Ic:\masm32\include /coff /nologo %~n1.asm
    2. if errorlevel 1 goto TheEnd
    3. \masm32\bin\link /SUBSYSTEM:WINDOWS /ALIGN:16 /MERGE:.data=.text \
    4. /LIBPATH:c:\masm32\lib /NOLOGO %~n1.obj
    5. :TheEnd
    6. if exist %~n1.obj del %~n1.obj
    обрати внимание на ключ /ALIGN:16 он позволяет создавать файлы по размеру кратные 16 байт, то есть пока твой файл содержит от 1008 до 1024 байт кода и данных -- его длина 1к, как только там стало 1025 байт, длина увеличится до 1040 байт
     
  16. Morskoivolk

    Morskoivolk New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2007
    Сообщения:
    85
    Mikl__
    ага, спасибо огромное.....буду щас пробовать!! мне писали только не помню...может даже и ты)))), что от выравнивания такоого на одних компах прога не будет идти вообще, а на других будет идти медленнее....Это так?
     
  17. Morskoivolk

    Morskoivolk New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2007
    Сообщения:
    85
    Mikl__
    Вобщем скомпилил прогу....на выходе получил ошибку.....@unmatched block nesting TOPXY, наверное процедура TOPXY (процедура, центрирующая окно приложения на экране) чему то не соответствует....не могу понять чему...
     
  18. Morskoivolk

    Morskoivolk New Member

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

    Код (Text):
    1. .386P
    2. ; сплошная модель памяти
    3. .MODEL FLAT, stdcall
    4. ;====================================================
    5. ; прототипы внешних процедур
    6. ;====================================================
    7. EXTERN   _imp__SetFocus@4:dword
    8. EXTERN   _imp__SendMessageA@16:dword
    9. EXTERN   _imp__MessageBoxA@16: dword
    10. EXTERN   _imp__CreateWindowExA@48:dword
    11. EXTERN   _imp__DefWindowProcA@16:dword
    12. EXTERN   _imp__DispatchMessageA@4:dword
    13. EXTERN   _imp__ExitProcess@4:dword
    14. EXTERN   _imp__GetMessageA@16:dword
    15. EXTERN   _imp__GetModuleHandleA@4:dword
    16. EXTERN   _imp__LoadCursorA@8:dword
    17. EXTERN   _imp__LoadIconA@8:dword
    18. EXTERN   _imp__PostQuitMessage@4:dword
    19. EXTERN   _imp__RegisterClassA@4:dword
    20. EXTERN   _imp__ShowWindow@8:dword
    21. EXTERN   _imp__TranslateMessage@4:dword
    22. EXTERN   _imp__UpdateWindow@4:dword
    23. EXTERN   _imp__GetSystemMetrics@4:dword
    24. EXTERN   _imp__GetWindowTextLengthA@4:dword
    25. EXTERN   _imp__GetWindowTextLengthA@4:dword
    26.  
    27. ;====================================================
    28. ; директивы компоновщику для подключения библиотек
    29. ;====================================================
    30. includelib i:\masm32\lib\user32.lib
    31. includelib i:\masm32\lib\kernel32.lib
    32. include i:\masm32\include\windows.inc
    33.  
    34. ;====================================================
    35. ; структуры
    36. ;====================================================
    37. ;--------------------
    38. ; структура окна
    39. ;--------------------
    40. WNDCLASS STRUC
    41.      CLSSTYLE      DD   ? ; стиль окна
    42.      CLWNDPROC     DD   ? ; указатель на процедуру окна
    43.      CLSCSEXTRA    DD   ? ; информация о доп. байтах для
    44.                           ; данной структуры
    45.      CLWNDEXTRA    DD   ? ; информация о доп. байтах для окна
    46.      CLSHINSTANCE  DD   ? ; дескриптор приложения
    47.      CLSHICON      DD   ? ; идентификатор иконы окна
    48.      CLSHCURSOR    DD   ? ; идентификатор курсора окна
    49.      CLBKGROUND    DD   ? ; идентификатор кисти окна
    50.      CLMENUNAME    DD   ? ; имя-идентификатор меню
    51.      CLNAME        DD   ? ; специфицирует имя класса окон
    52. WNDCLASS ENDS
    53.  
    54. ;====================================================
    55. ; секция неинициализированных данных
    56. ;====================================================
    57. .data?
    58.      NEWHWND       DD ?    
    59.      WC            WNDCLASS  <?>
    60.      HINST         DD ? ; здесь хранится дескриптор приложения
    61.      CPEDT         DB ?
    62.      HWNDBTN       DWORD ?
    63.      HWNDEDT       DWORD ?
    64.      HWNDEDT1      DWORD ?
    65.      HWNDSTAT      DWORD ?
    66.      W             DWORD ?
    67.      H             DWORD ?
    68.      X             DWORD ?
    69.      Y             DWORD ?
    70.      el_width      DWORD ?
    71.      Name_length   DWORD ?
    72.  
    73. ;====================================================
    74. ; секция кода
    75. ;====================================================
    76. .code
    77. START:
    78.      xor ebx,ebx
    79. ; получить дескриптор приложения    
    80.      PUSH     EBX
    81.      CALL     _imp__GetModuleHandleA@4
    82.      MOV      [HINST], EAX
    83. REG_CLASS:
    84. ; заполнить структуру окна стиль
    85.      MOV [WC.CLSSTYLE], style
    86. ; процедура обработки сообщений
    87.      MOV [WC.CLWNDPROC], OFFSET WNDPROC
    88.      MOV [WC.CLSCSEXTRA], 0
    89.      MOV [WC.CLWNDEXTRA], 0
    90.      MOV EAX, [HINST]
    91.      MOV [WC.CLSHINSTANCE], EAX
    92. ;--------- иконка окна
    93.      PUSH 1
    94.      PUSH [HINST]
    95.      CALL _imp__LoadIconA@8
    96.      MOV  [WC.CLSHICON], EAX
    97. ;---------- курсор окна
    98.      PUSH IDC_ARROW
    99.      PUSH EBX
    100.      CALL _imp__LoadCursorA@8
    101.      MOV  [WC.CLSHCURSOR], EAX
    102. ;---------
    103.      MOV  [WC.CLBKGROUND], COLOR_BTNFACE+1 ; цвет окна
    104.      MOV DWORD PTR [WC.CLMENUNAME], 0
    105.      MOV DWORD PTR [WC.CLNAME], OFFSET CLASSNAME
    106.      PUSH OFFSET WC
    107.      CALL _imp__RegisterClassA@4
    108.  
    109. ;Расположение окна приложения в центре экрана
    110.      mov W,190
    111.      mov H,195
    112.      
    113.      push SM_CXSCREEN
    114.      call _imp__GetSystemMetrics@4
    115.      PUSH EAX
    116.      PUSH W
    117.      CALL TOPXY    
    118.      mov X,eax
    119.  
    120.      push SM_CYSCREEN
    121.      call _imp__GetSystemMetrics@4
    122.      PUSH EAX
    123.      PUSH W
    124.      call TOPXY    
    125.      mov Y,eax
    126. ; создать окно зарегистрированного класса
    127.      ;XOR ECX,ECX
    128.      PUSH EBX    
    129.      PUSH [HINST]
    130.      PUSH EBX
    131.      PUSH EBX
    132.      PUSH H ; DY — высота окна
    133.      PUSH W ; DX - ширина окна
    134.      PUSH Y ; Y — координата левого верхнего угла
    135.      PUSH X ; X — координата левого верхнего угла
    136.      PUSH OFFSET WINDOWSTYLE
    137.      PUSH OFFSET TITLENAME ; имя окна
    138.      PUSH OFFSET CLASSNAME ; имя класса
    139.      PUSH EBX
    140.      CALL _imp__CreateWindowExA@48
    141. ; проверка на ошибку
    142.      ;CMP EAX, 0
    143.      ;JZ  _ERR
    144.      MOV [NEWHWND], EAX ; дескриптор окна
    145. ; --------------------------------------------------
    146.      PUSH SW_SHOWNORMAL
    147.      PUSH [NEWHWND]
    148.      CALL _imp__ShowWindow@8; показать созданное окно
    149. ; --------------------------------------------------
    150.      PUSH [NEWHWND]
    151.      CALL _imp__UpdateWindow@4  ; команда перерисовать видимую
    152.                           ; часть окна, сообщение WM_PAINT
    153. ; петля обработки сообщений
    154.  
    155. call BeginMessageLoop
    156.  
    157.  
    158. WNDPROC  PROC
    159.  
    160.      PUSH EBP
    161.      MOV EBP, ESP
    162.      PUSH EBX
    163.      PUSH ESI
    164.      PUSH EDI
    165.      CMP DWORD PTR [EBP+0CH], WM_DESTROY
    166.      JE  WMDESTROY
    167.      CMP DWORD PTR [EBP+0CH], WM_CREATE
    168.      JE  WMCREATE
    169.      CMP DWORD PTR [EBP+10H], 100 ;если нажата кнопка 'Generete'
    170.      JE BNCLICKED
    171.      JMP DEFWNDPROC
    172.  
    173. WMCREATE:
    174. ; создать окно-кнопку
    175.      mov ECX,W
    176.      MOV el_width,160
    177.      PUSH ECX
    178.      PUSH el_width
    179.      call TOPXY    
    180.      SUB EAX,4    ;это чтобы элемент располагался по центру окна
    181.      mov X,eax
    182.    
    183.      PUSH EBX
    184.      PUSH [HINST]
    185.      PUSH 100
    186.      PUSH DWORD PTR [EBP+08H]
    187.      PUSH 24   ; DY
    188.      PUSH el_width       ; DX
    189.      PUSH 125            ; Y
    190.      PUSH X              ; X
    191.      PUSH STYLBTN
    192.      PUSH OFFSET CPBUT   ; имя окна
    193.      PUSH OFFSET CLSBUTN ; имя класса
    194.      PUSH EBX
    195.      CALL _imp__CreateWindowExA@48
    196.      MOV HWNDBTN, EAX    ; запомнить дескриптор кнопки
    197.  
    198. ; создать компенент типа TStatic
    199.      PUSH EBX
    200.      PUSH [HINST]
    201.      PUSH EBX
    202.      PUSH DWORD PTR [EBP+08H]
    203.      PUSH 20   ; DY
    204.      PUSH 160  ; DX
    205.      PUSH 150   ; Y
    206.      PUSH 20   ; X
    207.      PUSH STYLSTAT
    208.      PUSH OFFSET  CPSTAT   ; имя окна
    209.      PUSH OFFSET CLSSTAT ; имя класса
    210.      PUSH EBX
    211.      CALL _imp__CreateWindowExA@48
    212.      MOV  HWNDSTAT,EAX
    213.  
    214. ;создать компенент типа TStatic_1
    215.      PUSH EBX
    216.      PUSH [HINST]
    217.      PUSH EBX
    218.      PUSH DWORD PTR [EBP+08H]
    219.      PUSH 20   ; DY
    220.      PUSH 160  ; DX
    221.      PUSH 2   ; Y
    222.      PUSH 7   ; X
    223.      PUSH STYLSTAT
    224.      PUSH OFFSET  CPSTAT1   ; имя окна
    225.      PUSH OFFSET CLSSTAT ; имя класса
    226.      PUSH EBX
    227.      CALL _imp__CreateWindowExA@48
    228.      MOV HWNDSTAT,EAX
    229.  
    230. ;создать компенент типа TStatic_2
    231.      PUSH EBX
    232.      PUSH [HINST]
    233.      PUSH EBX
    234.      PUSH DWORD PTR [EBP+08H]
    235.      PUSH 20   ; DY
    236.      PUSH 160  ; DX
    237.      PUSH 47   ; Y
    238.      PUSH 7   ; X
    239.      PUSH STYLSTAT
    240.      PUSH OFFSET  CPSTAT2   ; имя окна
    241.      PUSH OFFSET CLSSTAT ; имя класса
    242.      PUSH EBX
    243.      CALL _imp__CreateWindowExA@48
    244.      MOV HWNDSTAT,EAX
    245.  
    246. ; создать окно редактирования_1
    247.      mov ECX,W
    248.      MOV el_width,160
    249.      PUSH ECX
    250.      PUSH el_width
    251.      call TOPXY    
    252.      SUB EAX,4    
    253.      mov X,eax
    254.  
    255.      PUSH EBX
    256.      PUSH [HINST]
    257.      PUSH EBX
    258.      PUSH DWORD PTR [EBP+08H]
    259.      PUSH 23   ; DY
    260.      PUSH el_width ; DX
    261.      PUSH 20   ; Y
    262.      PUSH X   ; X
    263.      PUSH STYLEDT
    264.      PUSH OFFSET CPEDT   ; имя окна
    265.      PUSH OFFSET CLSEDIT ; имя класса
    266.      PUSH WS_EX_CLIENTEDGE  
    267.      CALL _imp__CreateWindowExA@48
    268.      MOV HWNDEDT,EAX
    269.  
    270. ;--------- установить фокус на окне редактирования
    271.      PUSH HWNDEDT
    272.      CALL _imp__SetFocus@4
    273. ; создать окно редактирования_2
    274.      mov ECX,W
    275.      MOV el_width,160
    276.      PUSH ECX
    277.      PUSH el_width
    278.      call TOPXY    
    279.      SUB EAX,4    
    280.      mov X,eax
    281.  
    282.      PUSH EBX
    283.      PUSH [HINST]
    284.      PUSH EBX
    285.      PUSH DWORD PTR [EBP+08H]
    286.      PUSH 23   ; DY
    287.      PUSH el_width ; DX
    288.      PUSH 65   ; Y
    289.      PUSH X    ; X
    290.      PUSH STYLEDT
    291.      PUSH OFFSET CPEDT   ; имя окна
    292.      PUSH OFFSET CLSEDIT ; имя класса
    293.      PUSH WS_EX_CLIENTEDGE
    294.      CALL _imp__CreateWindowExA@48
    295.      MOV HWNDEDT1,EAX
    296.      XOR EAX,EAX
    297.      JMP FINISH
    298.  
    299. DEFWNDPROC:
    300.      PUSH DWORD PTR [EBP+14H]
    301.      PUSH DWORD PTR [EBP+10H]
    302.      PUSH DWORD PTR [EBP+0CH]
    303.      PUSH DWORD PTR [EBP+08H]
    304.      CALL _imp__DefWindowProcA@16
    305.      JMP FINISH
    306.  
    307. BNCLICKED:
    308.      PUSH HWNDEDT
    309.      call _imp__GetWindowTextLengthA@4 ;считает количество символов во введенном
    310.  
    311. тексте
    312. .if  EAX==0            ;если количество символов 0, то  
    313.      call EnterName    ;вывод сообщения....
    314. .elseif EAX<6          ;если количество символов < 6, то
    315.      call MinLength    ;вывод сообщения....
    316. .endif
    317.      JMP FINISH
    318.  
    319. WMDESTROY:    
    320.      PUSH EBX
    321.      CALL _imp__PostQuitMessage@4 ; сообщение WM_QUIT
    322.      XOR EAX,EAX
    323.  
    324. FINISH:
    325.      POP EDI
    326.      POP ESI
    327.      POP EBX
    328.      POP EBP
    329.      RET 16
    330. WNDPROC ENDP
    331.  
    332. ;------------------------------------------------------------
    333. TOPXY proc wDim:DWORD, sDim:DWORD ;процедура,центрирующая окно приложения
    334.      shr sDim,1
    335.      shr wDim,1
    336.      mov eax,wDim
    337.      sub sDim,eax
    338.      mov eax,SDim
    339.      ret
    340. TopXY endp
    341. ;===========================================================
    342. ;процедуры вывода сообщения о некорректном вводе информации
    343. ;===========================================================
    344. EnterName proc  
    345.      push EBX
    346.      push offset str1
    347.      push offset str2
    348.      push NEWHWND
    349.      call _imp__MessageBoxA@16    
    350.      RET
    351. EnterName endp    
    352.  
    353. MinLength proc      
    354.      push EBX
    355.      push offset str1
    356.      push offset str3
    357.      push NEWHWND
    358.      call _imp__MessageBoxA@16
    359.      RET
    360. MinLength endp
    361. ;===========================================================
    362. BeginMessageLoop proc
    363.    push ebp
    364.    sub  esp, 24
    365.    mov ebp, esp  ; ebp указывает на начало структуры в стеке
    366.  
    367. @@:
    368.    xor eax, eax
    369.    push eax
    370.    push eax
    371.    push eax
    372.    push ebp
    373.    call _imp__GetMessageA@16
    374.    test eax, eax
    375.    jz @f
    376.    push ebp
    377.    call _imp__TranslateMessage@4
    378.    push ebp
    379.    call _imp__DispatchMessageA@4
    380.    jmp @b
    381.  
    382. @@:
    383.    add esp, 24
    384.    pop ebp
    385.    ret
    386. BeginMessageLoop endp
    387.  
    388. ;================================================
    389. ;секция инициализированных данных
    390. ;================================================
    391.      TITLENAME     DB 'WinZip 9.0 SR-1 KeyGen',0
    392.      CLASSNAME     DB 'CLASS32',0
    393.      CPBUT         DB 'Generate',0 ; выход
    394.      CPSTAT        DB 'Created by Morskoivolk ',0
    395.      CPSTAT1       DB 'Enter name:',0
    396.      CPSTAT2       DB 'Serial number:',0
    397.      CLSBUTN       DB 'BUTTON',0
    398.      CLSEDIT       DB 'EDIT',0
    399.      CLSSTAT       DB 'STATIC',0   
    400.      str1          DB 'Внимание!!!',0
    401.      str2          DB 'Введите имя',0
    402.      str3          DB 'Минимальная длина имени - 6 символов',0
    403.      NameFont      DB 'Ms Sans Serif',0  
    404.  
    405. END START
    эта форма компилется по:
    BIN\ml /c /coff current.asm
    BIN\link /subsystem:windows current.obj
    pause

    но почему то не компилется по:
    bin\ml /c /Cp /Gz /I:\masm32\include /coff /nologo current.asm
    if errorlevel 1 goto TheEnd
    bin\link /SUBSYSTEM:WINDOWS /ALIGN:16 /MERGE:.data=.text \
    /LIBPATH:I:\masm32\lib /NOLOGO current.obj
    :TheEnd
    if exist current.obj del current.obj
    pause

    ошибка: "unmatched block nesting TOPXY"
     
  19. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Morskoivolk
    Должно быть
     
  20. Morskoivolk

    Morskoivolk New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2007
    Сообщения:
    85
    точно!!! уже сам заметил!!!))) но все равно Спасиба!!!!
    компиляция прошла успешно...теперь линкер ругается....
    "ALIGN specified without /DRIVER or /VXD; image may not run"......причем тут DRIVER или VXD.....