3/5/10

Assembly පාඩම 6

 අද පාඩමෙන් කියලා දෙන්න යන්නෙ Assembly Basic Instruction Set ගැන

ඇත්තෙන්ම කිව්වොත් x86  Instruction Set එක ඉතා විශාල පරාසයක් පුරා පැතුරුනු එකක් මා මෙහිදි හදුන්වා දීමට යන්නේ ඉතමත් ම සරළ හා බහුලව භාවිතාවන Instruction කිහිපයකුයි.
(මෙහි සිට ඉදිරියට මම  පහත දැක්වෙන කෙටි ඉංග්‍රීසි යෙදුම් භාවිතයේ පහසුව සඳහා යොදාගන්නවා
  • reg -CPU Registers එකක නාමයක් (උදා:-EAX)
  • mem -memory address එකක්
  • cont -.const කොටසේ පිහිටවනු ලැබූ variables
)
ADD
ADD reg/mem, reg/memory/con

කර්මක දෙකක් එකිනෙක් එකතු කොට අගය පලමු කර්මකය තුල රදවා ගනී,පිලිතුර සදහා ඉදිරියට ගෙනයන අගයක් අතොත් එය CF හි රදවයි (මෙහිදි කර්මක දෙක සදහාම mem ලබාදිය නොහැකිය)

SUB
SUB reg/mem, reg/memory/con

කර්මක දෙකක් එකිනෙක් අඩු කොට අගය පලමු කර්මකය තුල රදවා ගනී(මෙහිදි කර්මක දෙක සදහාම mem ලබාදිය නොහැකිය)


AND
AND reg/mem, reg/memory/con

කර්මක දෙකක් bitwise logical AND බූලියන යොදා අගය පලමු කර්මකය තුල රදවා ගනී(මෙහිදි කර්මක දෙක සදහාම mem ලබාදිය නොහැකිය)

OR
OR reg/mem, reg/memory/con

කර්මක දෙකක් bitwise logical OR බූලියන යොදා අගය පලමු කර්මකය තුල රදවා ගනී(මෙහිදි කර්මක දෙක සදහාම mem ලබාදිය නොහැකිය)

XOR
XOR reg/mem, reg/memory/con

කර්මක දෙකක් bitwise logical XOR බූලියන යොදා අගය පලමු කර්මකය තුල රදවා ගනී(මෙහිදි කර්මක දෙක සදහාම mem ලබාදිය නොහැකිය)

NOT
NOT reg/mem

කර්මකය  bitwise logical NOT බූලියන යොදා අගය කර්මකය තුල රදවා ගනී


MUL
MUL reg/mem

කර්මකය EAX (Accumulator Register) හි ඇති අගය සමග ගුණ කොට එම අගය Accumulator Register තුල රදවා ගනී

DIV
DIV reg/mem

කර්මකය EAX (Accumulator Register) හි ඇති අගය සමග බෙදා එම අගය Accumulator Register තුල රදවා ගනී

INC
INC reg/mem

කර්මකයෙහි  අගයට 1 ක් එකතු කොට  එම අගය කර්මකය  තුල රදවා ගනී

DEC
DEC reg/mem

කර්මකයෙහි  අගය 1 කින් අඩු  කොට  එම අගය කර්මකය  තුල රදවා ගනී

NEG
NEG reg/mem

කර්මකයෙහි  සෘණ අගය කර්මකය  තුල රදවා ගනී


PUSH
PUSH reg/memory/con

කර්මකහි ඇති අගය stack හි ඉහලින්ම ඇතුල් කරයි.

POP
POP reg/memory

 stack හි ඉහලින්ම  ඇති අගය කර්මකයට  ඇතුල් කරයි.

MOV
MOV reg/mem, reg/memory/con

කර්මක දෙකකෙන්  දෙවන කර්මකයෙ අගය පලමු කර්මකය තුල රදවා ගනී (මෙහිදි කර්මක දෙක සදහාම mem ලබාදිය නොහැකිය)

මීට අමතරව පහත දැක්වෙන විශේෂ  Instruction කිහිපයද බහුලව භාවිතා වේ


JMP
JMP label

නම් කරන ලඳ නම්පත කරා පැනීම (jump) සිදුකරයි.මෙය සිදුවන්නෙ  CF හි අගය 0 වූ විට පමනි

CALL
CALL subroutine

තවත් procedure (ක්‍රියාවකට ) කතා කොට එහි අගය නැවත පැමිනෙන(return වන ) තුරු සිටී

සියලුම Instruction Set හා Intel Instruction Set (pdf) ලබා ගත හැක


Home Work ( ගෙදර වැඩ ) :
ඊළග පාඩමෙන් මම කියන්නෙ stack manipulate ගැන ඉතින් stack එක ගැන උගන්වන්න ගියොත් මට Assembly පාඩම කරන්න වෙන් නෑ ඒක හින්දා කටිටිය ටිකක් stack එක ගැන හොයලා බලන්න (google සර්ච් පාරක් දාන්නකෝ අඩුම තරමෙ ඒ වගෙම stack එක ගැන දන්න කෙනෙක් ඉන්නවනම් ලිපියක් ලියලා කොම්මෙන්ට් එකක් විදියට දාන්නකෝ)

7 comments:

Muthunayake said...

ඉතා රසවත් පාඩමක් කොම්පුටරේට කොච්චර ආස කලත් කැම්පස් එකේ අපිට හිතන විෂය පතය තොරගන්න බැරි වුනා අධික තරගය නිසා. දුන්න විෂය හරියට කරගෙන එලියට ආවත් මේ බොලොග් එක දැක්ක්ම මම 1996 වු අතීතයට ගියා .386 මැශිමක් අරගෙන කරපු වැඩ. මම පාඩම කලා දිගටම කරගෙන යන්න. කොහොම හරි කොම්පුටරයෙන් තැනක තියන මොටරක් , LED බල්බ වැලක් පත්තු කරන්න පුලුවන් වෙනකම් ඉගෙන ගත්තොත් සැහෙන වැඩක් කරන්න පුලුවන්

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

@ Muthunayake:බොහොම ස්තුතියි,වෘතියෙන් ජාවා ක්‍රමලේඛ භාවිතා කලා ට Assembly තමා මගේ ප්‍රියතම ක්‍රමලේඛ භාෂාව.නමුත් මෙය ඉගෙනීමට ඇති අවස්ථාව අඩුයි ..ඒ හින්දා තමයි තනියම ඉගනගත්ත දේ බෙදා ගන්න උනන්දු උනේ ..

Kanishka | කණියා said...

හම්මෝ.. දැන් නම් පාඩම තේරෙනව හොරයි වගේ..

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

@කණියා :ගුරාගෙද වැරැද්ද? :D code කෑලි දෙක තුනක් ගැහුවම හරියයි

බිඟුවා...! said...

ela...
i got 100%

Ravimal said...

හරි.. මුල ඉඳලා මේ වෙනකම් 100% ගොඩ. දිගටම කරගෙන යන්න. බෙදාහදා ගන්නවට ගොඩක් ස්තූතියි.

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

@ ALL :කොම්න්ට් එකක් වත් දාන්න වෙලාවක් තිබ්බෙ නෑ,තැන්කූ වේවා කට්ටියටම :D

Post a Comment