Сейчас на форуме: bartolomeo, -Sanchez-, morgot, sashalogout (+4 невидимых)

 eXeL@B —› Софт, инструменты —› Asmc Macro Assembler
Посл.ответ Сообщение


Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 05 декабря 2019 14:28
· Личное сообщение · #1

Asmc Macro Assembler - это мод JWasm, который развивался параллельно с UASM, основной идеей этого ассемблера является комбинация высокоуровневых выражений в си подобном виде, как дополнение есть совместимость с MASM и UASM, что переключается ключами ассембирования. Совместимость требуется из-за наличия широкого поля имён для функций, как например ML64 макросы пересекаются с UASM функционалом.

Что долго говорить, лучше самостоятельно посмотреть примеры здесь - --> Link <--

Code:
  1. ;
  2. ; http://win32assembly.programminghorizon.com/tut18.html
  3. ;
  4. include windows.inc
  5. include commctrl.inc
  6. include tchar.inc
  7.  
  8. ifdef _WIN64
  9. APPNAME         equ <"Common Control Demo 64">
  10. else
  11. APPNAME         equ <"Common Control Demo 32">
  12. endif
  13. CLASSNAME       equ <"CommonControlWinClass">
  14.  
  15. IDC_PROGRESS    equ 1 ; control IDs
  16. IDC_STATUS      equ 2
  17. IDC_TIMER       equ 3
  18.  
  19. .data
  20. hInstance       HINSTANCE ?
  21. hwndProgress    HANDLE ?
  22. hwndStatus      HANDLE ?
  23. CurrentStep     dd ?
  24. TimerID         dd 0
  25.  
  26. .code
  27.  
  28. WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
  29.  
  30.     .switch uMsg
  31.  
  32.     .case WM_DESTROY
  33.         PostQuitMessage(NULL)
  34.         .if TimerID
  35.             KillTimer(hWnd, TimerID)
  36.         .endif
  37.         .return 0
  38.  
  39.     .case WM_CREATE
  40.         mov hwndProgress,CreateWindowEx(NULL, "msctls_progress32", NULL, WS_CHILD or WS_VISIBLE,
  41.             100, 200, 300, 20, hWnd, IDC_PROGRESS, hInstance, NULL)
  42.  
  43.         mov eax,1000  ; the lParam of PBM_SETRANGE message contains the range
  44.         mov CurrentStep,eax
  45.         shl eax,16    ; the high range is in the high word
  46.  
  47.         SendMessage(hwndProgress, PBM_SETRANGE, 0, eax)
  48.         SendMessage(hwndProgress, PBM_SETSTEP, 10, 0)
  49.         mov hwndStatus,CreateStatusWindow(WS_CHILD or WS_VISIBLE, NULL, hWnd, IDC_STATUS)
  50.         SetTimer(hWnd, IDC_TIMER, 100, NULL) ; create a timer
  51.         mov TimerID,eax
  52.         .return 0
  53.  
  54.     .case WM_TIMER
  55.         SendMessage(hwndProgress, PBM_STEPIT, 0, 0)
  56.         sub CurrentStep,10
  57.         .if !CurrentStep
  58.             KillTimer(hWnd, TimerID)
  59.             mov TimerID,0
  60.             SendMessage(hwndStatus, SB_SETTEXT, 0, "Finished!")
  61.             MessageBox(hWnd, "Finished!", APPNAME, MB_OK or MB_ICONINFORMATION)
  62.             SendMessage(hwndStatus, SB_SETTEXT, 0, 0)
  63.             SendMessage(hwndProgress, PBM_SETPOS, 0, 0)
  64.         .endif
  65.         .return 0
  66.  
  67.     .default
  68.         DefWindowProc(hWnd, uMsg, wParam, lParam)
  69.     .endsw
  70.     ret
  71.  
  72. WndProc endp
  73.  
  74. _tWinMain proc WINAPI hInst: HINSTANCE,
  75.      hPrevInstance: HINSTANCE,
  76.          lpCmdLine: LPTSTR,
  77.           nShowCmd: SINT
  78.  
  79.   local wc:WNDCLASSEX
  80.   local msg:MSG
  81.  
  82.     mov wc.cbSize,          WNDCLASSEX
  83.     mov wc.style,           CS_HREDRAW or CS_VREDRAW
  84.     mov wc.lpfnWndProc,     &WndProc
  85.     mov wc.hInstance,       hInst
  86.     mov wc.cbClsExtra,      0
  87.     mov wc.cbWndExtra,      0
  88.     mov wc.hbrBackground,   COLOR_APPWORKSPACE
  89.     mov wc.lpszMenuName,    NULL
  90.     mov wc.lpszClassName,   &@CStr("CommonControlWinClass")
  91.     mov wc.hIcon,           LoadIcon(0, IDI_APPLICATION)
  92.     mov wc.hIconSm,         rax
  93.     mov wc.hCursor,         LoadCursor(0, IDC_ARROW)
  94.  
  95.     RegisterClassEx(&wc)
  96.     CreateWindowEx(
  97.         WS_EX_CLIENTEDGE,
  98.         CLASSNAME,
  99.         APPNAME,
  100.         WS_OVERLAPPED or WS_CAPTION or WS_SYSMENU or WS_MINIMIZEBOX or WS_MAXIMIZEBOX or WS_VISIBLE,
  101.         CW_USEDEFAULT,
  102.         CW_USEDEFAULT,
  103.         CW_USEDEFAULT,
  104.         CW_USEDEFAULT,
  105.         NULL,
  106.         NULL,
  107.         hInst,
  108.         NULL
  109.     )
  110.  
  111.     .while GetMessage(&msg, NULL, 0, 0)
  112.  
  113.         TranslateMessage(&msg)
  114.         DispatchMessage(&msg)
  115.     .endw
  116.     mov rax,msg.wParam
  117.     ret
  118.  
  119. _tWinMain endp
  120.  
  121.     end _tstart


Сам проект - --> Link <--
CHM - --> Link <--
Скачать - --> Link <--

П.С. Проект удобно использовать в случаях, когда хочется быстро написать HLL подобную процедуру, не забывая о возможностях ассемблера, создав отдельный асм файл, а потом слинковать в проект как obj, очень приятное дополнение, т.к. проект имеет огромный набор встроенных макросов.

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube


| Сообщение посчитали полезным: plutos
 eXeL@B —› Софт, инструменты —› Asmc Macro Assembler
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати