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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2009, 00:51   #1
EThread
 
Регистрация: 05.10.2008
Сообщений: 9
По умолчанию Пытаюсь инвертировать изображение (masm)

Пытаюсь инвертировать изображение по нажатию на кнопку IDC_BTN1.
Но на end start ругается: fatal error A1011: directive must be in control block
Подскажите, как исправить?

Код:
.386
.model flat, stdcall  ;32 bit memory model
option casemap :none  ;case sensitive

include demo.inc

.code

start:
	invoke	GetModuleHandle,NULL
	mov		hInstance,eax
	invoke	InitCommonControls
	; 1st:  Init graphics engine before all
	invoke	aRC_GraphicEx_Init
	invoke	DialogBoxParam,hInstance,DIALOGO,NULL,addr DlgProc,NULL
	; At last:  Deinit graphics engine
	invoke	aRC_GraphicEx_Deinit
	invoke	ExitProcess,0

;########################################################################
DlgProc proc hWin:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    LOCAL ps:PAINTSTRUCT
    LOCAL rect:RECT
    LOCAL wc:WNDCLASSEX
    LOCAL msg:MSG
    

	.if ( uMsg == WM_INITDIALOG )
		invoke	LoadIcon,hInstance,100
		invoke	SendMessage,hWin,WM_SETICON,TRUE,EAX

	.elseif ( uMsg == WM_COMMAND )
		mov		ebx,wParam
		.if ( bx>=BTN_BMP && bx <=BTN_WMF )
			; if exists previous bitmap handle, delete it
			invoke	DeleteObject,h_bitmap
			; wParam (ebx) low word is important
			and		ebx,0000FFFFh
			sub		ebx,BTN_BMP
			
			; GraphicEx loads ico, bmp, dib, wmf, emf, gif, jpg and png formats
			; params:
			; - executable_name.extension
			;   extension can be .exe or .dll
			; - resource_name.extension (check graphics.rc)
			;   extension can be .ico, .bmp, .dib, .wmf, .emf, .gif, .jpg and .png
			lea		esi,name_res
			imul	ebx,12
			add		esi,ebx
			invoke	aRC_GraphicEx_LoadGraphic,hInstance,esi
			mov		h_bitmap,eax		; handle bitmap
			mov		bmp_width,ecx		; width bitmap
			mov		bmp_height,edx		; height bitmap
			invoke	SendDlgItemMessage,hWin,IMG_BITMAP,STM_SETIMAGE,0,eax 
			
			; now show dimensions in window
			invoke	wsprintf,addr resolution,addr format, bmp_width, bmp_height
			invoke	SendDlgItemMessage,hWin,STC_RESOLUTION,WM_SETTEXT,0,addr resolution
		.endif
        
               
	.elseif ( uMsg == WM_CLOSE )
		invoke	EndDialog,hWin,0

	.else
		mov		EAX,FALSE
		ret
	.endif
	
	.if ( bx==IDC_BTN1 ) 
           invoke	SendDlgItemMessage,hWin,IMG_BITMAP,STM_GETIMAGE,0,eax         
           ;invoke LoadBitmap,hInstance,37
           mov h_bitmap,eax
           ;jmp @finish
           ;invoke BeginPaint,hWin, ps
           mov    hdc,eax
           invoke CreateCompatibleDC,[hdc]
           mov hMemDC,eax
           ;invoke SelectObject, hMemDC, h_bitmap
           ;invoke GetClientRect, hwin,addr rect
           invoke BitBlt,hdc,0,0,rect.right,rect.bottom,hMemDC,0,0,NOTSRCCOPY
           invoke DeleteDC,hMemDC
           ;invoke EndPaint,hwn,ps
           ;jmp @finish           
           ;@finish: 
           pop edi esi ebx        
        ;.endif
        
	mov		EAX,TRUE
	ret
DlgProc endp



end start
EThread вне форума Ответить с цитированием
Старый 23.12.2009, 01:41   #2
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

а почему у вас .endif закоментирован в конце ?
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 23.12.2009, 01:58   #3
EThread
 
Регистрация: 05.10.2008
Сообщений: 9
По умолчанию

Вот код без ошибок, но не инвертирует:
Код:
.386
.model flat, stdcall  ;32 bit memory model
option casemap :none  ;case sensitive

include demo.inc

.code

start:
	invoke	GetModuleHandle,NULL
	mov		hInstance,eax
	invoke	InitCommonControls
	; 1st:  Init graphics engine before all
	invoke	aRC_GraphicEx_Init
	invoke	DialogBoxParam,hInstance,DIALOGO,NULL,addr DlgProc,NULL
	; At last:  Deinit graphics engine
	invoke	aRC_GraphicEx_Deinit
	invoke	ExitProcess,0

;########################################################################
DlgProc proc hWin:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
   ; LOCAL ps:PAINTSTRUCT
   ; LOCAL rect:RECT
  ;  LOCAL wc:WNDCLASSEX
  ;  LOCAL msg:MSG
    

	.if ( uMsg == WM_INITDIALOG )
		invoke	LoadIcon,hInstance,100
		invoke	SendMessage,hWin,WM_SETICON,TRUE,EAX

	.elseif ( uMsg == WM_COMMAND )
		mov		ebx,wParam
		.if ( bx>=BTN_BMP && bx <=BTN_WMF )
			; if exists previous bitmap handle, delete it
			invoke	DeleteObject,h_bitmap
			; wParam (ebx) low word is important
			and		ebx,0000FFFFh
			sub		ebx,BTN_BMP
			
			; GraphicEx loads ico, bmp, dib, wmf, emf, gif, jpg and png formats
			; params:
			; - executable_name.extension
			;   extension can be .exe or .dll
			; - resource_name.extension (check graphics.rc)
			;   extension can be .ico, .bmp, .dib, .wmf, .emf, .gif, .jpg and .png
			lea		esi,name_res
			imul	ebx,12
			add		esi,ebx
			invoke	aRC_GraphicEx_LoadGraphic,hInstance,esi
			mov		h_bitmap,eax		; handle bitmap
			mov		bmp_width,ecx		; width bitmap
			mov		bmp_height,edx		; height bitmap
			invoke	SendDlgItemMessage,hWin,IMG_BITMAP,STM_SETIMAGE,0,eax 
			
			; now show dimensions in window
			invoke	wsprintf,addr resolution,addr format, bmp_width, bmp_height
			invoke	SendDlgItemMessage,hWin,STC_RESOLUTION,WM_SETTEXT,0,addr resolution
		.endif
        
               
	.elseif ( uMsg == WM_CLOSE )
		invoke	EndDialog,hWin,0

	.else
		mov		EAX,FALSE
		ret
	.endif       
	mov		EAX,TRUE
	ret
DlgProc endp

MyProc proc  hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    LOCAL Ps:PAINTSTRUCT
    LOCAL rect:RECT
    LOCAL wc:WNDCLASSEX
    LOCAL msg:MSG
;    LOCAL hWin:HWND
    .if ( uMsg == WM_COMMAND )
		mov		ebx,wParam
        ;.if ( bx==IDC_BTN1 )
           cmp bx,IDC_BTN1
           jne outLabel
           ;invoke	SendDlgItemMessage, hWin, IMG_BITMAP, WM_PAINT,0, eax  
           invoke	SendDlgItemMessage,hWnd,IMG_BITMAP,STM_GETIMAGE,0,eax  
                  
           invoke LoadBitmap,hInstance,37
           mov h_bitmap,eax
           jmp fin
           invoke BeginPaint,hWnd, addr Ps
           mov    hdc,eax
           invoke CreateCompatibleDC,hdc
          mov hMemDC,eax
           invoke SelectObject, hMemDC, h_bitmap
           invoke GetClientRect, hWnd, addr rect
           invoke BitBlt,hdc,0,0,rect.right,rect.bottom,hMemDC,0,0,NOTSRCCOPY
           invoke DeleteDC,hMemDC
           invoke EndPaint, hWnd, addr Ps
           invoke	SendDlgItemMessage,hWnd,IMG_BITMAP,STM_SETIMAGE,0,eax
           jmp fin
           fin:
              pop edi
              pop esi
              pop ebx
           
           ;@finish:
           outLabel: 
     .endif      
          
    ret   
        
MyProc endp


end start

Последний раз редактировалось EThread; 23.12.2009 в 02:22.
EThread вне форума Ответить с цитированием
Старый 23.12.2009, 02:21   #4
EThread
 
Регистрация: 05.10.2008
Сообщений: 9
По умолчанию

Ошибку исправила. Теперь просто не инвертирует. Помогите, пожалуйста, не вижу в чём шибка...
EThread вне форума Ответить с цитированием
Старый 23.12.2009, 16:40   #5
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Код:
     invoke BeginPaint,hWnd, addr Ps
           mov    hdc,eax
           invoke CreateCompatibleDC,hdc
          mov hMemDC,eax
           invoke SelectObject, hMemDC, h_bitmap
           invoke GetClientRect, hWnd, addr rect
           invoke BitBlt,hdc,0,0,rect.right,rect.bottom,hMemDC,0,0,NOTSRCCOPY
           invoke DeleteDC,hMemDC
           invoke EndPaint, hWnd, addr Ps
Это надо в обработчике сообщения WM_PAINT писать.
Да и вообще я чего-то мало что понял.
Что за MyProc? Что такое aRC_GraphicEx_Init?
Ну и пожелание напоследок (если позволите) - не используйте на ассемблере if,for,while и т.п. инструкции. Код становится нечитабельным.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Инвертировать строку Nitriyc Помощь студентам 4 30.11.2009 11:52
Инвертировать связный список levandowskiy Общие вопросы C/C++ 2 21.08.2009 15:20
Инвертировать стэк в C++ Drozvd Помощь студентам 0 09.04.2009 03:58
Инвертировать таблицу? Ash БД в Delphi 2 29.01.2009 02:23