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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2013, 16:51   #1
riko782
Пользователь
 
Регистрация: 17.03.2012
Сообщений: 40
Вопрос Win - приложение

Здравствуйте! Задача следующая: нужно ввести натуральное число n в текст. поле, и ввести последовательность натур. чисел a(1), .., a(n) во второе. После нажатия на кнопку нужно вывести в третье текстовое поле количество нечетных членов последовательности. Есть следующий метод:

Код:
.data
entr    db  'Enter array size:',0
tptd    db  '%d',0
enum    db  'Enter A[%d]:',0
res db  'Odd elements : %d',0
cnt dd  0
.data?
_len    dd  ?
buf dd  ?
.code    
start:  
        invoke  crt_printf, ADDR entr
    invoke  crt_scanf, ADDR tptd, ADDR _len
    mov edi, eax
    mov ecx, [_len]
    mov ebx, 1
 
@@: push    ecx
    push    ebx
        invoke  crt_printf, ADDR enum, ebx
    invoke  crt_scanf, ADDR tptd, ADDR buf
    pop ebx
    pop ecx
    inc ebx
    mov eax, [buf]
    bt  eax,0
    adc [cnt],0
    loop    @B
        invoke  crt_printf, ADDR res, [cnt]
    invoke  crt_exit, 0
    end start
и его нужно вставить в указанное место в главном коде (во втором сообщении)
Вложения
Тип файла: txt code.txt (6.2 Кб, 121 просмотров)

Последний раз редактировалось riko782; 08.05.2013 в 16:56.
riko782 вне форума Ответить с цитированием
Старый 08.05.2013, 16:53   #2
riko782
Пользователь
 
Регистрация: 17.03.2012
Сообщений: 40
По умолчанию

Код:
.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\user32.lib
    includelib \masm32\lib\kernel32.lib
 
    WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
 
    .data
      ClassName         db "SimpleWinClass",0
      AppName           db "Программа",0
 
      CommandLine       dd 0
      hInstance         dd 0
      
      ButtonClassName   db "button",0
      ButtonText        db "Показать",0
      hwndButton        dd 0
 
      LabelClassName    db "static",0
      LabelText1        db "  Введите натур. число n ",0 
      LabelText2        db "  Введите последов. натур. чисел ",0
      LabelText3        db "  Нечетные члены ",0
      hwndLabel1        dd 0
      hwndLabel2        dd 0 
      hwndLabel3        dd 0 
 
 
      EditClassName     db "edit",0
      hwndEdit1         dd 0
      hwndEdit2         dd 0
       hwndEdit3         dd 0
 
      bytesWritten      DD 0
      buffer                db 512 dup(?)
      buffer1           db 512 dup(?)
      buffer2           db 512 dup(?)
      bytesWritten1      DD 0
      bytesWritten2      DD 0
 
    .const
        ButtonID  equ 1
        EditID1   equ 2
        EditID2   equ 3
        LabelID1  equ 4
        LabelID2  equ 5
        
        EditID3   equ 6 
        LabelID3  equ 7
  
    .code
start:
    invoke GetModuleHandle, NULL
    mov    hInstance,eax
    invoke GetCommandLine
    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-2
  
      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
 
    INVOKE CreateWindowEx,WS_EX_CLIENTEDGE,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
 
    StartLoop:
        invoke GetMessage, ADDR msg, NULL, 0,0
        cmp eax, 0
        je ExitLoop
        invoke TranslateMessage, ADDR msg
        invoke DispatchMessage, ADDR msg
        jmp StartLoop
    ExitLoop:
        mov eax, msg.wParam
        ret
 
WinMain endp
(продолжение в следующем сообщение)
riko782 вне форума Ответить с цитированием
Старый 08.05.2013, 16:54   #3
riko782
Пользователь
 
Регистрация: 17.03.2012
Сообщений: 40
По умолчанию

Код:
WndProc proc hWin:HWND, 
             uMsg:UINT,
             wParam:WPARAM,
             lParam:LPARAM
 
    cmp uMsg, WM_CREATE
    jne next_1
    invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR LabelClassName,NULL,\
                          WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or\
                          ES_AUTOHSCROLL,\
                          20,35,260,25,hWin,LabelID1,hInstance,NULL
    mov  hwndLabel1,EAX
 
    invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR LabelClassName,NULL,\
                          WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or\
                          ES_AUTOHSCROLL,\
                          20,65,260,25,hWin,LabelID2,hInstance,NULL
    mov  hwndLabel2,EAX
 
    invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR LabelClassName,NULL,\
                          WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or\
                          ES_AUTOHSCROLL,\
                          20,125,260,25,hWin,LabelID3,hInstance,NULL
    mov  hwndLabel3,EAX
 
    invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR EditClassName,NULL,\
                          WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or\
                          ES_AUTOHSCROLL,\
                          290,35,200,25,hWin,EditID1,hInstance,NULL
    mov  hwndEdit1,eax
    
    invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR EditClassName,NULL,\
                         WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or\
                         ES_AUTOHSCROLL,\
                         290,65,200,25,hWin,EditID2,hInstance,NULL
    mov  hwndEdit2,eax
 
    invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR EditClassName,NULL,\
                         WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or\
                         ES_AUTOHSCROLL,\
                         310,125,50,25,hWin,EditID3,hInstance,NULL
    mov  hwndEdit3,eax
     
    invoke CreateWindowEx,NULL, ADDR ButtonClassName,ADDR ButtonText,\
                          WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,\
                          140,95,130,25,hWin,ButtonID,hInstance,NULL
    mov  hwndButton,eax
    
    invoke SetFocus, hwndEdit1
    invoke SetWindowText,hwndLabel1,ADDR LabelText1 
    invoke SetWindowText,hwndLabel2,ADDR LabelText2
    invoke SetWindowText,hwndLabel3,ADDR LabelText3
 
    ret 
 
next_1:
   cmp uMsg, WM_COMMAND
   jne next_2
   mov EAX,wParam
   cmp lParam, 0
   je  ex_wmcom
   cmp AX, ButtonID 
   jne ex_wmcom
   shr EAX, 16
   cmp AX, BN_CLICKED
   jne ex_wmcom
   invoke GetWindowText,hwndEdit1,ADDR buffer1,512  
   mov bytesWritten1, EAX    
 
      invoke GetWindowText,hwndEdit2,ADDR buffer2,512
      mov bytesWritten2, EBX
 
   call ReplaceSpace
   invoke SetWindowText,hwndEdit3,ADDR buffer1 
ex_wmcom:
   ret  
next_2:
   cmp uMsg, WM_DESTROY
   jne next_3
   push NULL
   call PostQuitMessage
   xor eax, eax                   
   ret                           
next_3:
   push lParam
   push wParam
   push uMsg
   push hWin
   call DefWindowProc
   ret
 
WndProc endp
;Beginning_of_MyProc
MyProc proc
;Realisation_of_procedure
MyProc endp
;The_end_of_the_MyProc
end start
Вопрос: как соединить процедуру в первом коде с главной программой?
riko782 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема совместимости Win XP и Win 2000 при взаимодействии с консолью. maleziv Win Api 10 06.08.2012 22:35
Как сохранить проект VB написанный на win XP , чтобы он работал на win NT Vceznayka Microsoft Office Excel 1 08.02.2012 13:23
Многопоточное приложение средствами WIN 32 API iamStudent Visual C++ 2 01.11.2011 15:28
MDI Приложение (Delphi 2007) не запускается на Win XP Eng sdsfy Общие вопросы Delphi 9 19.03.2011 19:36
висне сет при запуску Win XP после установки Win 7 VVkSoft Windows 3 15.09.2009 10:36