Assembly Language සිංහලෙන් : 1 කොටස


මොකක්ද මේ Assembly Language කියන්නේ








  • Low level language එකක් 
  • කෙලින්ම Processor එකත් එක්ක වැඩ කරන විදිහේ program ලියන්න පුලුවන් 
  • Embedded system වලට පාවිච්චි කරනවා 
  • අනිත් හැම language එකකකම අන්තිමට compile කරලා ඉවර වුනාම assembly වලින් එනවා වගේ instructions හැදෙනවා. 



Learning assembly language make you a better programmer


Processor එකට තේරෙන්නේ 1 සහ 0 විතරයි.


උදා

4 ඉලක්කම Processor එකට තේරෙන්නේ 0100

එකතු කරන්න (+) කියන එක Processor එකට තේරෙන්නේ 00012

ඒත් අපිට ඔය 1 සහ 0 ට වැඩිය add,sub,mul වගේ ඒවා හොඳට මතක හිටිනවා.

add කියන එක 00012 ට convert කරන්නේ මේ assembler කියන එකෙන්.






ඇයි අපි මේක පාවිච්චි කරන්නේ



  • අපේ Program එක කෙලින්ම hardware සමඟ connect කරන්න පුලුවන් 
  • Hardware specific code, drivers ලියන්නෙ පාවිච්චි කරනවා 
  • Embedded devices වලට program ලියනකොට ඒවා පොඩි වෙන්න ඕනේ. මේකෙන් ගොඩාක් පොඩිවට program ලියන්න පුලුවන් 
  • ඉතා විශාල performance සහ speed ලබාගන්න පුලුවන්. 

අවාසි ටිකකුත් තියනවා

  • අපි ලියන program CPU එක මත රඳාපවතිනවා, එක CPU එකකට ලියන එකක් තවත් එකක වැඩ කරන්නේ නැති වෙන්න පුලුවන්. 
  • අපි ඉගෙනගෙන තියන C, Java වගේ නෙමෙයි. ගොඩක් වෙනස්. 
  • C, Java වලට වැඩිය ටිකක් අමාරුයි. ලස්සන Command, function මේකේ නෑ. 


Assembly language programming කිරීමට දැනගතයුතු දේවල්



Binary, Decimal, Hexadecimal අතර conversion
Processor එක වැඩකරන ආකාරය
Registers

System එක සරලව





Memory එකේ තියන එකක් අපිට කෙලින්ම display එකට යවන්න බෑ. ඒකට අපිට processor එක ඕනේ වෙනවා.


උදා


RAM එකේ තියනවා ඔයාගේ නම. ඒක monitor එකෙන් පෙන්නන ඕනේ. ඔයාගේ නම කෙලින්ම monitor එකට යවන්න බෑ. ඒක කරන කෙනා තමයි CPU එක. CPU එක හරහා ඔයාගේ නම display කරන්න පුලුවන්.


Registers


මේවා තමයි 8086 කියන processor එකේ තියන registers. එක එක processor වල මේවා වෙනස් වෙනවා.






මේක සම්පූර්ණයෙන් ගත්තොත් 32 bit register එකක්

අපි දැනට මේවගෙන් පාවිච්චි කරනවා උඩම තියන හතර


EAX කියන එක ගමු උදාහරණයක් විදිහට

මේක 32 bit කොටසක්

ඒකෙන් 16 bit කොටසක් නම් කරලා තියනවා AX කියලා

ඒ 16 bit කොටසත් දෙකට බෙදලා තියනවා AH (high) සහ AL (low) කියලා. ඒ එකක් 8 bit



AX - Accumulator


Arithmetic function වල Input output තියාගන්න පාවිච්චි කරනවා.


උදා: 3 + 5 කියලා instruction එකක් තියනවා. එකේ 3 කියන එක store කරගන්න EAX, AL, AX පාවිච්චි කරන්න පුලුවන්


BX – Base Register

Indexed addressing වලට පාවිච්චි කරනවා.



CX- Counter register

Loop වලට පාවිච්චි කරනවා



DX- Data register

Input, output operations වලට පාවිච්චි කරනවා






මේවාම විතරක් නෙමෙයි, තවත් ගොඩක් වැඩ වලට මේක පාව්ච්චි කරනවා.

Assembly programming කරන්න අපි පාවිච්චි කරන්නේ emu8086. මේක Emulator එකක්. මේක install කරගන්න.

Download (3 MB)


දැන් Programming පටන්ගමු


1. emu8086 run කරන්න


2. New --> empty workspace --> OK


මේ වගේ window එකක් එයි






3. අපි හදන්න යන්නෙ 4 ඉලක්කම print වෙන පොඩි program එකක්. මේකේ තියන ඒවා මම පස්සේ කියලා දෙන්නම්. මේ Code එක type කරලා අපි run කරලා බලමු.


මේක Type කරන්න.


.model small

.data

.code

main proc

mov dl,4

mov ah,2h

int 21h

endp

end main






4. emulate click කරන්න (කොල පාට ඊතලය)


5. ඊලඟට එන window එකේ run click කරන්න


6. වැරැද්දක් නැතිනම් code එක run වෙන්න ඕනේ. ඒත් තාම 4 print වෙන්නේ නෑ. කිරිබත් කැටයක් print වෙනවාද කියලා බලන්න.






දැන් බලමු program එක

mov dl,4

අපිට 4 print කරගන්න ඕනේ. ඒ නිසා 4 ඉලක්කම DL register එකට move කරනවා. (DL register එක මතක නැත්නම් ආපහු උඩ තියන විස්තරය කියවන්න)


mov x,y කියලා තිබ්බොත් මේකේ තේරුම y කියන එක x වලට දාන්න.

mov ah,2h

int 21h


මේ පේලි 2න් වෙන්නේ print කරන එක.

mov ah,2h

කලින් ඉගෙනගත් විදිහට මේකෙන් වෙන්නෙ 2h කියන එක AH register එකට move කරන එක. කලින් move කලේ 4 ඉලක්කම. ඒත් දැන් move කරන්නේ 2h කියන එක. මේ h අකුරෙන් කියන්නෙ මේක hexa decimal number එකක් කියලා. 2h කියන්නේ print කරන්න කියලා. මේක Instruction එකක්. 4 වගේ print වෙන number එකක් නෙමෙයි.

AH register එකට 2h කියන print instruction එක දැම්මහම processor එක DL register එකේ තියන value එක print කරනවා.

int 21h

Interrupt කරන එක තමයි මේකෙන් කරන්නේ. Program එක පොඩ්ඩක් නවත්තගෙන ඉන්නවා.

මොකක් හරි දෙයක් print කරන්න මේ පේලි 2ම ඕනේ.




කෙටියෙන් කිව්වොත්


1. අපිට 4 ඉලක්කම print කරගන්න ඕනේ.


2. ඒකට 4 ඉලක්කම processor එකේ තියන register එකට දාගන්න ඕනේ



mov dl,4








3. දැන් ඒ 4 print කරන්න ඕනේ. එක කරන code එක


mov ah,2h

int 21h






2h කියන instruction එක AH වලට දැම්මහම processor එක දන්නවා DL වල තියන එක print කරන්න ඕනේ කියලා.

ඒ ටික තේරුනා කියලා හිතනවා. දැන් මේකේ අතහැරපු ටික බලමු.

.model small


මේකෙන් කියන්නේ මොන වගේ memory model එකක් පාවිච්චි කරනවාද කියලා. Small කියලා දැම්මහම අපිට 16 bit word එකක් හම්බවෙනවා. ලොකු Program වලට ලොකු memory model පාවිච්චි කරන්න පුලුවන්. තව tiny, small , compact , medium , large ,huge වගේ ඒවා තියනවා



.data


මෙතන අපිට variable හදන්න පුලුවන්.


.code


මෙතන තම්යි අපි program එකේ code එක ලියන්නේ.


ඒත් තාම 4 print වුනේ නෑ. Print වෙන්නේ කිරිබත් කැටයක් ( මේ අවුරුදු කාලනේ ) පහල වගුව බලන්න







මේ Print වෙනේ ASCII වලින්. 4 print කරන්න ඕනේනම් 4 ට අදාල ASCII අගය හොයාගන්න. Decimal 52 බලන්න. ඒක පාවිච්චි කරල 4 print කරන්න පුලුවන්. කලින් Code එක වෙනස් කරන්න. 4 තිබ්බ තැනට 52 දාන්න.


.model small

.data

.code

main proc


mov dl,52

mov ah,2h

int 21h

endp

end main




Emulate --> run කරන්න. දැන් 4 print වෙන්න ඕනේ.



හැඳින්වීම ඉවරයි, තව program ටිකක් try කරමු.


එකතු කිරීම , අඩු කිරීම


මේවා ඔක්කෝම එකවාගේ. එකක් කලාම අනිත් ඒවා තේරෙනවා. කලින් code එක පොඩ්ඩක් වෙනස් කරමු.


.model small

.data

.code

main proc

mov dl,52

add dl,3

mov ah,2h

int 21h

endp

end main



මේකට වැඩියෙන් add dl,3 කියන දාලා තියනවා.


මේකෙන් වෙන්නේ

කලින් DL වලට 52 දාලා තිබ්බා.

ඒකට 3 ක් එකතු කරන්න.

එන උත්තරය DL වලටම දාන්න


DL = DL + 3


DL = 52 +3


දැන් DL වල තියෙන්න ඕනෙ 55. ASCII table එකේ 55ට අදාල character එක print වෙන්න ඕනේ. Program එක run කරලා බලන්න.

මේ වගේම අඩු කිරීම sub

Jump

මේක Loop එකක් වගේ

.model small

.data

.code

main proc

pos1:

mov dl,82

mov ah,2h

int 21h

jmp pos1

endp

end main



jmp pos1 කියන තැනට ආවම උඩ තියන pos1: කියන තැනට පනිනවා. දිගටම මේක වෙනවා. Run කරලා බලන්න. R අකුර දිගටම print වෙන්න ඕනේ.


අදට මම මෙතනින් නවතිනවා. මේක තමයි පටන්ගැන්ම. ඔයාට පුලුවන් තව ගොඩාක් දේවල් හොයාගන්න. Try and testing කරලා බලන්න.

අදහසක් තියනවානම් යටින් දාන්න

6 comments:

  1. meeka patta..ituru tikath dapan..Ara segments use karala liyana program ekakut dapan..

    ReplyDelete
  2. මට assembly ඉගන ගන්න හොඳම ගුරුවරයා ඔබයි ඇත්තටම තේරුන් ගන්න පුළුවන් විදිහට බොක්කෙන්ම ලියල තියනවා ඔබේ සියළු කටයුතු සාර්ථක වේවා ඔබට පුළුවන්නම් තවදුරටත් කියල දෙන්න මේ වගේ ඔබට ස්තූතියි.

    ReplyDelete
  3. ඔබතුමාගෙ විස්තර කිරීම ඉතාමත් වැදගත්. ඒක ඒ තරම්ම හිතට දැනෙනව. ඉදිරියටත් මෙවන් විස්තර බලාපොරොත්තු වෙනවා. ගොඩක් ස්තුතියි..

    ReplyDelete