Arithmetic এবং Logical Instructions হল Assembly Language-এ ব্যবহৃত গুরুত্বপূর্ণ নির্দেশনা যা সংখ্যা এবং তথ্যের উপর বিভিন্ন গাণিতিক এবং লজিক্যাল অপারেশন সম্পন্ন করে। এই নির্দেশনাগুলি CPU-কে ডেটা প্রক্রিয়া করতে সহায়তা করে এবং প্রোগ্রামের কার্যক্ষমতা উন্নত করে।
Arithmetic Instructions:
Arithmetic Instructions মূলত গাণিতিক অপারেশন সম্পন্ন করে, যেমন যোগ, বিয়োগ, গুণ, এবং ভাগ। কিছু সাধারণ Arithmetic Instructions নিচে উল্লেখ করা হলো:
উদাহরণ:
ADD AX, BX ; AX এবং BX এর যোগফল AX-এ সংরক্ষণ করা
উদাহরণ:
SUB AX, 5 ; AX থেকে ৫ বিয়োগ করে AX-এ ফলাফল সংরক্ষণ করা
উদাহরণ:
MOV AL, 10 ; AL রেজিস্টারে ১০ সংরক্ষণ
MOV BL, 5 ; BL রেজিস্টারে ৫ সংরক্ষণ
MUL BL ; AL কে BL এর সাথে গুণ করা
উদাহরণ:
MOV AX, 20 ; AX রেজিস্টারে ২০ সংরক্ষণ
MOV BL, 4 ; BL রেজিস্টারে ৪ সংরক্ষণ
DIV BL ; AX কে BL দ্বারা ভাগ করা
উদাহরণ:
INC AX ; AX রেজিস্টারের মান ১ বাড়ানো
উদাহরণ:
DEC BX ; BX রেজিস্টারের মান ১ কমানো
Logical Instructions:
Logical Instructions হল এমন নির্দেশনা যা তথ্যের উপর লজিক্যাল অপারেশন সম্পন্ন করে, যেমন AND, OR, NOT ইত্যাদি। কিছু সাধারণ Logical Instructions নিচে উল্লেখ করা হলো:
উদাহরণ:
AND AX, BX ; AX এবং BX এর মধ্যে AND অপারেশন করা
উদাহরণ:
OR AX, 1 ; AX এবং ১ এর মধ্যে OR অপারেশন করা
উদাহরণ:
NOT AX ; AX রেজিস্টারের মানের NOT অপারেশন করা
উদাহরণ:
XOR AX, BX ; AX এবং BX এর মধ্যে XOR অপারেশন করা
উদাহরণ:
SHL AX, 1 ; AX রেজিস্টারের মানকে এক বিট বাম দিকে স্থানান্তর করা
উদাহরণ:
SHR BX, 1 ; BX রেজিস্টারের মানকে এক বিট ডান দিকে স্থানান্তর করা
সারসংক্ষেপ
Arithmetic এবং Logical Instructions Assembly Language প্রোগ্রামিংয়ে গুরুত্বপূর্ণ ভূমিকা পালন করে। Arithmetic Instructions গাণিতিক অপারেশন সম্পন্ন করে, যেমন যোগ, বিয়োগ, গুণ, এবং ভাগ, যখন Logical Instructions তথ্যের উপর লজিক্যাল অপারেশন সম্পন্ন করে, যেমন AND, OR, NOT, এবং XOR। এই নির্দেশনাগুলি CPU-র কার্যপ্রণালী এবং ডেটা প্রক্রিয়াকরণের জন্য অপরিহার্য।
ADD, SUB, INC, এবং DEC হলো Assembly Language-এর সাধারণ অ্যারিথমেটিক নির্দেশনা। এগুলি CPU-তে বিভিন্ন গণনা এবং ডেটা প্রসেসিংয়ের কাজ সম্পাদন করতে ব্যবহৃত হয়। নিচে এগুলির গঠন এবং ব্যবহার উদাহরণসহ আলোচনা করা হলো:
ADD Instruction:
গঠন:
ADD destination, source
উদাহরণ:
ADD AX, BX ; AX এবং BX এর মান যোগ করে AX-এ ফলাফল সংরক্ষণ
ADD AX, 5 ; AX-এর মানের সাথে ৫ যোগ করে ফলাফল AX-এ সংরক্ষণ
SUB Instruction:
গঠন:
SUB destination, source
উদাহরণ:
SUB AX, BX ; AX থেকে BX এর মান বিয়োগ করে AX-এ ফলাফল সংরক্ষণ
SUB CX, 10 ; CX-এর মান থেকে ১০ বিয়োগ করে ফলাফল CX-এ সংরক্ষণ
INC Instruction:
গঠন:
INC operand
উদাহরণ:
INC AX ; AX রেজিস্টারের মান এক দ্বারা বৃদ্ধি করা
INC [1234h] ; 1234h ঠিকানায় সংরক্ষিত ডেটার মান এক দ্বারা বৃদ্ধি করা
DEC Instruction:
গঠন:
DEC operand
উদাহরণ:
DEC BX ; BX রেজিস্টারের মান এক দ্বারা কমানো
DEC [5678h] ; 5678h ঠিকানায় সংরক্ষিত ডেটার মান এক দ্বারা কমানো
সংক্ষিপ্ত প্রোগ্রাম:
MOV AX, 10 ; AX-এ ১০ লোড করা
ADD AX, 5 ; AX-এ ৫ যোগ করা, ফলাফল AX = 15
SUB AX, 3 ; AX থেকে ৩ বিয়োগ করা, ফলাফল AX = 12
INC AX ; AX-এর মান এক দ্বারা বৃদ্ধি, ফলাফল AX = 13
DEC AX ; AX-এর মান এক দ্বারা কমানো, ফলাফল AX = 12
সারসংক্ষেপ
ADD, SUB, INC, এবং DEC নির্দেশনাগুলি Assembly Language প্রোগ্রামিংয়ে সাধারণ অ্যারিথমেটিক অপারেশনের জন্য ব্যবহৃত হয়। ADD এবং SUB যথাক্রমে যোগ এবং বিয়োগের কাজ সম্পাদন করে, INC এবং DEC একটি মান এক দ্বারা বাড়ানো বা কমানোর কাজ করে। এই নির্দেশনাগুলি ডেটা প্রসেসিং এবং লজিকাল অপারেশন সহজ করে।
Assembly Language-এ MUL, IMUL, DIV, এবং IDIV নির্দেশনাগুলি গুণ এবং ভাগ করার জন্য ব্যবহৃত হয়। এগুলি প্রোগ্রামে অ্যারিথমেটিক অপারেশনের জন্য গুরুত্বপূর্ণ ভূমিকা পালন করে।
MUL Instruction:
MUL BX
নির্দেশনা AX রেজিস্টারের মানকে BX রেজিস্টারের সাথে গুণ করে এবং ফলাফল AX বা DX:AX জোড়ায় সংরক্ষণ করে।উদাহরণ:
MOV AX, 5 ; AX রেজিস্টারে ৫ লোড
MOV BX, 3 ; BX রেজিস্টারে ৩ লোড
MUL BX ; AX * BX → ফলাফল AX-এ সংরক্ষণ (উচ্চ গুণের ক্ষেত্রে DX:AX)
IMUL Instruction:
উদাহরণ:
MOV AX, -5 ; AX রেজিস্টারে -৫ লোড
MOV BX, 3 ; BX রেজিস্টারে ৩ লোড
IMUL BX ; AX * BX → ফলাফল AX-এ সংরক্ষণ (উচ্চ গুণের ক্ষেত্রে DX:AX)
; দুই অপারেন্ড IMUL উদাহরণ
IMUL CX, BX, 4 ; BX * 4 → ফলাফল CX-এ সংরক্ষণ
DIV Instruction:
উদাহরণ:
MOV AX, 10 ; AX রেজিস্টারে ১০ লোড
MOV BL, 2 ; BL রেজিস্টারে ২ লোড
DIV BL ; AX / BL → ভাগফল AL-এ, অবশিষ্টাংশ AH-এ সংরক্ষণ
IDIV Instruction:
উদাহরণ:
MOV AX, -20 ; AX রেজিস্টারে -২০ লোড
MOV BL, 5 ; BL রেজিস্টারে ৫ লোড
IDIV BL ; AX / BL → ভাগফল AL-এ, অবশিষ্টাংশ AH-এ সংরক্ষণ
সারসংক্ষেপ
MUL, IMUL, DIV, এবং IDIV নির্দেশনাগুলি Assembly Language-এ গুণ এবং ভাগ করার জন্য ব্যবহৃত হয়। MUL এবং DIV unsigned অপারেশনের জন্য এবং IMUL এবং IDIV signed অপারেশনের জন্য ব্যবহৃত হয়। এই নির্দেশনাগুলি CPU-এর মাধ্যমে ডেটা প্রক্রিয়াকরণ এবং গাণিতিক কার্য সম্পাদনে গুরুত্বপূর্ণ ভূমিকা পালন করে।
Assembly Language-এ Logical Operations বিভিন্ন বিট-লেভেল অপারেশন সম্পাদন করতে ব্যবহৃত হয়। এগুলি ডেটা প্রসেসিং এবং কন্ডিশন চেক করার জন্য গুরুত্বপূর্ণ ভূমিকা পালন করে। নিচে AND, OR, XOR, NOT, SHL, এবং SHR Instruction-এর বিস্তারিত ব্যাখ্যা এবং উদাহরণ দেওয়া হলো:
AND Instruction:
1
থাকলে সেটিকে 1
সেট করে, অন্যথায় 0
সেট করে।উদাহরণ:
MOV AL, 10101010b ; AL = 10101010
AND AL, 00001111b ; AL = 00001010 (নিচের ৪টি বিট রেখে বাকি ক্লিয়ার)
OR Instruction:
1
থাকলে সেটিকে 1
সেট করে।উদাহরণ:
MOV AL, 10101010b ; AL = 10101010
OR AL, 00001111b ; AL = 10101111 (নিচের ৪টি বিট `1` করা)
XOR Instruction:
1
এবং একই হলে 0
সেট করে।উদাহরণ:
MOV AL, 10101010b ; AL = 10101010
XOR AL, 11111111b ; AL = 01010101 (বিট টগল করা)
NOT Instruction:
উদাহরণ:
MOV AL, 10101010b ; AL = 10101010
NOT AL ; AL = 01010101 (বিট ইনভার্ট করা)
SHL (Shift Left) Instruction:
উদাহরণ:
MOV AL, 00001111b ; AL = 00001111
SHL AL, 1 ; AL = 00011110 (১ বিট বামে স্থানান্তরিত করা, মান দ্বিগুণ)
SHR (Shift Right) Instruction:
উদাহরণ:
MOV AL, 00001111b ; AL = 00001111
SHR AL, 1 ; AL = 00000111 (১ বিট ডানে স্থানান্তরিত করা, মান অর্ধেক)
সারসংক্ষেপ
AND, OR, XOR, NOT, SHL, এবং SHR Instruction-এর মাধ্যমে Assembly Language প্রোগ্রামিংয়ে বিট-লেভেল ডেটা প্রসেসিং করা সম্ভব হয়। AND এবং OR নির্দেশনা বিট মাস্কিং ও বিট সেট করার জন্য, XOR বিট টগল করার জন্য, NOT বিট ইনভার্ট করার জন্য, এবং SHL ও SHR ডেটা স্থানান্তর ও গাণিতিক অপারেশনের জন্য ব্যবহৃত হয়। এই নির্দেশনাগুলি কার্যকরভাবে ব্যবহার করা হলে প্রোগ্রামিংয়ে লজিক তৈরি এবং ডেটা প্রক্রিয়াকরণ সহজ হয়।
Arithmetic Overflow এবং Carry Flag Assembly Language প্রোগ্রামিংয়ে দুটি গুরুত্বপূর্ণ ধারণা, যা CPU-এর অপারেশনগুলির ফলাফল সম্পর্কে বিস্তারিত তথ্য প্রদান করে। Overflow এবং Carry ফ্ল্যাগগুলি সাধারণত অ্যারিথমেটিক অপারেশনগুলির সময় ব্যবহৃত হয় এবং বিভিন্ন ধরণের গাণিতিক ফলাফল বুঝতে সাহায্য করে।
উদাহরণ:
MOV AL, 127 ; AL রেজিস্টারে 127 লোড করা
ADD AL, 1 ; AL-এ 1 যোগ করা, ফলে Overflow ঘটে (AL এর মান -128)
; এখানে Overflow Flag সেট হবে
নোট: Overflow সাধারণত Signed সংখ্যার ক্ষেত্রে ব্যবহৃত হয়, যেখানে Signed বাইনারি যোগ বা বিয়োগের সময় এটি ঘটে।
উদাহরণ:
MOV AL, 255 ; AL রেজিস্টারে 255 লোড করা
ADD AL, 1 ; AL-এ 1 যোগ করা, ফলে Carry Flag সেট হবে (AL এর মান 0)
; এখানে Carry Flag সেট হবে
নোট: Carry Flag সাধারণত Unsigned সংখ্যার ক্ষেত্রে ব্যবহৃত হয়, যেখানে Unsigned বাইনারি যোগ বা বিয়োগের সময় এটি গুরুত্বপূর্ণ।
ফ্ল্যাগ | ব্যবহার | যখন সেট হয় |
---|---|---|
Overflow Flag (OF) | Signed সংখ্যার অপারেশনে | যখন ফলাফল রেজিস্টারের সীমা ছাড়িয়ে যায় এবং Signed সংখ্যা হিসেবে ভুল ফলাফল দেয়। |
Carry Flag (CF) | Unsigned সংখ্যার অপারেশনে | যখন অপারেশনের ফলে অতিরিক্ত ক্যারি বা ঋণ (borrow) তৈরি হয়। |
ADC (Add with Carry) এবং SBB (Subtract with Borrow) নির্দেশনা ব্যবহার করে Carry Flag-এর উপর ভিত্তি করে অ্যারিথমেটিক অপারেশন করা যায়।
MOV AL, 100
ADD AL, 200 ; AL-এ 200 যোগ করা, ফলে CF সেট হবে কারণ ফলাফল 256
ADC BL, 0 ; BL-এ 0 যোগ করা, এবং CF যদি সেট থাকে তবে অতিরিক্ত 1 যোগ করা হবে
Overflow Flag চেক করার জন্য JO
(Jump if Overflow) এবং JNO
(Jump if No Overflow) নির্দেশনা ব্যবহার করা হয়।
ADD AL, BL ; AL এবং BL যোগ করা
JO overflow_label ; যদি Overflow ঘটে, তাহলে overflow_label এ জাম্প করা হবে
সারসংক্ষেপ
Arithmetic Overflow এবং Carry Flag Management Assembly Language প্রোগ্রামিংয়ে অপারেশনের ফলাফল সঠিকভাবে বুঝতে এবং পরবর্তী লজিকাল পদক্ষেপ গ্রহণ করতে গুরুত্বপূর্ণ ভূমিকা পালন করে। Overflow Flag Signed অপারেশনের সময় ব্যবহৃত হয় যখন ফলাফল রেজিস্টারের সীমা ছাড়িয়ে যায়, আর Carry Flag Unsigned অপারেশনে অতিরিক্ত ক্যারি নির্দেশ করে। এগুলি ব্যবহার করে CPU-এর অপারেশনগুলির ফলাফল যাচাই ও নিয়ন্ত্রণ করা যায়।
common.read_more