بالا
 تعرفه تبلیغات




 دانلود نمونه سوالات نیمسال دوم 93-94 پیام نور

 دانلود نمونه سوالات آزمونهای مختلف فراگیر پیام نور

صفحه 5 از 5 اولیناولین ... 345
نمایش نتایج: از شماره 41 تا 42 از مجموع 42

موضوع: آموزش جامع زبان اسمبلی - Assembly

  1. #41
    TAHA آواتار ها
    • 9,180
    مدير بازنشسته

    عنوان کاربری
    مدير بازنشسته
    تاریخ عضویت
    Mar 2009
    محل تحصیل
    PNU-CLUB
    شغل , تخصص
    PNU-CLUB
    رشته تحصیلی
    PNU-CLUB
    راه های ارتباطی

    پیش فرض

    كد فوق ساده است واحتياجي به توضيح ندارد.اين فايل را همانطوري كه قبلاً توضيح دادم assemble و link كنيد.پس از پايان كار يه نگاهي به حجم فايل exe ايجاد شده بيندازيد...حتماً تعجب خواهيد كرد!!!

    پنجره اي رو به آفتاب!!
    شايد وقتش شده باشه كه با هم يك پنجره بسازيم!!!
    در مورد كد زير فكر ميكنم توضيحات درون خود كد كافي باشد اما متذكر ميشوم كه اگر نحوه ساختن يك پنجره بوسيله Win32 API را نميدانيد ممكن است كد زير كمي براي شما پيچيده باشد (براي اطلاعات بيشتر به كتاب Programming Windows نوشته Charles Petzoldمراجعه كنيد.)

    .386
    .model flat, stdcall
    option casemap:none
    include \masm32\include\WINDOWS.inc
    include \masm32\include\user32.inc
    include \masm32\include\kernel32.inc
    includelib \masm32\lib\kernel32.lib
    includelib \masm32\lib\user32.lib



    .DATA ; initialized data
    ClassName db "SimpleWinClass",0 ; the name of our window class
    AppName db "Our First Window",0 ; the name of our window



    ;-------------------------------------------------------------------
    .DATA? ; Uninitialized data
    hInstance HINSTANCE ? ; Instance handle of our program
    CommandLine LPSTR ?
    ;-------------------------------------------------------------------
    .CODE ; Here begins the code

    WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR, CmdShowWORD
    ; creating local variables on stack
    LOCAL wc:WNDCLASSEX
    LOCAL msg:MSG
    LOCAL hwnd:HWND

    mov wc.cbSize,SIZEOF WNDCLASSEX ; fill values in members of wc
    mov wc.style, CS_HREDRAW or CS_VREDRAW
    mov wc.lpfnWndProc, OFFSET WndProc
    mov wc.cbClsExtra,NULL
    mov wc.cbWndExtra,NULL
    push hInstance
    pop wc.hInstance
    mov wc.hbrBackground,COLOR_WINDOW+1
    mov wc.lpszMenuName,NULL
    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 ; register our window class
    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,CmdShow ; display our window on desktop
    invoke UpdateWindow, hwnd ; refresh the client area

    ; Enter message loop
    .WHILE TRUE
    invoke GetMessage, ADDR msg,NULL,0,0
    .BREAK .IF (!eax)
    invoke TranslateMessage, ADDR msg
    invoke DispatchMessage, ADDR msg
    .ENDW
    mov eax,msg.wParam ; return exit code in eax
    ret
    WinMain endp

    ;----------------------------------------------------------------------
    WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM

    .IF uMsg==WM_DESTROY ;if the user closes our window
    invoke PostQuitMessage,NULL ; quit
    .ELSE
    invoke DefWindowProc,hWnd,uMsg,wParam,lParam ;Default message processing
    ret
    .ENDIF
    xor eax,eax
    ret
    WndProc endp
    ;-----------------------------------------------------------------------

    start:
    invoke GetModuleHandle, NULL ;get the instance handle of our program.
    mov hInstance,eax
    invoke GetCommandLine ; get the command line. You don't have to call this
    ; function IF your program doesn't process the command line.
    mov CommandLine,eax
    invoke WinMain, hInstance,NULL,CommandLine,SW_SHOWDEFAULT ;call the main ;function
    invoke ExitProcess, eax ;quit our program. The exit code is returned in eax ;from WinMain.
    end start

    نتيجه برنامه را در شكل زير مشاهده ميكنيد:


    آيا فكر ميكنيد اين برنامه هيچكاري جز نمايش يك پنجره خالي انجام نميدهد؟

    نكته: در كد فوق از عملگرد جديد MASM با نام ADDR استفاده شده است .اين عملگرآدرس effective يك متغييررا محاسبه ميكند ولي مشكل آن اينست كه تنها به همراه invoke قابل استفاده است ،پس در حالات ديگرنميتوانيد ADDR را بكار بريدو بايد از همان دستور LEA استفاده كنيد.

  2. #42
    • 2

    عنوان کاربری
    کاربر باشگاه
    تاریخ عضویت
    Jun 2010
    راه های ارتباطی

    پیش فرض

    با سلام و خسته نباشید
    من میخواستم برنامه ای با اسمبلی بنویسم که رشته ای از کاربر بگیره و طول رشته را در cx ذخیره کنه
    به این برنامه خیلی نیاز دارم
    با تشکر

صفحه 5 از 5 اولیناولین ... 345

برچسب برای این موضوع

مجوز های ارسال و ویرایش

  • شما نمی توانید موضوع جدید ارسال کنید
  • شما نمی توانید به پست ها پاسخ دهید
  • شما نمی توانید فایل پیوست ضمیمه کنید
  • شما نمی توانید پست های خود را ویرایش کنید
  •