Сейчас на форуме: zds, UniSoft (+5 невидимых)

 eXeL@B —› Программирование —› Многим надо разжевать и врот положить!
Посл.ответ Сообщение

Ранг: 16.2 (новичок), 11thx
Активность: 0.030
Статус: Участник

Создано: 24 февраля 2013 15:41 · Поправил: Abraham
· Личное сообщение · #1

Привет всем!Давным-Давно я как и многие новички столкнулся с проблемой Установка и линковать Ассемблера. MASM32 несколько более богат возможностями. Я имею в виду опции командной строки.
TASM32 перестал поддерживаться как отдельный продукт. В связи с этим MASM обошел конкурента по количеству содержащихся в пакете примеров, документации, библиотек и т.д.
TASM32 осуществляет более сложный алгоритм вызова API-функций, а это приводит к тому, что исполняемые модули в TASM32 получаются несколько большими, чем в MASM32. Поэтому лучше начать с MASM32, Скачать http://www.masm32.com/masmdl.htm установить на жесткий-диск , Линковать можно в любом месте на windows 1. Мой компьютер => свойства системы => дополнительно => Переменные среды => Path без пробелов пишешь ;C:\masm32.Две стадии трансляции будут выглядеть следующим образом ,
создать два файла с расширением bat , 1. Пуск => Программы => Стандартные => Блокнот , Пишите в блокноте 1) c:\masm32\bin\ml /c /coff PROG.ASM сохраняем как 1.BAT 2) Пишите в блокноте c:\masm32\bin\link /SUBSYSTEM:WINDOWS PROG.OBJ сохраняем как 2.BAT
Теперь еще раз, Пуск => Программы => Стандартные => Блокнот, Пишите в блокноте программу ниже , сохраняем как PROG.ASM
Code:
  1.  .386P
  2. ; плоская модель
  3. .MODEL FLAT, stdcall
  4. includelib c:\masm32\lib\user32.lib 
  5. includelib c:\masm32\lib\kernel32.lib 
  6. ; константы
  7. ; сообщение приходит при закрытии окна
  8. WM_DESTROY        equ 2 
  9. ; сообщение приходит при создании окна
  10. WM_CREATE         equ 1
  11. ; сообщение при щелчке левой кнопкой мыши в области окна
  12. WM_LBUTTONDOWN    equ 201h
  13. ; сообщение при щелчке правой кнопкой мыши в области окна
  14. WM_RBUTTONDOWN    equ 204h 
  15. ; свойства окна
  16. CS_VREDRAW        equ 1h 
  17. CS_HREDRAW        equ 2h 
  18. CS_GLOBALCLASS    equ 4000h 
  19. WS_OVERLAPPEDWINDOW    equ 000CF0000H 
  20. style equ CS_HREDRAW+CS_VREDRAW+CS_GLOBALCLASS
  21. ; идентификатор стандартной иконки
  22. IDI_APPLICATION   equ 32512 
  23. ; идентификатор курсора
  24. IDC_CROSS         equ 32515
  25. ; режим показа окна - нормальный
  26. SW_SHOWNORMAL     equ 1
  27. ; прототипы внешних процедур
  28. EXTERN   MessageBoxA@16: NEAR
  29. EXTERN   CreateWindowExA@48:NEAR 
  30. EXTERN   DefWindowProcA@16:NEAR 
  31. EXTERN   DispatchMessageA@4:NEAR 
  32. EXTERN   ExitProcess@4:NEAR
  33. EXTERN   GetMessageA@16:NEAR 
  34. EXTERN   GetModuleHandleA@4:NEAR 
  35. EXTERN   LoadCursorA@8:NEAR 
  36. EXTERN   LoadIconA@8:NEAR 
  37. EXTERN   PostQuitMessage@4:NEAR 
  38. EXTERN   RegisterClassA@4:NEAR 
  39. EXTERN   ShowWindow@8:NEAR 
  40. EXTERN   TranslateMessage@4:NEAR 
  41. EXTERN   UpdateWindow@4:NEAR 
  42. ; директивы компоновщику для подключения библиотек
  43. ; структуры
  44. ; структура сообщения
  45. MSGSTRUCT STRUC
  46.      MSHWND        DD   ? ; идентификатор окна,
  47.                           ; получающего сообщение
  48.      MSMESSAGE     DD   ? ; идентификатор сообщения
  49.      MSWPARAM      DD   ? ; доп. информация о сообщении
  50.      MSLPARAM      DD   ? ; доп. информация о сообщении
  51.      MSTIME        DD   ? ; время посылки сообщения
  52.      MSPT          DD   ? ; положение курсора, во время посылки
  53.                           ; сообщения
  54. MSGSTRUCT ENDS
  55. ;---------
  56. WNDCLASS STRUC
  57.      CLSSTYLE      DD   ? ; стиль окна
  58.      CLWNDPROC     DD   ? ; указатель на процедуру окна
  59.      CLSCEXTRA     DD   ? ; информация о доп. байтах для
  60.                           ; данной структуры
  61.      CLWNDEXTRA    DD   ? ; информация о доп. байтах для окна
  62.      CLSHINSTANCE  DD   ? ; дескриптор приложения
  63.      CLSHICON      DD   ? ; идентификатор иконы окна
  64.      CLSHCURSOR    DD   ? ; идентификатор курсора окна
  65.      CLBKGROUND    DD   ? ; идентификатор кисти окна
  66.      CLMENUNAME    DD   ? ; имя-идентификатор меню
  67.      CLNAME        DD   ? ; специфицирует имя класса окон
  68. WNDCLASS ENDS
  69.  
  70. ; сегмент данных
  71. _DATA SEGMENT  DWORD PUBLIC USE32 'DATA'
  72.      NEWHWND   DD 0
  73.      MSG       MSGSTRUCT <?>
  74.      WC        WNDCLASS  <?>
  75.      HINST     DD 0 ; здесь хранится дескриптор приложения
  76.      TITLENAME DB 'Привет как дела?',0
  77.      CLASSNAME DB 'CLASS32',0
  78.      CAP       DB 'Сообщение',0
  79.      MES1      DB 'Вы нажали левую кнопку мыши',0
  80.      MES2      DB 'Валим отсюда?',0
  81. _DATA ENDS
  82.  
  83. ; сегмент кода
  84. _TEXT SEGMENT DWORD PUBLIC USE32 'CODE'
  85. START:
  86. ; получить дескриптор приложения
  87.      PUSH     0
  88.      CALL     GetModuleHandleA@4
  89.      MOV      [HINST], EAX
  90. REG_CLASS:
  91. ; заполнить структуру окна стиль
  92.      MOV [WC.CLSSTYLE], style 
  93. ; процедура обработки сообщений
  94.      MOV [WC.CLWNDPROC], OFFSET WNDPROC
  95.      MOV [WC.CLSCEXTRA], 0
  96.      MOV [WC.CLWNDEXTRA], 0
  97.      MOV EAX, [HINST]
  98.      MOV [WC.CLSHINSTANCE], EAX
  99. ;--------- иконка окна
  100.      PUSH IDI_APPLICATION
  101.      PUSH 0
  102.      CALL LoadIconA@8
  103.      MOV  [WC.CLSHICON], EAX
  104. ;---------- курсор окна
  105.      PUSH IDC_CROSS
  106.      PUSH 0
  107.      CALL LoadCursorA@8
  108.      MOV  [WC.CLSHCURSOR], EAX
  109. ;---------
  110.      MOV  [WC.CLBKGROUND], 17 ; цвет окна
  111.      MOV DWORD PTR [WC.CLMENUNAME], 0
  112.      MOV DWORD PTR [WC.CLNAME], OFFSET CLASSNAME
  113.      PUSH OFFSET WC
  114.      CALL RegisterClassA@4
  115. ; создать окно зарегистрированного класса
  116.      PUSH 0
  117.      PUSH [HINST]
  118.      PUSH 0
  119.      PUSH 0
  120.      PUSH 400 ; DY — высота окна
  121.      PUSH 400 ; DX - ширина окна
  122.      PUSH 100 ; Y — координата левого верхнего угла
  123.      PUSH 100 ; X — координата левого верхнего угла
  124.      PUSH WS_OVERLAPPEDWINDOW
  125.      PUSH OFFSET TITLENAME ; имя окна
  126.      PUSH OFFSET CLASSNAME ; имя класса
  127.      PUSH 0
  128.      CALL CreateWindowExA@48
  129. ; проверка на ошибку
  130.      CMP EAX, 0
  131.      JZ  _ERR
  132.      MOV [NEWHWND], EAX ; дескриптор окна
  133. ; --------------------------------------------------
  134.      PUSH SW_SHOWNORMAL
  135.      PUSH [NEWHWND]
  136.      CALL ShowWindow@8; показать созданное окно
  137. ; --------------------------------------------------
  138.      PUSH [NEWHWND]
  139.      CALL UpdateWindow@4  ; команда перерисовать видимую
  140.                           ; часть окна, сообщение WM_PAINT
  141. ; петля обработки сообщений
  142. MSG_LOOP:
  143.      PUSH 0
  144.      PUSH 0
  145.      PUSH 0
  146.      PUSH OFFSET MSG
  147.      CALL GetMessageA@16
  148.      CMP EAX, 0
  149.      JE  END_LOOP
  150.      PUSH OFFSET MSG
  151.      CALL TranslateMessage@4
  152.      PUSH OFFSET MSG
  153.      CALL DispatchMessageA@4
  154.      JMP MSG_LOOP
  155. END_LOOP:
  156. ; выход из программы (закрыть процесс)
  157.      PUSH [MSG.MSWPARAM]
  158.      CALL ExitProcess@4
  159. _ERR:
  160.      JMP END_LOOP
  161. ; --------------------------------------------------
  162. ; процедура окна
  163. ; расположение параметров в стеке
  164. ; [EBP+014H] LPARAM
  165. ; [EBP+10H] WAPARAM
  166. ; [EBP+0CH] MES
  167. ; [EBP+8] HWND
  168. WNDPROC  PROC
  169.      PUSH EBP
  170.      MOV EBP, ESP
  171.      PUSH EBX
  172.      PUSH ESI
  173.      PUSH EDI
  174.      CMP DWORD PTR [EBP+0CH], WM_DESTROY
  175.      JE  WMDESTROY
  176.      CMP DWORD PTR [EBP+0CH], WM_CREATE
  177.      JE  WMCREATE
  178.      CMP DWORD PTR [EBP+0CH] ,WM_LBUTTONDOWN   ;левая кнопка
  179.      JE  LBUTTON
  180.      CMP DWORD PTR [EBP+0CH] ,WM_RBUTTONDOWN   ;правая кнопка
  181.      JE  RBUTTON
  182.      JMP DEFWNDPROC
  183. ; нажатие правой кнопки приводит к закрытию окна
  184. RBUTTON:
  185.      JMP WMDESTROY
  186. ; нажатие левой кнопки мыши
  187. LBUTTON:
  188. ; выводим сообщение
  189.      PUSH 0 ; МВ_ОК
  190.      PUSH OFFSET CAP
  191.      PUSH OFFSET MES1
  192.      PUSH DWORD PTR [EBP+08H]
  193.           CALL MessageBoxA@16
  194.           MOV EAX, 0
  195.           JMP FINISH
  196. WMCREATE:
  197.      MOV EAX, 0
  198.      JMP FINISH
  199. DEFWNDPROC:
  200.      PUSH DWORD PTR [EBP+14H]
  201.      PUSH DWORD PTR [EBP+10H]
  202.      PUSH DWORD PTR [EBP+0CH]
  203.      PUSH DWORD PTR [EBP+08H]
  204.      CALL DefWindowProcA@16
  205.      JMP FINISH
  206. WMDESTROY:
  207.      PUSH 0         ; МВ_ОК
  208.      PUSH OFFSET CAP
  209.      PUSH OFFSET MES2
  210.      PUSH DWORD PTR [EBP+08H] ; дескриптор окна
  211.      CALL MessageBoxA@16
  212.      PUSH 0
  213.      CALL PostQuitMessage@4 ; сообщение WM_QUIT
  214.      MOV EAX, 0
  215. FINISH:
  216.      POP EDI
  217.      POP ESI
  218.      POP EBX
  219.      POP EBP
  220.      RET 16
  221. WNDPROC ENDP
  222. _TEXT ENDS
  223. END START




Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 24 февраля 2013 16:00
· Личное сообщение · #2

И к чему это? Таким бредовым исходником, ты не то что не приобщишь новичков к ассемблеру, а даже отпугнешь.
Комменты в исходнике убили наповал.




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 24 февраля 2013 16:03
· Личное сообщение · #3

Новичкам если начинать, то с туториалов от Iczelion'а
http://www.woodmann.com/RCE-CD-SITES/Iczelion/index.html, русскоязная версия есть на васме, который к сожалению лежит

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes


| Сообщение посчитали полезным: sivorog


Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 24 февраля 2013 16:08
· Личное сообщение · #4

Так и не уловил смысл топика. Хочешь написать типа что-то общеобразовательное, напиши статью.


 eXeL@B —› Программирование —› Многим надо разжевать и врот положить!
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати