මොකක්ද මේ 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 කරලා බලන්න.
අදහසක් තියනවානම් යටින් දාන්න
nice work... (y)
ReplyDeletemeeka patta..ituru tikath dapan..Ara segments use karala liyana program ekakut dapan..
ReplyDeletegreat work.....
ReplyDeleteසුපිරි
ReplyDeleteමට assembly ඉගන ගන්න හොඳම ගුරුවරයා ඔබයි ඇත්තටම තේරුන් ගන්න පුළුවන් විදිහට බොක්කෙන්ම ලියල තියනවා ඔබේ සියළු කටයුතු සාර්ථක වේවා ඔබට පුළුවන්නම් තවදුරටත් කියල දෙන්න මේ වගේ ඔබට ස්තූතියි.
ReplyDeleteඔබතුමාගෙ විස්තර කිරීම ඉතාමත් වැදගත්. ඒක ඒ තරම්ම හිතට දැනෙනව. ඉදිරියටත් මෙවන් විස්තර බලාපොරොත්තු වෙනවා. ගොඩක් ස්තුතියි..
ReplyDelete