Pages

Monday, September 27, 2010

Assembly වලටත් පොඩ්ඩක් ඔලුව දාමු....

ඉතින් මේ C ගැන ලියන අස්සේ Assembly ගැනත් පොඩ්ඩක් ලියන්න හිතුනා. ඒ ඉතින් කාලීන අවශ්‍යතා අනුව තමා ඉතින්.... :P. එහෙනම් ඉතින් මේ Assembly ගැන.

Assembly කියන්නේ low level language එකක්. ඒත් Java වගේ high level language එකකට වඩා Assembly වල ලොකු වැදගත්කමක් තියනවා. ඒකට හේතුව නම් Assembly කියන්නේ, machine language එකේ මිනිසාට පහසුවෙන් කියවිය හැකි, තේරුම් ගත හැකි එක් ආකාරයක් වීම. යම් කිසි Computer Architecture එකක්, ඒකටම ආවේනික වූ Assembly Language එකක් භාවිතා කරනවා. ඇත්තටම Assembly වලින් කරන්නේ, Processor එකේ 1 හා 0 ආධාරයෙන් භාවිතා වෙන instructions සහ operations වෙනුවට මිනිසාට පහසුවෙන් කියවිය හැකි සංකේතයන් භාවිතා කිරීමක්. උදාහරණයක් විදියට මේ operation එක සලකන්නකෝ....

0001110010000110

මේක Assembly වලින් මේ විදියට දක්වන්න පුළුවන්.

ADD    R6,R2,R6    ; Add $R2 to $R6

ඉතින් මේ පහල පේලියෙන් පැහැදිලියිනේ අර ඉහත binary code එකෙන් වෙන දේ. අන්න ඒකටයි Assembly තියෙන්නේ. ඉතින් machine language එකෙන් code ලියන එක  අමාරු නිසා Assembly භාවිතයෙන් program එක ලියලා ඒක Machine Language එකට හරවගන්න පුලුවන්... ඔන්න හැදින්වීම අහවරයි. අවුලක් නැහැනේ.......

ඉතින් දැන් Introduction එක කියලා ඔය ටික විතරක් මදිනේ... Assembly compiler එකක් ගැනත් කියලම මේක හමාර කරමු. ඉතින් ඒ සදහා FOSS පැත්තට බහිමු. Ubuntu Linux වල තියන nasm කියන x86 Assembly Compiler එක ගැන මේකෙදි පොඩ්ඩක් විස්තර කරන්නම්. මුලින්ම ඒ compiler එක install කරගන්න ඕනිනේ. ඒකට ඉතින් විවිධ ක්‍රම භාවිතා කරන්න පුළුවන්.

1. Synaptic Package Manager එකෙන් nasm තෝරගෙන install කරගන්න පුළුවන්. 

2. Terminal එකක් open කරගෙන පහත විධානය ලබා දීමෙන් කරගන්නත් පුළුවන්.
      sudo apt-get install nasm

3. nasm package එක වෙනම download කරගෙන install කරගන්නත් පුළුවන්. ( මුල් ක්‍රම දෙක ඊට වඩා ලේසි වෙයි මට හිතෙන විදියට )

ඊටපස්සේ ගැටලුව වෙන්නේ nasm compiler එකෙන් compile කරන විදියනේ... ඒකත් මේ එක්කම කියන්නම්. අච්චාරුවක් වෙයිද දන්නෙත් නැහැ. පොඩි කාරණාවක් නිසා මෙහෙම්ම කියන්නම්.

Assembly program එක ලියා අවසානයේ ඒක save කරන විට .asm ලෙස (උදාහරණයක් විදියට helloworld.asm ලෙස) save කරගන්න. එම assembly program එක executable file එක බවට පත්කර ගැනීම පියවර දෙකකින් සිද්ධ වෙන්නේ...

පියවර 1: Object File එක සැකසීම

එය, පහත ආකාරයට terminal එක මත type කිරීමෙන් සිදුකර ගත හැකිය. 

     nasm -f elf helloworld.asm

මේ විධානයෙන් helloworld.o ලෙස object file එකක් නිර්මාණය වෙනවා.
පියවර 2 : Executable file එක සැකසීම

ඒකට පාවිච්චි වෙන්නේ කලින් පියවරේදි සකසා ගත් object file එක. ඒකෙන් executable file එක සකසා ගැනීමට පහත විධානය යොදාගන්නවා.

     ld -s -o helloworld helloworld.o

මේ විධානයෙන් executable file එක හැදෙනවා. ඊට පස්සේ මේක execute කරන්න පුළුවන් C වල විදියටම. (./helloworld). ඉතින් ඔහොමයි කතාව කෙටියෙන්.

3 comments:

  1. හොදයි.............
    io.o and io.mac කතාව නම් තේරුනේ නෑ........

    ReplyDelete
  2. @Madu

    ඒ ගැන හිතන්න එපා... ඒක වෙනම සදහන් කළේ නැතත් Ubuntu වල assembly file එකක් compile වෙලා execute වෙනවා.

    ඒක නිකං පැටලෙනවා වගේ නිසා ඒ කොටස අයින් කරල post එක edit කළා....

    Thanks for comment

    ReplyDelete
  3. nasm assembler for building the Object(binary) file :
    http://www.nasm.us/

    a Free Linker to build the Executable file from the Object file :
    http://alink.sourceforge.net/

    ReplyDelete

ඔබගේ අදහස් පවසන්න ...
මට ඒව මසුරන් වටිනවා ....