flat assembler
Message board for the users of flat assembler.
Index
> Windows > For Newbies: Text.asm Iczelion's example FASMW version |
Author |
|
hitertan 17 Mar 2004, 15:22
Oh yeah!I studied Iczelion's source a moment ago and just thinking about this question.Thank you!
_________________ i like assembly language and i study it in my pleasure time tanshunquan@hotmail.com |
|||
17 Mar 2004, 15:22 |
|
Vortex 17 Mar 2004, 19:08
imagineer,
Nice work; just you should consider using Fasm's standard include files for the API functions: Code:
include '%fasminc%\win32a.inc'
_________________ Code it... That's all... |
|||
17 Mar 2004, 19:08 |
|
vbVeryBeginner 26 Aug 2004, 07:53
- use lstrlen instead of hardcoded string length
- use GetCurrentObject to get the default Font object sincerely, vbVeryBeginner http://sulaiman.thefreebizhost.com Code: format PE GUI 4.0 entry start include '%fasminc%\win32a.inc' macro RGB cR, cG, cB { xor eax,eax ;clear the eax mov ah,cB shl eax,8 mov ah,cG mov al,cR } section '.data' data readable writeable wHMain dd ? wHInstance dd ? wTitle db 'FASM - Experiment 02',0 wClsName db 'EXP02',0 wMsg MSG wCls WNDCLASS OBJ_FONT equ 6 expDc dd ? expTxt1 db 'Win32 assembly with FASM is',0 expTxt2 db 'great and easy!',0 expFont db 'Courier New',0 expPs PAINTSTRUCT section '.code' code readable executable start: ; +------------------------------+ ; | registering the window class | ; +------------------------------+ invoke GetModuleHandle,NULL mov [wHInstance],eax mov [wCls.hInstance],eax mov [wCls.lpfnWndProc],window_procedure mov [wCls.lpszClassName],wClsName mov [wCls.hbrBackground],COLOR_BTNFACE+1 invoke LoadIcon,0,IDI_APPLICATION mov [wCls.hIcon],eax invoke LoadCursor,0,IDC_ARROW mov [wCls.hCursor],eax invoke RegisterClass,wCls ; +--------------------------+ ; | creating the main window | ; +--------------------------+ invoke CreateWindowEx,\ 0,\ wClsName,\ wTitle,\ WS_VISIBLE+WS_DLGFRAME+WS_SYSMENU,\ 128,\ 128,\ 550,\ 100,\ 0,\ 0,\ [wHInstance],\ 0 mov [wHMain],eax ; +---------------------------+ ; | entering the message loop | ; +---------------------------+ window_message_loop_start: invoke GetMessage,wMsg,NULL,0,0 or eax,eax je window_message_loop_end invoke TranslateMessage,wMsg invoke DispatchMessage,wMsg jmp window_message_loop_start window_message_loop_end: invoke ExitProcess,0 ; +----------------------+ ; | the window procedure | ; +----------------------+ proc window_procedure,hWnd,uMsg,wParam,lParam push ebx esi edi ;even the API would preserved, but play safe :p cmp [uMsg],WM_DESTROY je wmDESTROY cmp [uMsg],WM_PAINT je wmPAINT wmDEFAULT: invoke DefWindowProc,[hWnd],[uMsg],[wParam],[lParam] jmp wmBYE wmPAINT: invoke BeginPaint,[hWnd],expPs mov [expDc],eax invoke GetCurrentObject,[expDc],OBJ_FONT push eax invoke CreateFont,\ 24,\ 16,\ 0,\ 0,\ 400,\ 0,\ 0,\ 0,\ DEFAULT_CHARSET,\ OUT_DEFAULT_PRECIS,\ CLIP_DEFAULT_PRECIS,\ DEFAULT_QUALITY,\ DEFAULT_PITCH or FF_MODERN,\ expFont invoke SelectObject,[expDc],eax RGB 200,200,50 invoke SetTextColor,[expDc],eax RGB 0,0,255 invoke SetBkColor,[expDc],eax invoke lstrlen,expTxt1 invoke TextOut,[expDc],0,0,expTxt1,eax invoke lstrlen,expTxt2 invoke TextOut,[expDc],0,26,expTxt2,eax pop eax invoke SelectObject,[expDc],eax invoke EndPaint,[hWnd],expPs jmp wmBYE wmDESTROY: invoke PostQuitMessage,0 wmBYE: pop edi esi ebx return endp section '.idata' import data readable writable library KERNEL32, 'KERNEL32.DLL',\ USER32, 'USER32.DLL',\ GDI32, 'GDI32.DLL' import KERNEL32,\ GetModuleHandle, 'GetModuleHandleA',\ lstrlen, 'lstrlenA',\ ExitProcess, 'ExitProcess' import USER32,\ RegisterClass, 'RegisterClassA',\ CreateWindowEx, 'CreateWindowExA',\ DefWindowProc, 'DefWindowProcA',\ LoadCursor, 'LoadCursorA',\ LoadIcon, 'LoadIconA',\ GetMessage, 'GetMessageA',\ TranslateMessage, 'TranslateMessage',\ DispatchMessage, 'DispatchMessageA',\ BeginPaint, 'BeginPaint',\ EndPaint, 'EndPaint',\ PostQuitMessage, 'PostQuitMessage' import GDI32,\ CreateFont, 'CreateFontA',\ SetTextColor, 'SetTextColor',\ SetBkColor, 'SetBkColor',\ TextOut, 'TextOutA',\ GetCurrentObject, 'GetCurrentObject',\ SelectObject, 'SelectObject' |
|||
26 Aug 2004, 07:53 |
|
pelaillo 26 Aug 2004, 11:43
vbVeryBeginner wrote: - use lstrlen instead of hardcoded string length Why? For constant strings is better to have it hardcoded instead. It saves processor many cycles to determine a number already known. |
|||
26 Aug 2004, 11:43 |
|
vbVeryBeginner 26 Aug 2004, 14:21
hi pelaillo,
actually, i just wanna introduce that lstrlen function :) coz they got sizeof in MASM :p i guess i will really count that character one by one if i didn't know this function :p newbies notepad didn't help them count char once they highlight the text, unlike my textpad (http://www.textpad.com) fully functional trial version :p what editor u use pelaillo ;? sincerely, vbVeryBeginner. |
|||
26 Aug 2004, 14:21 |
|
pelaillo 26 Aug 2004, 16:53
hi vbVeryBeginner,
Fasm counts number of chars: Code: someText db 'This is some text' someText.size = $ - someText invoke TextOut, [_hdc], 0 ,0, someText, someText.size Editor I use is KetilO's RadAsm (radasm.visualassembler.com). I have it already customized for fasm in my homepage. http://as.modshack.co.uk |
|||
26 Aug 2004, 16:53 |
|
vbVeryBeginner 27 Aug 2004, 08:19
|
|||
27 Aug 2004, 08:19 |
|
RedGhost 20 May 2005, 14:02
ah that rgb macro was exactly what i was looking for thanks
|
|||
20 May 2005, 14:02 |
|
NoName 28 Jul 2005, 08:36
Tutorials 4,5,6,7,8-1,9,12,23 on Fasm
|
|||||||||||
28 Jul 2005, 08:36 |
|
< Last Thread | Next Thread > |
Forum Rules:
|
Copyright © 1999-2024, Tomasz Grysztar. Also on GitHub, YouTube.
Website powered by rwasa.