3/12/10

Assembly පාඩම 7

 ඔන්න stack එක ගැන හොයගන්න වෙලාව තිබ්බෙ නැති අයට විනාඩි 5 stack එක ගැන උගන්නයි යන්නේ
මේකට කියන්නෙ Sam(arasinghe) teach your self stack in 5 min's කියලා :D

මොකද්ද මේ stack?
 stack එකක් කියලා කියන්නෙ ප්‍රෝග්‍රැමින් වල බහුලවම භාවිතා වන දත්ත ආකෘතියක් (Data Structure )
stack කියන්නෙ ගෝනියට නෙ ඉතින් අපි ගෝනියට පොල් දාලා තියලා ඒ ගෝනියෙන් පොල් ගෙඩියක් ගත්තොත් අපිට ලැබෙන්නෙ අපි අන්තිමටම් දාපු පොල් ගෙඩිය
(ඉන්දරේ update)
මෙහෙම උදාහරණෙකින් stack එක පහසුවෙන් විස්තර කරන්න පුලුවනි. මේසයක් උඩ එක මත එක තියපු පොත් මිටියක් ගැන හිතන්න. අපි අන්තිමට තියපු පොත නේද මුලින්ම ගන්න වෙන්නේ. මෙන්න මේක තමයි stack එකේ ක්‍රමවේදය. අපි මේකට කියනවා last in - first out හෙවත් LIFO කියලා.

ඉතින්  මේ stack තියෙන Data අපිට ලැබෙන්නෙත් Last In First Out (LIFO) ඒ කියන්නේ අන්තිමට ආපු එකා තමා ඉස්සරලාම යන්නෙ

ඉතින් අපි stack DATA A කියන එක තමා ඉස්සෙල්ලම දැම්මෙ .DATA C කියන එක දැම්මෙ අන්තිමට ඒත් අපි ඩේටා ගන්නකොට අපිට මුලින්ම හම්බ වෙන්නෙ අපි අන්තිමට දාපු DATA C

අන්තිමට ආපු එකා තමා ඉස්සරලාම යන්නෙ කට්ටියට පැහැදිලියි නෙ
 එත කොට Queue කියන Data Structure එකේ දි භාවිතා වෙන්නේ First In First Out (FIFO)

ඒ කියන්නෙ හරියට පෝලිමක් වගේ ඉස්සරලාම අපු එකා ඉස්සරලාම යනවා.

(uni වල Data Structures and Algorithms පාඩම cut කරපු හා පාඩමට ගොස් පිටුපස පේලිවල නිදි කිරමින් සිටි, LIFO වූ පුද්ගලයන් හා Data Structure  ගැන නොඇසූ සියලු දෙනාටම මෙය වැටහුනු බව සිතා Assembly පාඩම පටන් ගනිමි)
 (වැඩි දුර කියවීම සඳහා මෙතන කොටන්න මෙය JAVA ග්‍රීක් වූවන්ට සුදුසු නොවේ) 





Assembly පාඩම

Push හා Pop
Assembly වල මේ විධාන දෙක භාවිතා වෙන්නෙ  stack තියෙන දත්ත manipulate කරන්න

Push වලින් අපිට stack එකේ උඩට අගයක් දාන්න පුලුවන්
pop වලින් එකේ උඩින්ම තියෙන අගය ගන්න පුලුවන්

Invoke 
Invoke කියන්නෙ MASM වලටම ආවේනික විධානයක් මේ විධානයෙන් අපිට  Push විධානය කිහිප වරක් භාවිතා කිරීම අඩුකරගන්න පුලුවන්

උදාහරණයක් විදියට 1, 2,3,4 කියන ඉලක්කම් ටික  stack එකට දාලා loopme කියන function එක ක්‍රියාත්මක කරන්න ඕනෑ නම්
Push 1
Push 2
Push 3
Push 4
call loopme 
කියන එක අපිට පුලුවන්
invoke loopme, 1,2, 3,4
කියලා ලියන්න

මේ ඔක්කොම තියෙන code කෑල්ලක් පහලින් දාල තියෙනවා ,run කරලා බලන්නකෝ

.386
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
.data
ProgramText db "Hello World!", 0
BadText db "Error: Sum is incorrect value", 0
GoodText db "Excellent! Sum is 6", 0
Sum sdword 0
.code
start:
mov ecx, 6
xor eax, eax
_label: add eax, ecx
dec ecx
jnz _label
mov edx, 7
mul edx
push eax
pop Sum
cmp Sum, 147
jz _good
_bad: invoke StdOut, addr BadText
jmp _quit
_good: invoke StdOut, addr GoodText
_quit: invoke ExitProcess, 0
end start

එහෙනම් අනිත් පාර අපි MASM Macros ගැන කතා කරමු

3 comments:

ඉන්දරේ said...

stack එක ගැන ඔබේ අර්ථදැක්වීම ටිකක් වැරදියි කියලා හිතුනා. stack කියන්නේ ගෝණියට (sack) නෙමෙයි, (පොත් වගේ) මිටියකට නේද? ගෝණියකට පොල් ගෙඩ්යක් දාලා ආයෙ ගත්තොත් එන්නෙ අන්තිමට දාපු එකම කියලා කියන්න අමාරුයිනේ.

මෙහෙම උදාහරණෙකින් stack එක පහසුවෙන් විස්තර කරන්න පුලුවනි. මේසයක් උඩ එක මත එක තියපු පොත් මිටියක් ගැන හිතන්න. අපි අන්තිමට තියපු පොත නේද මුලින්ම ගන්න වෙන්නේ. මෙන්න මේක තමයි stack එකේ ක්‍රමවේදය. අපි මේකට කියනවා last in - first out හෙවත් LIFO කියලා.

උන්නැහේ said...

ඉන්දරේ ගෙ කතාව හරි. stack එක කියන්නෙ එක උඩ එක තියපු පොත් හරි පිඟන් හරි ගොඩක් වගේ දෙයක්. ඒක චූටි අවුලක් විතරයි.

හොඳ වැඩක්. අමතක වේගෙන යන දේවල් ආයෙ මතක් කර ගන්න හොඳ උදව්ව්වක්. දිගටම ලියාගෙන යමු.

Confiuzd ප්‍රෝග්‍රැමර් said...

@ඉන්දරේ :එල මට උදාහරනයක් ඔලුවට එන් නැතුවයි තිබ්බෙ,help එකට thanx

Post a Comment