আমি এটি বহুবার করেছি এবং এটি চালিয়ে যেতেছি। এক্ষেত্রে যেখানে আপনার প্রাথমিক লক্ষ্যটি পাঠাচ্ছে এবং এসেম্বলার লিখছে না তা আমার মনে হয় এটি প্রযোজ্য।
আপনার নিজের বিচ্ছিন্নকরণ লিখুন। পরবর্তী বৃহত্তম বিচ্ছিন্নকরণের উদ্দেশ্যে নয়, এটি আপনার পক্ষে কঠোর। লক্ষ্যটি নির্দেশের সেটটি শিখতে হবে। আমি নতুন প্ল্যাটফর্মে এসেম্বলার শিখছি কিনা, আমি একবার জানতাম এমন প্ল্যাটফর্মের জন্য এসেম্বলারের কথা স্মরণ করছি। কোডের কয়েকটি লাইন দিয়ে উদাহরণ শুরু করুন, উদাহরণস্বরূপ নিবন্ধগুলি যুক্ত করুন এবং বাইনারি আউটপুটকে বিচ্ছিন্ন করতে এবং ইনপুট দিকে আরও বেশি জটিল নির্দেশনা যুক্ত করার মধ্যে পিং পং-আইং যুক্ত করুন:
1) নির্দিষ্ট প্রসেসরের জন্য নির্দেশ সেট শিখুন
২) কীভাবে প্রসেসরের জন্য কোডটি কীভাবে লিখতে হবে তার সুনির্দিষ্ট বিষয়গুলি শিখুন যেমন আপনি প্রতিটি নির্দেশিকায় প্রতিটি অপকোড বিটটি উইল করতে পারেন
3) আপনি নির্দেশটি সেটটি আরও ভাল শিখেন যে বেশিরভাগ প্রকৌশলী যারা সেই নির্দেশিকাটি তাদের জীবিকা নির্বাহের জন্য ব্যবহার করেন set
আপনার ক্ষেত্রে বেশ কয়েকটি সমস্যা রয়েছে, আমি সাধারণত এআরএম নির্দেশটি শুরু করার পরামর্শ দিই, অন্য যে কোনও আর্ম (বেসিকৃত x86 কম্পিউটার) এর চেয়ে আজ আরও বেশি আর্ম ভিত্তিক পণ্য প্রেরণ করা হয়েছে। তবে সম্ভবত আপনি এখন আরএম ব্যবহার করছেন এবং এআরএম জেনে স্টার্টআপ কোড বা অন্যান্য রুটিনগুলি লিখতে এটির পক্ষে পর্যাপ্ত সমাবেশকারী জানেন না যে আপনি যা করার চেষ্টা করছেন তা সাহায্য করতে পারে বা নাও পারে। এআরএমের দ্বিতীয় এবং আরও গুরুত্বপূর্ণ কারণ হ'ল নির্দেশের দৈর্ঘ্য নির্দিষ্ট আকার এবং প্রান্তিককরণ। X86 এর মতো পরিবর্তনশীল দৈর্ঘ্যের নির্দেশাবলীকে ছত্রভঙ্গ করা আপনার প্রথম প্রকল্প হিসাবে দুঃস্বপ্ন হতে পারে এবং এখানে লক্ষ্য লক্ষ্য হল গবেষণা প্রকল্প তৈরি না করে নির্দেশ সেটটি শিখানো। তৃতীয় এআরএম একটি সম্পন্ন নির্দেশিকা সেট, নিবন্ধগুলি সমানভাবে তৈরি করা হয় এবং স্বতন্ত্র বিশেষ সুনির্দিষ্টতা রাখে না।
সুতরাং আপনি কী প্রসেসর দিয়ে শুরু করতে চান তা নির্ধারণ করতে হবে। আমি প্রথমে এমএসপি 430 বা এআরএম পরামর্শ দিই, তারপরে এআরএম প্রথম বা দ্বিতীয় তারপরে x86 এর বিশৃঙ্খলা। যাই হোক না কেন প্ল্যাটফর্ম, কোনও প্ল্যাটফর্ম ব্যবহারের উপযোগী ডেটা শিট বা প্রোগ্রামারস রেফারেন্স ম্যানুয়ালগুলি বিক্রেতার কাছ থেকে মুক্ত থাকে যা নির্দেশ সেট এবং অপকডগুলির এনকোডিং (মেশিন ভাষার বিট এবং বাইট) অন্তর্ভুক্ত করে। সংকলকটি কী করে এবং কীভাবে কম্পাইলারটির সাথে লড়াই করতে হয় না সেই কোডটি কীভাবে লিখতে হয় তার উদ্দেশ্যটির জন্য কয়েকটি নির্দেশিকা সেটগুলি জেনে রাখা ভাল এবং প্রতিটি অপ্টিমাইজেশনের সাথে প্রতিটি সংকলনের সাথে প্রতিটি নির্দেশিকায় একই উচ্চ স্তরের কোডটি কীভাবে প্রয়োগ করা হয় তা ভাল good বিন্যাস. আপনি কেবলমাত্র একটি কোড সংকলক / প্ল্যাটফর্মের জন্য আরও ভাল করেছেন তবে একে অপরের জন্য আরও খারাপ করেছেন তা খুঁজে পেতে আপনার কোডটি অনুকূলকরণ করতে চান না।
ওহ চলক দৈর্ঘ্যের নির্দেশাবলী বিচ্ছিন্ন করার জন্য, কেবল শুরু থেকে শুরু করার পরিবর্তে এবং মেমরির মাধ্যমে প্রতি চার বাইট রৈখিকভাবে বিচ্ছিন্ন করার মতো আপনি এআরএম বা এমএসপি ৪৩০ এর মতো প্রতি দুটি বাইটের সাথে (এমএসপি ৪৩০ পরিবর্তনশীল দৈর্ঘ্যের নির্দেশাবলী রয়েছে তবে আপনি এখনও পেতে পারেন) আপনি যদি বাধা ভেক্টর টেবিল থেকে প্রবেশের পয়েন্টগুলিতে শুরু করেন তবে মেমরির মধ্য দিয়ে রৈখিকভাবে যাচ্ছেন)। ভেরিয়েবলের দৈর্ঘ্যের জন্য আপনি কোনও ভেক্টর টেবিলের ভিত্তিতে একটি এন্ট্রি পয়েন্ট বা প্রসেসর কীভাবে বুট করবেন এবং এক্সিকিউশন ক্রমে কোডটি অনুসরণ করবেন সে সম্পর্কে জ্ঞানের ভিত্তিতে সন্ধান করতে চান। কতগুলি বাইট ব্যবহার করা হয় তা জানতে আপনাকে প্রতিটি নির্দেশকে পুরোপুরি ডিকোড করতে হবে যদি নির্দেশটি কোনও শর্তহীন শাখা না হয় তবে সেই নির্দেশের পরে পরবর্তী বাইট ধরে নেওয়া অন্য নির্দেশনা ruction আপনাকে সমস্ত সম্ভাব্য শাখার ঠিকানাও সংরক্ষণ করতে হবে এবং আরও নির্দেশাবলীর জন্য সেগুলি বাইট অ্যাড্রেসগুলি ধরে নেওয়া উচিত। একবার আমি সফল হয়েছি বাইনারি মাধ্যমে বেশ কয়েকটি পাস। এন্ট্রি পয়েন্ট থেকে শুরু করে আমি সেই বাইটটিকে কোনও নির্দেশনার সূচনা হিসাবে চিহ্নিত করেছি তারপর শর্তহীন শাখায় আঘাত না করা পর্যন্ত মেমরির মধ্য দিয়ে রৈখিকভাবে ডিকোড করেছিলাম। সমস্ত শাখার লক্ষ্যগুলি একটি নির্দেশিকার সূচনা ঠিকানা হিসাবে ট্যাগ করা হয়েছিল। আমি কোনও নতুন শাখার টার্গেট না পাওয়া পর্যন্ত বাইনারি দিয়ে একাধিক পাস করেছি। যদি কোনও সময়ে আপনি একটি 3 বাইট নির্দেশ বলে মনে করেন তবে কোনও কারণে আপনি দ্বিতীয় বাইটটিকে কোনও নির্দেশের সূচনা হিসাবে ট্যাগ করেছেন আপনার সমস্যা আছে। কোডটি যদি উচ্চ স্তরের সংকলক দ্বারা উত্পাদিত হয় তবে কম্পাইলার যদি কিছু খারাপ করে না, তবে এটি হওয়া উচিত নয়, কোডটিতে হাতে লেখা এসেমব্লার থাকলে (যেমন একটি পুরানো তোরণ খেলা বলুন) এটি যথেষ্ট সম্ভব যে শর্তসাপেক্ষ শাখাগুলি কখনই r0 = 0 এর মতো ঘটবে না তারপরে শূন্য না থাকলে একটি লাফানো অনুসরণ করবে। চালিয়ে যেতে আপনাকে বাইনারি থেকে বাইরে এডিট করতে হতে পারে। আপনার তাত্ক্ষণিক লক্ষগুলির জন্য যা আমি ধরে নিয়েছি x86 এ হবে আমি ভাবি না যে আপনার কোনও সমস্যা হবে।
আমি জিসিসি সরঞ্জামগুলির পরামর্শ দিচ্ছি, x86 আপনার টার্গেট হলে উইন্ডোজে জিসিসি সরঞ্জামগুলি ব্যবহার করার একটি সহজ উপায় মিংডব্লু 32। মিংডব্লু 32 না হলে মিসেসগুলি বিন্টিলস এবং জিসিসি উত্সগুলি (সাধারণত বেশ সহজ) থেকে ক্রস সংকলক তৈরি করার জন্য একটি দুর্দান্ত প্ল্যাটফর্ম। মিগডব্লিউ 32 এর সাইগউইনের থেকে কিছু সুবিধা রয়েছে যেমন উল্লেখযোগ্যভাবে দ্রুত প্রোগ্রাম এবং আপনি সাইগউইন ডেল হেল এড়িয়ে চলে। জিসিসি এবং বিন্টিলগুলি আপনাকে সি বা এসেম্বলার এবং আপনার কোডটি বিচ্ছিন্ন করতে অনুমতি দেবে এবং আপনি যে কোনও একটি বা তিনটি কীভাবে করবেন তা আপনাকে দেখিয়ে আরও বেশি ওয়েব পৃষ্ঠাগুলি রয়েছে। যদি আপনি কোনও পরিবর্তনশীল দৈর্ঘ্যের নির্দেশিকা সেট দিয়ে এটি করতে যাচ্ছেন তবে আমি আপনাকে সুপারিশ করছি আপনি একটি সরঞ্জাম সেট ব্যবহার করুন যাতে একটি বিচ্ছিন্নকারী অন্তর্ভুক্ত রয়েছে। উদাহরণস্বরূপ, x86 এর জন্য একটি তৃতীয় পক্ষ বিচ্ছিন্নকারী ব্যবহার করা একটি চ্যালেঞ্জ হতে চলেছে কারণ আপনি সত্যই জানেন না যে এটি সঠিকভাবে বিচ্ছিন্ন হয়েছে কিনা। এর মধ্যে কয়েকটি অপারেটিং সিস্টেম নির্ভর করে, লক্ষ্যটি মাইনালগুলি একটি বাইনারি বিন্যাসে সংকলন করা হয় যাতে তথ্য থেকে তথ্য চিহ্নিতকরণ সম্পর্কিত তথ্য থাকে যাতে বিচ্ছিন্নকারী আরও সঠিক কাজ করতে পারে। এই প্রাথমিক লক্ষ্যটির জন্য আপনার অন্য পছন্দটি এমন একটি সরঞ্জাম রয়েছে যা আপনার পরিদর্শনের জন্য সরাসরি একত্র করার জন্য সংকলন করতে পারে তারপরে আশা করি যে এটি যখন বাইনারি বিন্যাসে সংকলন করে তখন একই নির্দেশাবলী তৈরি করে।
আপনার প্রশ্নের সংক্ষিপ্ত (ঠিক আছে কিছুটা সংক্ষিপ্ত) উত্তর। একটি নির্দেশিকা সেট শিখতে একটি বিচ্ছিন্নকারী লিখুন। আমি আরআইএসসি এবং এআরএম এর মতো শেখার সহজ কিছু দিয়ে শুরু করব would একবার আপনি যদি কোনও নির্দেশিকা নির্ধারণ করেন অন্যরা বাছাই করা আরও সহজ হয়ে যায়, প্রায়শই কয়েক ঘন্টার মধ্যে তৃতীয় নির্দেশের সেট দ্বারা সিনট্যাক্সের জন্য ডেটাশিট / রেফারেন্স ম্যানুয়াল ব্যবহার করে আপনি প্রায় সঙ্গে সঙ্গে কোড লেখা শুরু করতে পারেন। ব্যবহারযোগ্য সমস্ত প্রসেসরের একটি ডেটাশিট বা রেফারেন্স ম্যানুয়াল রয়েছে যা অপকডগুলির বিট এবং বাইটের নিচে নির্দেশগুলি বর্ণনা করে। এআরএমের মতো একটি আরআইএসসি প্রসেসর এবং পার্থক্যগুলির জন্য অনুভূতি অর্জনের জন্য x86 এর মতো একটি সিআইএসসি যথেষ্ট শিখুন, সমস্ত কিছুর জন্য রেজিস্টারে যেতে হবে বা কম বা কোনও রেজিস্ট্রির সাহায্যে সরাসরি মেমরিতে অপারেশন করতে সক্ষম হবেন এমন বিষয়গুলি। দুটি বনাম তিনটি অপারেন্ড নির্দেশাবলী, আপনি নিজের উচ্চ স্তরের কোড টিউন করার সাথে সাথে, একাধিক প্রসেসরের জন্য সংকলন এবং আউটপুট তুলনা করুন। আপনি যেটি সর্বাধিক গুরুত্বপূর্ণ শিখবেন তা হ'ল উচ্চ স্তরের কোডটি কম্পাইলারের গুণমান এবং অপ্টিমাইজেশনের পছন্দগুলি কতটা ভাল লেখা হোক না কেন প্রকৃত নির্দেশাবলীর মধ্যে বিশাল পার্থক্য রয়েছে। আমি এলএলভিএম এবং জিসিসি (বাইনুটিস সহ) প্রস্তাব দিই, উত্পাদনও করি নাদুর্দান্ত কোড, তবে সেগুলি বহু প্ল্যাটফর্ম এবং একাধিক লক্ষ্য এবং উভয়েরই অপ্টিমাইজার রয়েছে। এবং উভয়ই বিনামূল্যে এবং আপনি সহজেই বিভিন্ন টার্গেট প্রসেসরের উত্স থেকে ক্রস সংকলক তৈরি করতে পারেন।