Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.07.2009, 20:55   #11
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

Продолжение предыдущего поста:
Код:
; петля обработки сообщений
MSG_LOOP:
     PUSH 0
     PUSH 0
     PUSH 0
     PUSH OFFSET MSG
     CALL GetMessageA@16
     CMP EAX, 0
     JE  END_LOOP
     PUSH OFFSET MSG
     CALL TranslateMessage@4
     PUSH OFFSET MSG
     CALL DispatchMessageA@4
     JMP MSG_LOOP
END_LOOP:
; выход из программы (закрыть процесс)
     PUSH [MSG.MSWPARAM]
     CALL ExitProcess@4
_ERR:
     JMP END_LOOP
; --------------------------------------------------
; процедура окна 
; расположение параметров в стеке
; [EBP+014H] LPARAM
; [EBP+10H] WAPARAM
; [EBP+0CH] MES
; [EBP+8] HWND
WNDPROC  PROC
     PUSH EBP
     MOV EBP, ESP
     PUSH EBX
     PUSH ESI
     PUSH EDI
     CMP DWORD PTR [EBP+0CH], WM_DESTROY
     JE  WMDESTROY
     CMP DWORD PTR [EBP+0CH], WM_CREATE
     JE  WMCREATE
     CMP DWORD PTR [EBP+0CH] ,WM_LBUTTONDOWN   ;левая кнопка
     JE  LBUTTON
     CMP DWORD PTR [EBP+0CH] ,WM_RBUTTONDOWN   ;правая кнопка
     JE  RBUTTON
     JMP DEFWNDPROC
; нажатие правой кнопки приводит к закрытию окна
RBUTTON:
     JMP WMDESTROY
; нажатие левой кнопки мыши
LBUTTON:
; выводим сообщение
     PUSH 0 ; МВ_ОК
     PUSH OFFSET CAP
     PUSH OFFSET MES1
     PUSH DWORD PTR [EBP+08H]
     CALL MessageBoxA@16
     MOV EAX, 0
     JMP FINISH
WMCREATE:
     MOV EAX, 0
     JMP FINISH
DEFWNDPROC:
     PUSH DWORD PTR [EBP+14H]
     PUSH DWORD PTR [EBP+10H]
     PUSH DWORD PTR [EBP+0CH]
     PUSH DWORD PTR [EBP+08H]
     CALL DefWindowProcA@16
     JMP FINISH
WMDESTROY:
     PUSH 0         ; МВ_ОК
     PUSH OFFSET CAP
     PUSH OFFSET MES2
     PUSH DWORD PTR [EBP+08H] ; дескриптор окна
     CALL MessageBoxA@16
     PUSH 0
     CALL PostQuitMessage@4 ; сообщение WM_QUIT
     MOV EAX, 0
FINISH:
     POP EDI
     POP ESI
     POP EBX
     POP EBP
     RET 16
WNDPROC ENDP
_TEXT ENDS
END START
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Старый 27.07.2009, 21:04   #12
mov ax,bx
 
Регистрация: 16.05.2009
Сообщений: 9
По умолчанию

Работа с ShellExecute(переход по ссылке):
Код:
	.386
	.model flat,stdcall
	option casemap:none
	include \masm32\include\windows.inc
	include \masm32\include\user32.inc
	include \masm32\include\kernel32.inc
	include \masm32\include\shell32.inc
	includelib \masm32\lib\user32.lib
	includelib \masm32\lib\kernel32.lib	
	includelib \masm32\lib\shell32.lib
.data
URL db	'www.programmersforum.ru',0	
.code
start:
        xor	ebx,ebx
	push	  ebx		
	push	  ebx		
	push	  ebx		
	push	  offset URL	
	push	  ebx		
	push	  ebx		
	call	ShellExecute	
	push	  eax		
	call	ExitProcess	
end start
mov ax,bx вне форума Ответить с цитированием
Старый 29.12.2009, 01:19   #13
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

Решил возобновить тему
Как скачать файл из интернета:
Код:
.386
.model flat, stdcall
option casemap:none

option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc

includelib \masm32\lib\kernel32.lib
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib


include \MASM32\INCLUDE\wininet.inc
includelib \MASM32\LIB\wininet.lib

.data
fileUrl  db "http://...ссылка...",0
fileSave db "saved.zip",0
msgOk    db "Downloaded Success!",0
msgErr   db "Download Failed!",0
mcap     db "Result",0
.data?
AppName db 127 dup(?)
fHand dd ?
bwrite dd ?
hInstance HANDLE ?
hWin HANDLE ?
.code
start:
GetInetFile proc
LOCAL Buffer[1024]: BYTE
LOCAL hSession: DWORD
LOCAL hUrl: DWORD
LOCAL Bufferlen: DWORD
invoke GetModuleFileName, hInstance, addr AppName, sizeof AppName
invoke InternetOpen, addr AppName, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, NULL
mov hSession, eax
.if hSession == INVALID_HANDLE_VALUE
mov eax, FALSE
ret
.endif
invoke InternetOpenUrl, hSession, addr fileUrl, NULL, NULL, NULL, NULL
mov hUrl, eax
.if hUrl == INVALID_HANDLE_VALUE
mov eax, FALSE
ret
.endif
invoke CreateFile, addr fileSave, GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ,\
NULL,CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,NULL
mov fHand, eax
.if fHand == INVALID_HANDLE_VALUE
mov eax, FALSE
ret
.endif
invoke SetFilePointer, fHand, NULL, NULL, FILE_BEGIN
download:
       invoke InternetReadFile, hUrl, addr Buffer, sizeof Buffer, addr Bufferlen
         .if Bufferlen != 0 
       invoke WriteFile, fHand, addr Buffer, Bufferlen, ADDR bwrite, NULL
       jmp download
         .endif 
         
      invoke CloseHandle, fHand
      invoke InternetCloseHandle, hUrl
      invoke InternetCloseHandle, hSession
      mov eax, TRUE
      ret
GetInetFile endp
;============================== КОНЕЦ =================================
invoke GetInetFile
.if eax == TRUE 
invoke MessageBox, hWin, addr msgOk, addr mcap, MB_OK
.else
invoke MessageBox, hWin, addr msgErr, addr mcap, MB_OK
  .ENDIF  
invoke ExitProcess, 0

end start
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Старый 14.06.2010, 00:27   #14
viktor-zakal
Пользователь
 
Регистрация: 14.05.2010
Сообщений: 14
По умолчанию

Здравствуйте и сразу же прошу о помощи.
Есть пример программы написанный на FASM , помогите переделать ее под MASM 32 .
Привожу код
Код:
;---------------------------------------------
; Popup Window Demo
;---------------------------------------------

format PE GUI 4.0
entry start

include 'win32a.inc'

TIMER_ID = 666  ; Идентификатор таймера

;---------------------------------------------

section '.data' data readable writeable

coord   RECT    ; Размеры окна
screen  RECT    ; Размеры экрана

;---------------------------------------------

section '.code' code readable executable

  start:
        invoke  GetModuleHandle,0
        invoke  DialogBoxParam,eax,37,HWND_DESKTOP,DialogProc,0
        invoke  ExitProcess,0

;---------------------------------------------

proc DialogProc hwnddlg,msg,wparam,lparam
        push    ebx esi edi
        cmp     [msg],WM_INITDIALOG
        je      wminitdialog
        cmp     [msg],WM_COMMAND
        je      wmcommand
        cmp     [msg],WM_TIMER
        je      wmclose
        cmp     [msg],WM_LBUTTONDOWN
        je      popdown_window
        xor     eax,eax
        jmp     finish

wminitdialog:
        ; Получить размер рабочей области экрана
        invoke  SystemParametersInfo,SPI_GETWORKAREA,NULL,screen,FALSE

        ; Получить размер окна
        invoke  GetClientRect,[hwnddlg],coord

        ; Вычислить отступ от правой границы экрана
        mov     eax,[screen.right]
        sub     eax,[coord.right]
        dec     eax
        mov     [screen.right],eax

        ; Высота окна
        mov     ecx,[coord.bottom]
        ; Цикл всплытия окна
@@:
        ; Сохранить значение счетчика
        push    ecx

        ; Заполняем стек для MoveWindow
        push    TRUE
        mov     eax,[coord.bottom]
        sub     eax,ecx
        push    eax
        push    [coord.right]
        mov     ecx,[screen.bottom]
        sub     ecx,eax
        push    ecx
        invoke  MoveWindow,[hwnddlg],[screen.right]

        ; Так как сейчас только инициализация, то придется принудительно
        ; показать окно и обновить его содержимое
        invoke  ShowWindow,[hwnddlg], SW_SHOW
        invoke  UpdateWindow,[hwnddlg]

        ; Небольшая пауза
        invoke  Sleep,2

        ; Восстановить счетчик
        pop     ecx
        loop    @b

        ; Установить таймер закрытия окна на 10 секунд
        invoke  SetTimer,[hwnddlg],TIMER_ID,10000,NULL

        jmp     processed
wmcommand:
        jmp     processed
wmclose:
        ; Это наш таймер?
        cmp     [wparam],TIMER_ID
        jne     processed

popdown_window:
        ; Высота окна
        mov     ecx,[coord.bottom]
        ; Цикл закрытия окна
@@:
        ; Сохранить значение счетчика
        push    ecx

        ; Заполняем стек для MoveWindow
        push    TRUE
        push    ecx
        push    [coord.right]
        mov     eax,[screen.bottom]
        sub     eax,ecx
        push    eax
        invoke  MoveWindow,[hwnddlg],[screen.right]

        ; Обновить содержимое окна
        invoke  UpdateWindow,[hwnddlg]

        ; Небольшая пауза
        invoke  Sleep,2

        ; Восстановить счетчик
        pop     ecx
        loop    @b

        ; Удалить таймер
        invoke  KillTimer,[hwnddlg],TIMER_ID

        ; Закрыть диалоговое окно
        invoke  EndDialog,[hwnddlg],0
processed:
        mov     eax,1
finish:
        pop     edi esi ebx
        ret
endp

;---------------------------------------------

section '.idata' import data readable writeable

  library kernel32,'KERNEL32.DLL',\
          user32,'USER32.DLL'

  include 'apia\kernel32.inc'
  include 'apia\user32.inc'

;---------------------------------------------

section '.rsrc' resource data readable

  directory RT_DIALOG,dialogs

  resource dialogs,\
           37,LANG_ENGLISH+SUBLANG_DEFAULT,demonstration

  dialog demonstration,'Popup Window Demo',0,0,190,40,WS_POPUP+DS_CENTER+WS_BORDER+DS_SYSMODAL,WS_EX_TOOLWINDOW,0,'Verdana',8
    dialogitem 'BUTTON','',-1, 2, -1, 185, 35,WS_VISIBLE+BS_GROUPBOX
    dialogitem 'STATIC','Wait 10 sec or click left mouse button',-1,6,15,177,13,WS_VISIBLE+ES_CENTER
  enddialog
viktor-zakal вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Примеры/Уроки демосцен с исходниками Ivan_32 Gamedev - cоздание игр: Unity, OpenGL, DirectX 4 30.05.2009 13:06
Помогите отладить программу, плз!!! прога с пояснениями Gobl1n Паскаль, Turbo Pascal, PascalABC.NET 2 16.12.2008 20:09
Примеры использования и выбор лучшей DB BOBAH13 БД в Delphi 4 03.05.2008 22:32
Примеры излечения trial компонентов. Alar Общие вопросы Delphi 4 04.02.2008 14:30
Примеры для Visual C++ MFC RMih Visual C++ 2 29.01.2008 12:25