Консультация № 172011
08.09.2009, 17:41
0.00 руб.
0 7 1
Здравствуйте уважаемые программисты!!! переведите текст проги, с синтаксиса масма на синтаксис фасма!

Приложение:
.386
.model flat,stdcall
option casemap:none

WinMain proto :DWORD,:DWORD,:DWORD,:DWORD

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

.data
ClassName db "SimpleWinClass",0
AppName db "Our First Window",0
MenuName db "FirstMenu",0 ; The name of our menu in the
; resource file.
Test_string db "You selected Test menu item",0
Hello_string db "Hello, my friend",0
Goodbye_string db "See you again, bye",0

.data?
hInstance HINSTANCE ?
CommandLine LPSTR ?

.const
IDM_TEST equ 1 ; Menu IDs
IDM_HELLO equ 2
IDM_GOODBYE equ 3
IDM_EXIT equ 4

.code
start:
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke GetCommandLine
mov CommandLine,eax
invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT
invoke ExitProcess,eax

WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
LOCAL wc:WNDCLASSEX
LOCAL msg:MSG
LOCAL hwnd:HWND

mov wc.cbSize,SIZEOF WNDCLASSEX
mov wc.style, CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc, OFFSET WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,NULL
push hInst
pop wc.hInstance
mov wc.hbrBackground,COLOR_WINDOW+1
mov wc.lpszMenuName,OFFSET MenuName ; Put our menu name here
mov wc.lpszClassName,OFFSET ClassName
invoke LoadIcon,NULL,IDI_APPLICATION
mov wc.hIcon,eax
mov wc.hIconSm,eax
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor,eax
invoke RegisterClassEx, addr wc
invoke CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\
WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\
hInst,NULL
mov hwnd,eax
invoke ShowWindow, hwnd,SW_SHOWNORMAL
invoke UpdateWindow, hwnd
.WHILE TRUE
invoke GetMessage, ADDR msg,NULL,0,0
.BREAK .IF (!eax)
invoke DispatchMessage, ADDR msg
.ENDW
mov eax,msg.wParam
ret

WinMain endp

WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
.IF uMsg==WM_DESTROY
invoke PostQuitMessage,NULL
.ELSEIF uMsg==WM_COMMAND
mov eax,wParam
.IF ax==IDM_TEST
invoke MessageBox,NULL,ADDR Test_string,OFFSET AppName,MB_OK
.ELSEIF ax==IDM_HELLO
invoke MessageBox, NULL,ADDR Hello_string, OFFSET AppName,MB_OK
.ELSEIF ax==IDM_GOODBYE
invoke MessageBox,NULL,ADDR Goodbye_string, OFFSET AppName, MB_OK
.ELSE
invoke DestroyWindow,hWnd
.ENDIF
.ELSE
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.ENDIF
xor eax,eax
ret

WndProc endp
end start

********************************
Menu.rc
*******************************
#define IDM_TEST 1
#define IDM_HELLO 2
#define IDM_GOODBYE 3
#define IDM_EXIT 4

FirstMenu MENU
{
POPUP "&PopUp"
{
MENUITEM "&Say Hello",IDM_HELLO
MENUITEM "Say &GoodBye", IDM_GOODBYE
MENUITEM SEPARATOR
MENUITEM "E&xit",IDM_EXIT
}

MENUITEM "&Test", IDM_TEST
}

Обсуждение

Неизвестный
08.09.2009, 19:40
общий
Аааааааааа, ну когда я стану настоящим мастер-кодером по асму!!!
ну хоть че-нить напишите!!! аааааааа
Неизвестный
08.09.2009, 19:42
общий
это ответ
Здравствуйте, WWWorm.

ресурсы скомпилируйте в файл menu.res

Приложение:
format PE GUI 4.0
entry entry_point

include 'D:\prg\fasm_1_67_38\INCLUDE\win32a.inc'

IDM_TEST equ 1 ; Menu IDs
IDM_HELLO equ 2
IDM_GOODBYE equ 3
IDM_EXIT equ 4

;--------------------------------------
section '.data' data readable writeable
ClassName db "SimpleWinClass",0
AppName db "Our First Window",0
MenuName db "FirstMenu",0 ; The name of our menu in the resource file
Test_string db "You selected Test menu item",0
Hello_string db "Hello, my friend",0
Goodbye_string db "See you again, bye",0
;---------------------------------------
section '.bss' readable writeable
hInstance dd ?
CommandLine dd ?
;---------------------------------------
section '.code' code readable executable
entry_point:

invoke GetModuleHandle, NULL
mov [hInstance],eax

invoke GetCommandLine
mov [CommandLine],eax

stdcall WinMain, [hInstance],NULL,[CommandLine],SW_SHOWDEFAULT

invoke ExitProcess,eax



proc WinMain hInst:DWORD,hPrevInst:DWORD,CmdLine:DWORD,CmdShow:DWORD
local wc:WNDCLASSEX,msg:MSG,hwnd:DWORD

mov [wc.cbSize],sizeof.WNDCLASSEX
mov [wc.style],CS_HREDRAW or CS_VREDRAW
mov [wc.lpfnWndProc],WndProc
mov [wc.cbClsExtra],NULL
mov [wc.cbWndExtra],NULL
push [hInst]
pop [wc.hInstance]
mov [wc.hbrBackground],COLOR_WINDOW+1
mov [wc.lpszMenuName],MenuName ; Put our menu name here
mov [wc.lpszClassName],ClassName
invoke LoadIcon,NULL,IDI_APPLICATION
mov [wc.hIcon],eax
mov [wc.hIconSm],eax
invoke LoadCursor,NULL,IDC_ARROW
mov [wc.hCursor],eax

lea eax,[wc]
invoke RegisterClassEx, eax

invoke CreateWindowEx,NULL,ClassName,AppName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,[hInst],NULL
mov [hwnd],eax

invoke ShowWindow, [hwnd],SW_SHOWNORMAL
invoke UpdateWindow, [hwnd]

.message_loop:
lea eax,[msg]
invoke GetMessage, eax,NULL,0,0
test eax,eax
jz .exit

lea eax,[msg]
invoke DispatchMessage, eax
jmp .message_loop

.exit:
mov eax,[msg.wParam]
ret
endp

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

proc WndProc uses ebx esi edi, hWnd:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD

cmp [uMsg],WM_DESTROY
je .wm_destroy
cmp [uMsg],WM_COMMAND
je .wm_command

invoke DefWindowProc,[hWnd],[uMsg],[wParam],[lParam]
jmp .exit


.wm_destroy:
invoke PostQuitMessage,NULL
xor eax,eax
jmp .exit

.wm_command:
mov eax,[wParam]

cmp eax,IDM_TEST
je .idm_test
cmp eax,IDM_HELLO
je .idm_hello
cmp eax,IDM_GOODBYE
je .idm_goodbye

invoke DestroyWindow,[hWnd]
xor eax,eax
jmp .exit


.idm_test:
invoke MessageBox,NULL,Test_string,AppName,MB_OK
xor eax,eax
jmp .exit

.idm_hello:
invoke MessageBox,NULL,Hello_string,AppName,MB_OK
xor eax,eax
jmp .exit

.idm_goodbye:
invoke MessageBox,NULL,Goodbye_string,AppName,MB_OK
xor eax,eax
jmp .exit

.exit:
ret
endp

;---------------------------------------------------
section '.rsrc' data readable resource from 'menu.res'

;----------------------------------------------
section '.idata' import data readable writeable

library user,'USER32.DLL',\
kernel,'KERNEL32.DLL'

import user,\
LoadIcon,'LoadIconA',\
LoadCursor,'LoadCursorA',\
RegisterClassEx,'RegisterClassExA',\
CreateWindowEx,'CreateWindowExA',\
DestroyWindow,'DestroyWindow',\
ShowWindow,'ShowWindow',\
UpdateWindow,'UpdateWindow',\
GetMessage,'GetMessageA',\
TranslateMessage,'TranslateMessage',\
DispatchMessage,'DispatchMessageA',\
PostQuitMessage,'PostQuitMessage',\
MessageBox,'MessageBoxA',\
DefWindowProc,'DefWindowProcA'

import kernel,\
GetModuleHandle,'GetModuleHandleA',\
GetCommandLine,'GetCommandLineA',\
ExitProcess,'ExitProcess'
Неизвестный
08.09.2009, 19:43
общий
ну хоть че нить напишите, по поводу: переведите текст проги, с синтаксиса масма на синтаксис фасма!
Неизвестный
09.09.2009, 11:40
общий
ресурсы скомпилируйте в файл menu.res
а как?
Неизвестный
09.09.2009, 13:03
общий
ресурсы компилируются компилятором ресурсов
процесс аналогичен компиляции программы на ассемблере
из текстового файла с описанием получается двоичное представление
посмотрите любую книгу по WIN32 API
если сильно ленитесь, то я могу вам прислать файл menu.res
только здесь в этом форуме я не вижу опции вложения файлов
или может у меня статус маленький еще и мне не положено
почту свою указывайте, я вышлю
Неизвестный
09.09.2009, 13:21
общий
r_101_89@mail.ru
тока можно без вирусов
Неизвестный
09.09.2009, 16:58
общий
вирусы - за отдельную плату
Форма ответа