Assembly Language প্রোগ্রামিংয়ে Code Segment, Data Segment, এবং Stack Segment হলো প্রোগ্রামের মূল অংশ যা প্রোগ্রামের কার্যপ্রণালী ও ডেটা ব্যবস্থাপনা নিশ্চিত করে। এগুলি CPU-র কার্যপ্রবাহ নিয়ন্ত্রণ, ডেটা সংরক্ষণ এবং রিসোর্স ব্যবস্থাপনায় গুরুত্বপূর্ণ ভূমিকা পালন করে।
Code Segment (CS):
- সংজ্ঞা: Code Segment হলো প্রোগ্রামের সেই অংশ যেখানে সমস্ত কোড বা নির্দেশনাগুলি সংরক্ষিত থাকে যা CPU কার্যকর করে।
- ব্যবহার:
- সমস্ত নির্দেশনা Code Segment-এ থাকে এবং CPU এখান থেকে একের পর এক নির্দেশনা কার্যকর করে।
CSরেজিস্টার Code Segment-এর বেস ঠিকানা নির্দেশ করে এবংEIPরেজিস্টার বর্তমান কার্যকর নির্দেশনার ঠিকানা নির্দেশ করে।
উদাহরণ:
section .text global _start _start: MOV AX, 5 ; একটি নির্দেশনা যা Code Segment-এ সংরক্ষিত ADD AX, 3 ; অন্য একটি নির্দেশনা যা কার্যকর করা হবে
বৈশিষ্ট্য:
- Code Segment অপরিবর্তনীয় থাকে, অর্থাৎ সাধারণত এটি পড়া হয় কিন্তু লেখা হয় না।
- প্রোগ্রামের কার্যপ্রণালীর সকল নির্দেশনা এই অংশে থাকে।
Data Segment (DS):
- সংজ্ঞা: Data Segment হলো প্রোগ্রামের সেই অংশ যেখানে সমস্ত ভেরিয়েবল, কনস্ট্যান্ট এবং ডেটা থাকে যা প্রোগ্রাম চলাকালীন ব্যবহৃত হয়।
- ব্যবহার:
- প্রোগ্রামের ডেটা এখানে সংরক্ষণ করা হয় এবং
DSরেজিস্টার Data Segment-এর বেস ঠিকানা নির্দেশ করে।
- প্রোগ্রামের ডেটা এখানে সংরক্ষণ করা হয় এবং
উদাহরণ:
section .data num1 dw 10 ; Data Segment-এ ১০ মান সংরক্ষণ করা num2 db 'A' ; Data Segment-এ ASCII অক্ষর 'A' সংরক্ষণ করা
বৈশিষ্ট্য:
- Data Segment পড়া ও লেখা উভয়ের জন্য ব্যবহৃত হয়।
- এতে প্রোগ্রামের স্ট্যাটিক ডেটা থাকে যা প্রোগ্রামের কার্যকালীন সময়ে পরিবর্তন হতে পারে।
Stack Segment (SS):
- সংজ্ঞা: Stack Segment হলো প্রোগ্রামের সেই অংশ যেখানে স্ট্যাক ডেটা সংরক্ষিত হয়। এটি সাধারণত ফাংশন কল, রিটার্ন ঠিকানা, এবং লোকাল ভেরিয়েবল সংরক্ষণের জন্য ব্যবহৃত হয়।
- ব্যবহার:
- স্ট্যাক অপারেশনের জন্য
SSরেজিস্টার Stack Segment-এর বেস ঠিকানা নির্দেশ করে এবংESP(Stack Pointer) রেজিস্টার স্ট্যাকের টপ নির্দেশ করে। - PUSH এবং POP নির্দেশনাগুলি Stack Segment ব্যবহার করে।
- স্ট্যাক অপারেশনের জন্য
উদাহরণ:
PUSH AX ; AX এর মান Stack Segment-এ সংরক্ষণ করা POP BX ; Stack Segment থেকে মান পুনরুদ্ধার করে BX-এ লোড করা
বৈশিষ্ট্য:
- LIFO (Last-In-First-Out) ডেটা স্ট্রাকচার হিসেবে কাজ করে।
- ফাংশনের রিটার্ন ঠিকানা এবং লোকাল ভেরিয়েবল সংরক্ষণ করতে ব্যবহৃত হয়।
Code, Data, এবং Stack Segment এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Code Segment (CS) | Data Segment (DS) | Stack Segment (SS) |
|---|---|---|---|
| ব্যবহার | প্রোগ্রামের নির্দেশনা সংরক্ষণ করে। | প্রোগ্রামের ডেটা এবং ভেরিয়েবল সংরক্ষণ করে। | ফাংশন কল, রিটার্ন ঠিকানা, এবং স্ট্যাক ডেটা সংরক্ষণ করে। |
| রেজিস্টার | CS রেজিস্টার বেস ঠিকানা নির্দেশ করে। | DS রেজিস্টার বেস ঠিকানা নির্দেশ করে। | SS রেজিস্টার বেস ঠিকানা নির্দেশ করে এবং ESP স্ট্যাকের টপ নির্দেশ করে। |
| পড়া/লেখা | সাধারণত শুধুমাত্র পড়া হয়। | পড়া ও লেখা উভয়ই করা যায়। | পড়া ও লেখা উভয়ই করা যায়। |
| ডেটা ধরনের উদাহরণ | নির্দেশনাসমূহ, যেমন MOV, ADD। | স্ট্যাটিক ডেটা, যেমন ভেরিয়েবল। | স্ট্যাক ডেটা, যেমন রিটার্ন ঠিকানা এবং লোকাল ভেরিয়েবল। |
সারসংক্ষেপ
Code Segment প্রোগ্রামের নির্দেশনা সংরক্ষণ করে এবং CPU এখান থেকে নির্দেশনা কার্যকর করে। Data Segment প্রোগ্রামের ডেটা এবং ভেরিয়েবল সংরক্ষণ করে যা পড়া ও লেখা হতে পারে। Stack Segment প্রোগ্রামের স্ট্যাক ব্যবস্থাপনা নিশ্চিত করে, যেখানে ফাংশনের রিটার্ন ঠিকানা এবং লোকাল ডেটা সংরক্ষণ করা হয়। এগুলি একসাথে প্রোগ্রামের কার্যপ্রবাহ, ডেটা ব্যবস্থাপনা, এবং ফাংশন হ্যান্ডলিংয়ের জন্য গুরুত্বপূর্ণ ভূমিকা পালন করে।
Read more