2/21/10

Assembly පාඩම 4

අද අපි කරන්න යන්නේ Hello World Program එකේ GUI සංස්කරනය ... මෙමගින් අපිට ඉතා අලංකාර අතුරුමුහුනතක් සාදා ගත හැකියි.
පහතින් තියෙන්නෙ කොටන්න ඕනැ කරන Code 1ka කලින් පාඩමේ කියලා දුන්න විදියට මේකත් save කර ගන්නකො

.386

.model flat, stdcall

option casemap :none

include C:\masm32\include\windows.inc
include C:\masm32\include\kernel32.inc
;New Addition
include C:\masm32\include\user32.inc
;
includelib C:\masm32\lib\kernel32.lib
includelib C:\masm32\lib\user32.lib

.data
HelloWorld db "Hello World!", 0
.code

start:

invoke MessageBox, NULL, addr HelloWorld, addr HelloWorld, MB_OK ;New Addition
invoke ExitProcess, 0

end start 

මෙය Assemble කිරීමෙදී
\masm32\bin\ml /c /Zd /coff hellow.asm
විධානය භාවිතා කලත් link කිරීමේදී SUBSYSTEM අගය WINDOWS ලෙස ලබා දෙනවා
\masm32\bin\Link /SUBSYSTEM:WINDOWS hellow.obj



මේ code 1කේ වෙනස් කමකට තියෙන්නේ code පේලි දෙකයි..
include C:\masm32\include\user32.inc
එකෙන් user32 කියන windows common dialog අඩංගු මොඩියුලය Code 1කට ඇතුල් කර ගැනීම සිදුකර ගනු ලබනවා
invoke StdOut, addr HelloWorld
යන්න
invoke MessageBox, NULL, addr HelloWorld, addr HelloWorld, MB_OK
මාරු කර popup Message Box මගින් "Hello World" යන්න පරිශීලකයට පෙන්නුම් කරනවා

අදට පාඩම ඉවරයි ...ඊළඟ පාඩමෙන් ටිකක් සංකීර්න මාතෘකාවක් ගැන කථා කරන්නයි ඉන්නෙ

PS :සින්ඩියෙත් දැන් මගෙ post යනවා :)

4 comments:

Anonymous said...

[code]
extern _MessageBoxA@16
global _WinMain@16
[SECTION .data]
title db "Welcome Title",0
Message db "Welcome Message" ,0
[SECTION .code]

_WinMain@16:
push ebp
mov ebp , esp
push 0
push Message
push title
push 0
call _MessageBoxA@16
mov esp , ebp
pop ebp
ret

[/code]

compile with nasm and link with the gcc or directly ld.
ex-
nasm -f elf first.asm
Then,
ld first.obj -o first.exe -l. -entry _WinMain@16

Kanishka | කණියා said...

හෑ.. මේවත් ඇසෙම්බ්ලි වලින් පුලුවන්ද? :O මරුනෙ..

Lahiru නිර්මල said...

@Anonymous:netwideAssembler isn't it thank for sharing bt I'll stick to MASM for beginners
@ කණියා:ඔව් ඔව්,හොඳ හොඳ සෙල්ලම් කරන්න පුලුවන්

sandundhammika said...

sorry about Anonymous,
This is me Sandun.
However MASM does hide things.Some masm users
don't know how to build a .lib file using a
raw dll file(not all but ask from 10 you get
at least one).

They don't no the structure of a coff file and
what is their purpose, and how the to write a
linker script to merge them.So they don't know
ABC of compile-link-debug cycle.We don't need
to know everything.But that is essential.


and we getting silent by just typing this.
>>includelib C:\masm32\lib\kernel32.lib

Yes nice tool,it saves time otherwise you need
to pass the linker -lkernel32 -LC:\masm32\lib
but if that tool hides some necessary knowledge
then it should be mentioned.

My idea is no problem of using Masm , it's a
great tool.I too will use it if needed.But readers should understand the full cycle of
compiling-linking.

Post a Comment