অধিবেশনগুলিতে প্রোগ্রামগুলি কেন প্রায়ই লেখা হয় না? [বন্ধ]


216

এটি মূলধারার মতামত বলে মনে হয় যে এসেম্বলি প্রোগ্রামিং সি'র মতো উচ্চ স্তরের ভাষার চেয়ে বেশি সময় নেয় এবং প্রোগ্রাম করা আরও বেশি কঠিন বলে মনে হয় তাই এই কারণে উচ্চতর স্তরের ভাষায় লেখাই ভাল বলে মনে হয় বা ধরে নেওয়া যায় বলে মনে হয় এবং আরও ভাল বহনযোগ্যতার কারণে।

সম্প্রতি আমি x86 সমাবেশে লিখেছি এবং এটি আমার উপর ছড়িয়ে পড়েছে যে সম্ভবত কারণগুলি বহনযোগ্যতা ব্যতীত সম্ভবত এই কারণগুলি সত্য নয়। সম্ভবত এটি পরিচিতির বিষয় এবং কীভাবে সমাবেশকে ভালভাবে লিখতে হবে তা জানার বিষয়। আমি আরও লক্ষ্য করেছি যে সমাবেশে প্রোগ্রামিং এইচএলএল প্রোগ্রামিংয়ের চেয়ে বেশ আলাদা। সম্ভবত একটি ভাল এবং অভিজ্ঞ সমাবেশ প্রোগ্রামার সি তে অভিজ্ঞ সি প্রোগ্রামার লেখার মতো প্রোগ্রামগুলি ঠিক তত সহজে এবং তত দ্রুত লিখতে পারে

সম্ভবত এটি কারণ এইচএলএলগুলির চেয়ে এসেম্বলিং প্রোগ্রামিংটি একেবারেই আলাদা, এবং এর জন্য বিভিন্ন চিন্তাভাবনা, পদ্ধতি এবং উপায়গুলির প্রয়োজন হয়, যা এটি অপরিচিতদের জন্য প্রোগ্রাম করা খুব বিশ্রী বলে মনে হয় এবং তাই প্রোগ্রামগুলি লেখার জন্য এটির খারাপ নাম দেয়।

যদি বহনযোগ্যতা কোনও সমস্যা না হয়, তবে সত্যই, সিএএস এর NASM এর মতো ভাল এসেম্বলারের উপর কী থাকবে?

সম্পাদনা করুন: কেবল উল্লেখ করতে। আপনি যখন সমাবেশে লিখছেন, আপনাকে কেবল নির্দেশের কোডগুলিতে লিখতে হবে না। প্রোগ্রামগুলিকে আরও মডুলার, আরও রক্ষণাবেক্ষণযোগ্য এবং পড়ার সহজ করার জন্য আপনি বিভিন্ন বিমূর্ততা তৈরি করতে ম্যাক্রো এবং পদ্ধতিগুলি এবং আপনার নিজস্ব কনভেনশন ব্যবহার করতে পারেন। এখানেই ভালো এসেম্বলি লেখার সাথে পরিচিত হওয়ার বিষয়টি আসে।


71
লিখবেন? কোড পড়ার কী হবে? আপনি (এবং অন্যদের) অনেক অনেক বেশি কোড পড়তে হবে আপনি লিখতে
আমরা

81
আমার প্রোগ্রামটি নতুন প্ল্যাটফর্মে চালিত হবার কারণে কেন আমাকে একটি নতুন ভাষা শিখতে হবে? কয়টি রেজিস্ট্রি রয়েছে এবং আপনি এটি দিয়ে কী করতে পারেন সে সম্পর্কে সিপিইউসের ধারণার জন্য কেন আমার প্রোগ্রামগুলি তৈরি করতে হবে? আমি কম্পিউটার বিড না করে সমস্যাগুলি সমাধান করার চেষ্টা করি।
জোছিম সৌর

8
সম্পাদনার সংক্ষিপ্তসার: একটি সি সংকলক ব্যবহার করতে পারে।
মেইনসবার

4
@ সিমন তখন আমার বছরগুলি ভুল হতে পারে তবে আমি অবাক হয়েছি যে আমরা ২০১০ সালে এএসএম বনাম "সি এর মতো একটি উচ্চ স্তরের ভাষা" নিয়ে বিতর্ক করছি। বিশেষত সেই অংশটি যেখানে সি একটি উচ্চ স্তরের ভাষার উদাহরণ
ম্যাট বি

11
@ চেঞ্জলগ: আপনি প্রোগ্রামিং.আরডিট.কম.কে বানান করেন না এমন।
BoltClock

উত্তর:


331

এ এস এম হয়েছে দরিদ্র স্পষ্টতা এবং সত্যিই রক্ষণীয় নয় উচ্চতর স্তরের ভাষা তুলনায়।

এছাড়াও, অন্যান্য জনপ্রিয় ভাষার চেয়ে সি এর মতো অনেক কম এএসএম বিকাশকারী রয়েছে C.

তদুপরি, আপনি যদি উচ্চ স্তরের ভাষা ব্যবহার করেন এবং নতুন এএসএম নির্দেশাবলী উপলভ্য হয়ে থাকে (উদাহরণস্বরূপ এসএসই), আপনার কেবলমাত্র আপনার সংকলকটি আপডেট করতে হবে এবং আপনার পুরানো কোডটি সহজেই নতুন নির্দেশাবলীর ব্যবহার করতে পারে।

পরবর্তী সিপিইউতে দ্বিগুণ রেজিস্টার থাকলে কী হবে?

এই প্রশ্নের কথোপকথনটি হবে: সংকলকগণ কী কার্যকারিতা সরবরাহ করে?

আমি সন্দেহ করতে পারি আপনার এএসএমকে ক্যানের চেয়ে আরও ভাল করতে পারেন / করতে চান / gcc -O3করতে পারেন।


10
জিসিসি অপ্টিমাইজেশনে এতটা দুর্দান্ত নয়, গড়পড় মানুষের চেয়ে অনেক ভাল, তবে এমন অনেক জায়গা রয়েছে যেখানে অপ্টিমাইজাররা ভাল কাজ করতে ব্যর্থ হয়। অন্যথায় যদিও আপনার সাথে একমত।
old_timer

4
@ বাসভূমি এটি খুব বিরল উদাহরণস্বরূপ যে সিসিপি (বা অন্য অনেক সংকলক) সঠিকভাবে সংকলিত সিটিকে অনুকূল করতে ব্যর্থ হয়েছে those সেই উদাহরণগুলিতে, আপনি সবসময় এএসএম-এ সীমিত সংখ্যক পদ্ধতি লিখতে পারেন এবং ঠিক সেই পদ্ধতিগুলি নির্মাণের সময় লিঙ্ক করতে পারেন।
করটিজোন

@ বেন এস: আমি প্রাথমিকভাবে "অনেক" না দিয়ে "অনেক" তে সম্পাদনা করেছি কারণ "অনেকগুলি" শুধুমাত্র একক বস্তুগুলির জন্য ব্যবহৃত হয়। যেহেতু "অনেক" এর বস্তুটি বহুবচন (বিকাশকারী) তাই "অনেকগুলি" সঠিক বিকল্প। তবে "উত্তর" যদি আপনি চান তবে আমি আপনার উত্তরটি আবার সম্পাদনা করব না।
বিলি ওনিল

1
এমন অনেকগুলি ক্ষেত্রে রয়েছে যেখানে সংকলকটি ভালভাবে অনুকূলিত করতে পারে না, তবে প্রায়শই এমন বিকাশকারী যা অপ্টিমাইজারের সীমাবদ্ধতা সম্পর্কে অবগত থাকে তার সমাবেশটি অবলম্বন না করেই তার সি কোডটি অনুকূল করতে পারে।
কিওয়ার্টি

1
আমার দিনের চাকরিতে FWIW আমি আমাদের পণ্যটি gcc -g -O0 দিয়ে সংকলন করি, কারণ একটি লাইভ সিস্টেমে এটির সাথে জিডিবি সংযুক্ত করতে সক্ষম হওয়া এবং অস্তিত্বের অপরিবর্তনীয় ভেরিয়েবলগুলির কারণে পাগল হতে না পারার জন্য এটি আরও অনেক বেশি নরক সংস্থাটি তার চেয়ে প্রতিদিন আরও 4 বিলিয়ন সিপিইউ চক্রকে নিষ্ক্রিয় রাখবে (মোট 3 ট্রিলিয়ন এর মধ্যে)। পূর্ণসংখ্যার ক্র্যাঞ্চিং কেবল খুব প্রায়ই বাধা নয়।
বার্ড জেন্ড্রিসেক

1930

হ্যালো, আমি একটি সংকলক।

আপনি এই বাক্যটি পড়ার সময় আমি কয়েক হাজার লাইনের কোড স্ক্যান করেছি। আপনার বহু বছর ধরে ব্যয় হবে এমন একাডেমিক গবেষণার উপর ভিত্তি করে শত শত বিভিন্ন অপ্টিমাইজেশান কৌশলগুলি ব্যবহার করে আপনার একক লাইনকে অনুকূলকরণের লক্ষ লক্ষ সম্ভাবনার মধ্য দিয়ে আমি ব্রাউজ করেছি। আমি কোনও বিব্রতবোধ করব না, এমনকি সামান্য আইকও বোধ করব না, যখন আমি এটির দ্রুত করার জন্য তিন লাইনের লুপটিকে কয়েক হাজার নির্দেশে রূপান্তর করি। অনেক দীর্ঘতর অপ্টিমাইজেশনে যেতে বা চূড়ান্ত কৌশলগুলি করতে আমার কোনও লজ্জা নেই। এবং আপনি যদি আমাকে না চান, সম্ভবত এক-দু'দিনের জন্য, আমি আচরণ করব এবং আপনার পছন্দ মতো করব। আপনার কোডের একটি একক লাইনও পরিবর্তন না করেই আপনি যখনই চাই আমি যে পদ্ধতিগুলি ব্যবহার করছি তা রূপান্তর করতে পারি। এমনকি আপনার কোডটি সমাবেশে কীভাবে দেখবে তা আমি আপনাকে দেখাতে পারি, আপনি চাইলে বিভিন্ন প্রসেসরের আর্কিটেকচার এবং বিভিন্ন অপারেটিং সিস্টেম এবং বিভিন্ন সমাবেশ সম্মেলনে। হ্যাঁ, সমস্ত সেকেন্ডে। কারণ, আপনি জানেন, আমি পারি; এবং আপনি জানেন, আপনি পারবেন না।

পিএস ওহ, আপনি লিখেছেন যে অর্ধেক কোড আপনি ব্যবহার করছেন না। আমি আপনার পক্ষে একটি অনুগ্রহ করে তা ফেলে দিয়েছি


99

আমি 6502, জেড 80, 6809 এবং 8086 চিপের জন্য এসেম্বলারের শেডলোড লিখেছি। আমি যে প্ল্যাটফর্মগুলিতে সম্বোধন করছিলাম সি সংকলকগুলি উপলব্ধ হওয়ার সাথে সাথে আমি তা করা বন্ধ করে দিয়েছিলাম এবং ততক্ষনে কমপক্ষে 10x আরও উত্পাদনশীল হয়ে উঠছি। বেশিরভাগ ভাল প্রোগ্রামাররা যুক্তিযুক্ত কারণে তাদের ব্যবহৃত সরঞ্জামগুলি ব্যবহার করে।


72

আমি সমাবেশের ভাষায় প্রোগ্রামিং পছন্দ করি তবে উচ্চ স্তরের ল্যাঙ্গুজের মতো একই কাজ করতে আরও কোড লাগে এবং কোড এবং বাগগুলির লাইনগুলির মধ্যে প্রত্যক্ষ সম্পর্ক রয়েছে। (এটি বহু দশক আগে পৌরাণিক ম্যান-মাস- এ ব্যাখ্যা করা হয়েছিল ।)

সিটিকে 'হাই লেভেল অ্যাসেম্বলি' হিসাবে ভাবা সম্ভব, তবে এর থেকে কয়েক ধাপ উপরে যান এবং আপনি অন্য এক বিশ্বে। সি # তে আপনি এটি লেখার বিষয়ে দু'বার ভাবেন না:

foreach (string s in listOfStrings) { /* do stuff */ }

এটি কয়েক ডজন হতে পারে, সমাবেশে কয়েকশ লাইনের কোড হতে পারে, এটি প্রয়োগকারী প্রতিটি প্রোগ্রামার আলাদা পন্থা গ্রহণ করতে পারে এবং তার সাথে আগত পরবর্তী ব্যক্তিকে এটি বের করতে হবে। সুতরাং যদি আপনি বিশ্বাস করেন (যতগুলি করেন) যে প্রোগ্রামগুলি প্রাথমিকভাবে অন্য লোকদের পড়ার জন্য লেখা হয় তবে সাধারণ এইচএলএল থেকে সমাবেশ কম পাঠযোগ্য।

সম্পাদনা: আমি সাধারণ কাজের জন্য ব্যবহৃত কোডের একটি ব্যক্তিগত গ্রন্থাগার এবং সি-জাতীয় নিয়ন্ত্রণ কাঠামো বাস্তবায়নের জন্য ম্যাক্রোগুলি সংগ্রহ করেছি। তবে আমি 90 এর দশকে প্রাচীরটি আঘাত করি, যখন জিইআইআই আদর্শ হয়ে ওঠে। রুটিন বিষয়গুলিতে খুব বেশি সময় ব্যয় করা হত।

আমার শেষ কাজটি ছিল যেখানে এএসএম অপরিহার্য ছিল কয়েক বছর আগে, ম্যালওয়ারের বিরুদ্ধে লড়াই করার কোড লিখেছিল। কোনও ইউজার ইন্টারফেস নেই, সুতরাং এটি ফোটা ছাড়া সমস্ত মজাদার অংশ ছিল।


আপনি কি এ ব্যাপারে নিশ্চিত? আমি মনে করি কোড
কমপ্লিটে

1
আমি নিশ্চিত যে এমন একটি বিন্দু আছে যেখানে 'অকাল অপ্টিমাইজেশন' অসুবিধায় 'কম রেখাগুলি' সুবিধা পরাজিত হয়। তবে আমি যুগে যুগে কোড
কমপ্লিটের

6
সমাবেশের পক্ষে যুক্তি হিসাবে "অকাল অপটিমাইজেশন" ব্যবহার করা কিছুটা বিদ্রূপাত্মক ... (যদিও আমি সম্ভবত আপনাকে ভুল ব্যাখ্যা করি I এখনও আমি এটি মজার বলে মনে করি))
বার্ড জেন্ড্রিসেক

আপনি এখনও এসেম্বলারে ফাংশনটি কল করতে পারেন, তাই আমি সন্দেহ করি যে একটি ফোরচ-লুপ কয়েক ডজন থেকে কয়েকশ লাইন নিয়ে যায়। বা আমি কী মিস করছি?
সেবাস্তিয়ান মাচ

@ ফ্রেসনেল: এর foreachচেয়ে অনেক বেশি কাজ করে for- এটি ইনস্টল করে একটি টাইপ-নির্দিষ্ট পুনরুক্তি ব্যবহার করে।
egrunin

15

অন্যান্য লোকের পঠনযোগ্যতা, রক্ষণাবেক্ষণযোগ্যতা, সংক্ষিপ্ত কোড এবং এর ফলে কম ত্রুটিযুক্ত উত্তরগুলি এবং আরও সহজ হওয়ায়, আমি একটি অতিরিক্ত কারণ যুক্ত করব:

প্রোগ্রাম গতি।

হ্যাঁ, সমাবেশে আপনি প্রতিটি শেষ চক্রটি ব্যবহার করার জন্য আপনার কোড টিউন করতে পারেন এবং এটি শারীরিকভাবে যতটা সম্ভব দ্রুত তৈরি করতে পারেন। তবে সময় কে কার? আপনি যদি সম্পূর্ণরূপে-বোকা সি প্রোগ্রাম লিখেন, সংকলকটি আপনার জন্য অনুকূলিতকরণের জন্য সত্যিই ভাল কাজ করবে। সম্ভবত আপনি নিজের হাতে যে অপটিমাইজেশন করেছেন তার কমপক্ষে 95% তৈরি করা, এটির কোনও ট্র্যাক রাখার বিষয়ে আপনার চিন্তা করার দরকার নেই। এখানে অবশ্যই একটি 90/10 ধরণের নিয়ম রয়েছে, যেখানে সর্বশেষ%% অপ্টিমাইজেশান আপনার 95% সময় গ্রহণ করবে। তাহলে কেন বিরক্ত করবেন?


4
+1 টি। এসেম্বলারের কোড লেখা এবং দ্রুত এসেম্বলারের কোড লেখা দুটি আলাদা জিনিস। আপনি যদি কোনও ভাল সংকলক ব্যবহার করেন তবে আপনি দ্রুত এসেম্বলারের কোডটি বিনামূল্যে পান।
নিকি

আপনি কেবল কম্পাইলারটি কীভাবে ব্যবহার করতে হয় তা জানেন, তবে বেশিরভাগই অপ্টিমাইজেশন ব্যবহার করবেন না, বেশিরভাগ লোকেরা ডিবাগ বিকল্পগুলি সংকলন করে এবং ফলস্বরূপ খারাপ কাজ করা ধীর এসেম্বলারের সাথে শেষ হয় তবেই আপনি বিনামূল্যে এসেম্বলার কোডটি বিনামূল্যে পান। হ্যাঁ 99% এরও বেশি সময় আপনাকে এটি স্পর্শ করা উচিত নয়, কেবল সংকলকগুলির নকগুলি স্পর্শ করুন এবং আউটপুটটিকে সরাসরি সাম্প্রতিক করে না।
old_timer

আপনি যদি অপ্টিমাইজেশানগুলির বিষয়ে চিন্তা করেন তবে আপনার এটি সংকলক থেকে করা উচিত ... যদি আপনি অপ্টিমাইজেশনের বিষয়ে চিন্তা না করেন তবে আপনি এখনও সমাবেশটি ব্যবহার করছেন তবে আপনি কেবল নির্বোধ হয়ে যাচ্ছেন।
ব্রায়ান পোস্টো

@ বাসিন্দা: আমার ধারণা, এমন কিছু স্ক্রিপ্ট-কিডিস থাকতে পারে যারা কীভাবে তারা সরঞ্জাম ব্যবহার করা হয় তা খুঁজে বের করতে বিরত হন না। তবে আমি সন্দেহ করি যে তাদের মতো লোকেরা কখনই দ্রুত এসেম্বলারের কোডটি লিখতে সক্ষম হবে।
নিকি

13

যদি কোনও গড় উত্পাদনের প্রোগ্রামটি 100k লাইন কোড বলে থাকে এবং প্রতিটি লাইন প্রায় 8-12 এসেম্বলারের নির্দেশাবলী থাকে তবে তা এসেম্বলারের নির্দেশাবলী 1 মিলিয়ন হবে।

এমনকি যদি আপনি একটি শালীন গতিতে হাত দিয়ে এগুলি লিখতে পারেন (মনে রাখবেন, এটির যে 8 গুণ বেশি কোড আপনাকে লিখতে হবে), আপনি যদি কিছু কার্যকারিতা পরিবর্তন করতে চান তবে কী হবে? এই 1 মিলিয়ন নির্দেশাবলীর মধ্যে কয়েক সপ্তাহ আগে আপনি লিখেছেন এমন কিছু বোঝা দুঃস্বপ্ন! এখানে কোনও মডিউল নেই, ক্লাস নেই, কোনও অবজেক্ট-ওরিয়েন্টেড ডিজাইন নেই, ফ্রেমওয়ার্ক নেই, কিছুই নেই। এবং এমনকি সাধারণ জিনিসগুলির জন্য আপনাকে যে পরিমাণ অনুরূপ কোড লিখতে হবে তা হ'ল উত্তম is

এছাড়াও, আপনি আপনার কোডটি পাশাপাশি উচ্চ স্তরের ভাষারও অনুকূলিত করতে পারবেন না। যেখানে সি উদাহরণস্বরূপ একটি উন্মাদ সংখ্যক অপ্টিমাইজেশান সম্পাদন করে কারণ আপনি কেবল আপনার কোডটিই বর্ণনা করেন না কেবল আপনার কোডটিই কোড লেখেন, এসেম্ব্লারার আপনার কোডটিতে সত্যই কোনও নোট-যোগ্য অপ্টিমাইজেশন সম্পাদন করতে পারে না। আপনি যা লেখেন তা হ'ল যা আপনি পান এবং আমার প্রতি বিশ্বাস রাখুন, আপনি যে 1 মিলিয়ন নির্দেশকে প্যাচ এবং প্যাচটি লিখছেন তেমন নির্ভরযোগ্যভাবে অনুকূল করতে পারবেন না।


8

ঠিক আছে আমি "পুরানো দিনগুলিতে" প্রচুর সমাবেশ লিখেছিলাম এবং আমি আপনাকে আশ্বাস দিতে পারি যে আমি যখন উচ্চ স্তরের ভাষায় প্রোগ্রাম লিখি তখন আমি অনেক বেশি উত্পাদনশীল am


8
"অ্যাসেম্বলিটি লাতিন"।
অ্যাড্রিয়ানো ভারোলি পিয়াজা

4
@ অ্যাড্রিয়ানো: অনেকগুলি, বিভিন্ন বিভিন্ন উপভাষা ব্যতীত এবং এর মধ্যে দুটিও দেখতে এক রকম নয়।
জোচিম সৌর

1
অবশ্যই, তবে আমি বোঝাতে চেয়েছিলাম যে এগুলির যে কোনও একটিতে প্রোগ্রাম শেখা আপনাকে এমন একটি মেশিনের আর্কিটেকচারের অন্তর্দৃষ্টি দেয় যা আপনাকে উচ্চ স্তরে সহায়তা করে। আপনি পেজড মেমোরির সাথে ডিল না করে সেক্ষেত্রে আপনি ক্ষতবিক্ষত হয়ে যান। ক্যাটুল্লাস থেকে কারমেন 16 পড়ার মতো।
অ্যাড্রিয়ানো বারোলি পিয়াজা

5
@ অ্যাড্রিয়ানো "এসেম্বলিটি ল্যাটিন", কোনও asm গুহামান গ্রান্টস নয়। হরিণের জন্য রক 2grunts, আগুনের জন্য 3grunts - এর জন্য সাধারণ পদার্থের জন্য ভাল তবে একটি সাম্রাজ্য চালানো শক্ত।
মার্টিন বেকেট

1
@ মার্টিন: আপনি কি কখনও রোমান সংখ্যার সাথে জটিল গাণিতিক করার চেষ্টা করেছেন?
অ্যাড্রিয়ানো ভারোলি পিয়াজা

6

এসেম্বলারের যোগ্যতার একটি যুক্তিসঙ্গত স্তর হ'ল একটি দরকারী দক্ষতা, বিশেষত যদি আপনি কোনও সিস্টেমের স্তরে বা এম্বেড প্রোগ্রামিংয়ের যে কোনও ধরণের কাজ করেন, এত বেশি নয় যে আপনাকে এত পরিমাণে এসেম্ব্লার লিখতে হবে, তবে কারণ কখনও কখনও এটি বোঝা গুরুত্বপূর্ণ যে বাক্সটি আসলে কী করছে । আপনার যদি এসেম্বলার ধারণা এবং ইস্যু সম্পর্কে নিম্ন-স্তরের বোঝাপড়া না থাকে তবে এটি খুব কঠিন হতে পারে।

যাইহোক, এসেম্বলারের ক্ষেত্রে প্রকৃতপক্ষে অনেক কোড লেখার জন্য, অনেকগুলি কারণ রয়েছে যা এটি খুব বেশি সম্পন্ন হয়নি।

  • সহজভাবে কোনও (প্রায়) প্রয়োজন নেই। খুব শীঘ্রই সিস্টেম সূচনা এবং সি ফাংশন বা ম্যাক্রোগুলিতে লুকানো কয়েকটি এসেম্বলারের টুকরো জাতীয় কিছু বাদে সমস্ত অতি নিম্ন-স্তরের কোড যা একবার এসেম্বেলারে লেখা হতে পারে সেগুলি সি বা সি ++ তে কোনও অসুবিধা ছাড়াই লেখা যেতে পারে।

  • উচ্চ-স্তরের ভাষাগুলিতে কোড (এমনকি সি এবং সি ++) কার্যকারিতাকে খুব কম লাইনগুলিতে ঘনীভূত করে, এবং যথেষ্ট গবেষণায় দেখা যায় যে বাগের সংখ্যা উত্স কোডের লাইনের সংখ্যার সাথে সম্পর্কিত lates অর্থাত্, একই সমস্যা, এসেম্বলার এবং সি-তে সমাধান করা, এসেম্বলারের মধ্যে আরও বেশি বাগ থাকবে কারণ এটি দীর্ঘ। একই যুক্তি পার্ল, পাইথন ইত্যাদির মতো উচ্চ স্তরের ভাষাগুলিতে স্থানান্তরিত করে ates

  • এসেম্বলারের মাধ্যমে লেখার জন্য, আপনাকে সমস্যার প্রতিটি একক বিষয় নিয়ে বিস্তারিত মেমরি লেআউট, নির্দেশাবলী নির্বাচন, অ্যালগরিদম পছন্দ, স্ট্যাক ম্যানেজমেন্ট ইত্যাদি থেকে মোকাবেলা করতে হবে উচ্চ স্তরের ভাষাগুলি এগুলি আপনার কাছ থেকে দূরে সরিয়ে নিয়ে যায়, এ কারণেই এগুলি এতটাই স্বচ্ছল এলওসি-র শর্তাদি।

মূলত, উপরের সমস্তগুলি এসেম্বলার বনাম সি বা অন্য কোনও ভাষায় আপনার কাছে উপলব্ধ বিমূর্তির স্তরের সাথে সম্পর্কিত। এসেম্বলার আপনাকে আপনার নিজের সমস্ত বিমূর্ততা তৈরি করতে এবং এটিকে নিজের স্ব-শৃঙ্খলা বজায় রাখার জন্য জোর করে, যেখানে সি-র মতো কোনও মধ্য-স্তরের ভাষা এবং বিশেষত উচ্চ স্তরের ভাষাগুলি আপনাকে বাক্সের বাইরে বিমূর্ততা সরবরাহ করে the তুলনামূলকভাবে সহজেই নতুন তৈরি করার ক্ষমতা।


6

এম্বেডেড প্রোগ্রামিং জগতে তার বেশিরভাগ সময় ব্যয়কারী একজন বিকাশকারী হিসাবে, আমি যুক্তি দেব যে সমাবেশটি একটি মৃত / অপ্রচলিত ভাষা থেকে অনেক দূরে। কোডিংয়ের একটি নির্দিষ্ট-থেকে-ধাতব স্তর রয়েছে (উদাহরণস্বরূপ, ড্রাইভারগুলিতে) যা কখনও কখনও উচ্চ-স্তরের ভাষায় নির্ভুল বা দক্ষতার সাথে প্রকাশ করা যায় না। আমরা আমাদের প্রায় সকল হার্ডওয়্যার ইন্টারফেস রুটিনকে এসেম্বলিংয়ে লিখি।

বলা হচ্ছে, এই সমাবেশ কোডটি এমনভাবে মোড়ানো রয়েছে যে এটি সি কোড থেকে কল করা যায় এবং একটি লাইব্রেরির মতো আচরণ করা হয়। আমরা বহু কারণে পুরো প্রোগ্রামটি সমাবেশে লিখি না। প্রথম এবং সর্বাগ্রে বহনযোগ্যতা; আমাদের কোড বেসটি বিভিন্ন পণ্য যা বিভিন্ন আর্কিটেকচার ব্যবহার করে তার উপর ব্যবহৃত হয় এবং আমরা তাদের মধ্যে ভাগ করা যায় এমন কোডের পরিমাণ বাড়িয়ে তুলতে চাই। দ্বিতীয়টি হল বিকাশকারী পরিচয়। সোজা কথায়, বিদ্যালয়গুলি তাদের আগের মতো সমাবেশ শেখায় না এবং আমাদের বিকাশকারীরা সমাবেশের চেয়ে সি-তে অনেক বেশি উত্পাদনশীল। এছাড়াও, আমাদের সি কোডের জন্য বিস্তৃত "অতিরিক্ত" (লাইব্রেরি, ডিবাগার, স্ট্যাটিক বিশ্লেষণ সরঞ্জাম ইত্যাদি) বিভিন্ন ধরণের রয়েছে যা সমাবেশ ভাষা কোডের জন্য উপলভ্য নয়। এমনকি যদি আমরা একটি বিশুদ্ধ-সমাবেশ প্রোগ্রাম লিখতে চাইতাম, আমরা সক্ষম হব না কারণ বেশ কয়েকটি সমালোচনামূলক হার্ডওয়্যার লাইব্রেরি কেবল সি লিব হিসাবে উপলব্ধ। এক অর্থে, এটি একটি মুরগির / ডিমের সমস্যা। লোকজন সমাবেশ থেকে দূরে সরে যায় কারণ এর জন্য এতগুলি লাইব্রেরি এবং বিকাশ / ডিবাগ সরঞ্জাম উপলব্ধ নেই তবে লাইবস / সরঞ্জামগুলির অস্তিত্ব নেই কারণ পর্যাপ্ত লোকেরা এগুলি তৈরির প্রচেষ্টাটি প্রমাণ করার জন্য সমাবেশ ব্যবহার করে না।

শেষ অবধি, যে কোনও ভাষার জন্য একটি সময় এবং জায়গা রয়েছে। লোকেরা যা তাদের সাথে সবচেয়ে পরিচিত এবং উত্পাদনশীল তা ব্যবহার করে। সম্ভবত প্রোগ্রামিংয়ের অধ্যক্ষগুলিতে সমাবেশের জন্য সর্বদা একটি জায়গা থাকবে তবে বেশিরভাগ প্রোগ্রামাররা দেখতে পাবেন যে তারা একটি উচ্চ-স্তরের ভাষায় কোড লিখতে পারেন যা প্রায় কম সময়েই দক্ষ।


6

আপনি যখন সমাবেশে লিখছেন, আপনাকে কেবল নির্দেশের কোডগুলিতে লিখতে হবে না। প্রোগ্রামগুলিকে আরও মডুলার, আরও রক্ষণাবেক্ষণযোগ্য এবং পড়ার সহজ করার জন্য আপনি বিভিন্ন বিমূর্ততা তৈরি করতে ম্যাক্রো এবং পদ্ধতিগুলি এবং আপনার নিজস্ব কনভেনশন ব্যবহার করতে পারেন।

সুতরাং আপনি মূলত যা বলছেন তা হ'ল, একটি পরিশীলিত এসেম্বেবলারের দক্ষ ব্যবহারের সাথে আপনি আপনার এএসএম কোড সি এর আরও কাছাকাছি এবং আরও কাছাকাছি করতে পারবেন (বা যাইহোক আপনার নিজের আবিষ্কারের অন্য নিম্ন-ইশ-স্তরের ভাষা), অবশেষে আপনি ঠিক সি প্রোগ্রামার হিসাবে উত্পাদনশীল।

এতে আপনার প্রশ্নের উত্তর হলো কি? ;-)

আমি এটিকে অযৌক্তিকভাবে বলি না: আমি ঠিক এই জাতীয় সমাবেশকারী এবং সিস্টেম ব্যবহার করে প্রোগ্রাম করেছি। আরও ভাল, এসেম্বেলার এক ভার্চুয়াল প্রসেসরকে লক্ষ্য করতে পারে এবং একটি পৃথক অনুবাদক একটি লক্ষ্য প্ল্যাটফর্মের জন্য এসেম্বলারের আউটপুট সংকলন করে। অনেকটা এলএলভিএম এর আইএফ এর সাথে ঘটে তবে প্রাথমিক পর্যায়ে এটি প্রায় 10 বছর পূর্বে ডেটিং করে। সুতরাং বহনযোগ্যতা ছিল, এছাড়াও দক্ষতার জন্য প্রয়োজনীয় যেখানে একটি নির্দিষ্ট টার্গেট অ্যাসেস্বেবলারের জন্য রুটিনগুলি লেখার ক্ষমতা ছিল।

এসেম্বলারের সাহায্যে লেখাটি সি হিসাবে প্রায় উত্পাদনশীল ছিল, এবং জিসিসি -৩ এর সাথে তুলনা করে (যা আমি জড়িত সময়ে প্রায় ছিল) এসেম্ব্লার / অনুবাদক কোড তৈরি করেছিলেন যা মোটামুটি দ্রুত এবং সাধারণত ছোট ছিল smaller আকারটি সত্যই গুরুত্বপূর্ণ ছিল, এবং সংস্থার কয়েকটি প্রোগ্রামার ছিল এবং তারা কার্যকর কোনও কার্যকর করার আগে নতুন ভাড়াগুলিকে একটি নতুন ভাষা শেখাতে ইচ্ছুক ছিল। এবং আমাদের ব্যাক-আপটি ছিল যে যাঁরা এসেম্বলার (যেমন গ্রাহক) জানেন না তারা সি কল করতে এবং একই কলিং কনভেনশন ব্যবহার করে একই ভার্চুয়াল প্রসেসরের জন্য এটি সংকলন করতে পারে, যাতে এটি খুব সুন্দরভাবে ইন্টারফেস করে। সুতরাং এটি প্রান্তিক জয়ের মতো অনুভূত হয়েছিল।

এটি ব্যাগটিতে একত্রিত প্রযুক্তি, গ্রন্থাগার ইত্যাদির একাধিক বহু বছরের কাজ ছিল। স্বীকারযোগ্য যেগুলির বেশিরভাগ এটি পোর্টেবল তৈরিতে চলে গিয়েছিল, যদি এটি কেবল কখনও কোনও স্থাপত্যকে লক্ষ্য করে তৈরি করা হত তবে সমস্ত-গাওয়া অল-নাচের এসেমব্লার আরও সহজ হত।

সংক্ষেপে: আপনি সি পছন্দ করতে পারেন না, তবে এর অর্থ এই নয় যে সি ব্যবহারের প্রচেষ্টা আরও ভাল কিছু নিয়ে আসার প্রচেষ্টার চেয়ে বেশি।


5

বিভিন্ন মাইক্রোপ্রসেসরের মধ্যে সমাবেশ পোর্টেবল নয়।


এটি আধুনিক প্রসেসর এবং একত্রিতকারী প্রোগ্রামগুলির সাথে ঠিক সত্য নয়, আপনি সি তে যেমন পারেন তেমন বিভিন্ন প্রসেসরকে লক্ষ্য করতে পারেন নিশ্চিত আপনি এই ক্ষেত্রে নির্দেশাবলীর পুরো সেটটি ব্যবহার করতে সক্ষম হবেন না তবে আপনি যদি এটি লিখেন তবে আপনিও করবেন না সি মধ্যে পোর্টেবলিটি প্রাথমিক উদ্বেগ নয়।
অন্ধ

6
সম্ভবত আপনি আর্কিটেকচার মানে ।
বেন এস

2
@Blindy - তুমি এক্স 86 পরিবার মধ্যে বিভিন্ন প্রসেসর লক্ষ্য করতে পারেন কিন্তু স্পষ্টভাবে একটি x86 বৈকল্পিক এবং এআরএম প্রসেসর বা Z80 অথবা একটি 8051. মধ্যে সমাবেশ নির্দেশাবলী কোন মিল আছে
semaj

সত্য, তবে তারপরে আপনি একটিতে z80 প্রোগ্রাম করতে পারবেন না। আমি মনে করি আমরা সবাই এখানে সাধারণ x86 / x64 প্রসেসরের কথা বলছি।
অন্ধ

1
সমস্ত পৃথিবী একটি x86 নয়। "বিভিন্ন মাইক্রোপ্রসেসর" সম্পর্কে কিছুই প্রস্তাব দেয় না যে তারা সকলেই একই নির্দেশিকা নির্বাহ করে।
বার্ড জেন্ড্রিসেক

5

একই কারণে আমরা বাইরে বাথরুমে যাই না বা কেন আমরা লাতিন বা আরামাইক না বলি।

প্রযুক্তি বরাবর আসে এবং জিনিসগুলি সহজ এবং আরও অ্যাক্সেসযোগ্য করে তোলে।

সম্পাদনা - আপত্তিজনক লোকদের থামাতে, আমি কিছু শব্দ মুছে ফেলেছি।


4
আপনি এখনও Technology
লুডাইটাইট

1
"আমরা" লাতিন কথা বলি না?
কুয়াশাচ্ছন্ন

লাতিন বা আরামাইক কেউই অদৃশ্য হয়নি কারণ তাদের উন্নত প্রযুক্তি দ্বারা প্রতিস্থাপিত হয়েছিল (অর্থাত্ ভাষা শিখতে / বাছাই করা সহজ)। আসলে, লাতিন এখনও ইউরোপের সর্বত্রই আমাদের সাথে রয়েছে। সমস্ত রোমান ভাষা লাতিনের উপর ভিত্তি করে। আধুনিক (নব্য) আরামাইক আজ প্রায় অর্ধ মিলিয়ন লোকের দ্বারা কথিত। এই ভাষাগুলি আর যেহেতু প্রচলিত নয় সেগুলির কারণ historicalতিহাসিক (ভূ-রাজনৈতিক, আরও সুনির্দিষ্ট হওয়া), প্রযুক্তিগত নয়। একই কারণেই ইংরেজি হ'ল আমাদের যুগের বিজ্ঞান ও শাসক শ্রেণীর ভাষাগুলি - শেষ সাম্রাজ্যের মানুষ, ব্রিটিশ (এবং বর্তমানে আমেরিকান আমেরিকান) এটি কথা বলে।
রিটজ

4

কেন? সহজ।

এর সাথে তুলনা করুন:

        for (var i = 1; i <= 100; i++)
        {
            if (i % 3 == 0)
                Console.Write("Fizz");
            if (i % 5 == 0)
                Console.Write("Buzz");
            if (i % 3 != 0 && i % 5 != 0)
                Console.Write(i);
            Console.WriteLine();
        }

সঙ্গে

.locals init (
    [0] int32 i)
L_0000: ldc.i4.1 
L_0001: stloc.0 
L_0002: br.s L_003b
L_0004: ldloc.0 
L_0005: ldc.i4.3 
L_0006: rem 
L_0007: brtrue.s L_0013
L_0009: ldstr "Fizz"
L_000e: call void [mscorlib]System.Console::Write(string)
L_0013: ldloc.0 
L_0014: ldc.i4.5 
L_0015: rem 
L_0016: brtrue.s L_0022
L_0018: ldstr "Buzz"
L_001d: call void [mscorlib]System.Console::Write(string)
L_0022: ldloc.0 
L_0023: ldc.i4.3 
L_0024: rem 
L_0025: brfalse.s L_0032
L_0027: ldloc.0 
L_0028: ldc.i4.5 
L_0029: rem 
L_002a: brfalse.s L_0032
L_002c: ldloc.0 
L_002d: call void [mscorlib]System.Console::Write(int32)
L_0032: call void [mscorlib]System.Console::WriteLine()
L_0037: ldloc.0 
L_0038: ldc.i4.1 
L_0039: add 
L_003a: stloc.0 
L_003b: ldloc.0 
L_003c: ldc.i4.s 100
L_003e: ble.s L_0004
L_0040: ret 

তারা অভিন্ন বৈশিষ্ট্য অনুসারে। দ্বিতীয়টি এমনকি একত্রকারী নয় তবে। নেট আইএল (জাভা এর বাইকোডের অনুরূপ মধ্যস্থতাকারী ভাষা)। দ্বিতীয় সংকলন আইএলটিকে দেশীয় কোডে রূপান্তরিত করে (প্রায় প্রায় এসেম্বারার), এটি আরও ক্রিপ্টিকাল করে তোলে।


3

আমি অনুমান করতে পারি যে এমনকি x86 (_64) এএসএম আপনি যে ক্ষেত্রে কম্পাইলারের পক্ষে অনুকূলকরণের পক্ষে কঠিন, সেই নির্দেশিকাগুলি ব্যবহার করে অনেক লাভ করেছেন। উদাহরণস্বরূপ x264 এর এনকোডিংয়ের জন্য প্রচুর পরিমাণ asm ব্যবহার করে এবং গতি লাভটি বিশাল।


2

আমি নিশ্চিত যে এর অনেকগুলি কারণ রয়েছে, তবে দুটি দ্রুত কারণ আমি এটি ভাবতে পারি

  1. অ্যাসেম্বলি কোডটি অবশ্যই পড়তে পারা শক্ত (আমি লেখার পক্ষে আরও বেশি সময় সাপেক্ষে আমি ইতিবাচক)
  2. আপনার যখন কোনও প্রোডাক্টে বিকাশকারীদের একটি বিশাল দল কাজ করে, আপনার কোডটি লজিক্যাল ব্লকে বিভক্ত করা এবং ইন্টারফেসগুলি দ্বারা সুরক্ষিত করা সহায়ক।

1
নোট করুন যে আপনি অ্যাসেমব্লিকেও লজিক্যাল ব্লকগুলিতে আলাদা করতে পারেন।
পল উইলিয়ামস

2

প্রারম্ভিক আবিষ্কারগুলির মধ্যে একটি (আপনি এটি ব্রুকসের পৌরাণিক ম্যান-মাস- এ পেয়ে যাবেন , যা ১৯60০- এর দশকের অভিজ্ঞতা থেকে পাওয়া যায়) হ'ল লোকেরা প্রতিদিন কোনও ভাষাতে ডিবাগড লাইনগুলিতে অন্য ভাষায় কমবেশি উত্পাদনশীল ছিল। এটি অবশ্যই সর্বজনীনভাবে সত্য নয় এবং খুব বেশি দূরে ঠেলে গেলে তা ভেঙে যেতে পারে তবে ব্রুকসের সময়ের উচ্চ-স্তরের ভাষার ক্ষেত্রে এটি সাধারণত সত্য ছিল।

সুতরাং, উত্পাদনশীলতা অর্জনের দ্রুততম উপায়টি হ'ল এমন ভাষা ব্যবহার করা যেখানে একক পৃথক কোডের কোড আরও বেশি করে এবং প্রকৃতপক্ষে এটি কাজ করে, কমপক্ষে ফরটারন এবং কোবোলের মতো জটিলতার ভাষার জন্য বা আরও আধুনিক উদাহরণ সি প্রদান করে works


2

বহনযোগ্যতা সর্বদা একটি সমস্যা - যদি এখন না হয় তবে অন্তত অবশেষে। প্রোগ্রামিং শিল্পটি প্রতি বছর পুরাতন সফ্টওয়্যারগুলি বন্দর করতে ব্যয় করে কয়েক হাজার ব্যয় করে, যা এটি লেখা হয়েছিল, "স্পষ্টতই" কোনও বহনযোগ্যতার ইস্যু ছিল না।


2
"এটি অন্য কোনও স্থাপত্যে পোর্ট করতে হবে না" আমার কানের কাছে পুরোপুরি শোনাচ্ছে "বছরের জন্য এটির জন্য দুটি সংখ্যার বেশি লাগবে না।"
ডেভিড থর্নলি

বা উইন্ডোজ পরের বছর নাও থাকতে পারে বলে আমরা সি # ব্যবহার করতে পারি না?
মার্টিন বেকেট

উদাহরণস্বরূপ অ্যাপলের ম্যাকআইনটোশ কম্পিউটারগুলি যা মোটরোলা এমসি 68000 সিরিজ প্রসেসর, পাওয়ারপিসি (আইবিএম এবং সমস্ত), এবং এখন ইন্টেলের এক্স 86 (আইএ -32 (ই)) প্রসেসরের উপর ভিত্তি করে তৈরি হয়েছে। হ্যাঁ, বহনযোগ্য পর্যায়ে ব্যবহৃত কোনও সিস্টেমের জন্য বহনযোগ্যতা একটি সমস্যা এবং যে কোনও প্রোগ্রামার তাদের কোড দ্বারা প্রত্যাশার চেয়ে দীর্ঘস্থায়ী হয়নি তার অভিজ্ঞতা এখনও পাওয়া যায় নি।
ম্যাকটাইলার

@ মার্টিন: এখন থেকে বিশ বছর পরে, লোকেরা প্রচুর সি # প্রোগ্রাম চালাতে চায় এবং তাই সি # প্রোগ্রামগুলি সংকলন ও চালনার উপায় থাকবে। সি # সম্পর্কে অন্তর্নিহিতভাবে কিছু ঠিক করা হয়নি, যদিও বিশ বছরে আমি অবাক হয়ে থাকি যদি এটি এখনকার মতো জনপ্রিয় হয়ে থাকে। তবে বিশ বছরে আমাদের সিপিইউগুলি উল্লেখযোগ্যভাবে আলাদা হবে different ১৯৯০-এ লেখা একটি এসেম্ব্লার প্রোগ্রাম আজকাল খুব ভাল চলতে পারে তবে এটি অবশ্যই অনুকূল হবে না এবং সংকলিত সি এর চেয়ে ধীর গতিতে চলবে
ডেভিড থর্নলি

এটাই আমি বোঝাতে চেয়েছিলাম - আমার তুলনায় অনেক বেশি পোর্টিং ইস্যু রয়েছে কারণ আমার তুলনায় একটি উচ্চ-স্তরের কাঠামো mon মাস আগে আগে পরিবর্তিত হয়েছিল কারণ একটি x86 এর নির্দেশাবলী পরিবর্তিত হয়েছিল - বিশেষত যেহেতু হাতের কোডেড এ্যাসটি সহজ পদ্ধতির সাথে লেগে থাকে।
মার্টিন বেকেট

2

সমাবেশটি কম সাধারণ হওয়ার সাথে সাথে একটি দুষ্টচক্র ছিল: উচ্চ স্তরের ভাষাগুলি পরিপক্ক হওয়ার কারণে, সমাবেশ ভাষা নির্দেশের সেটগুলি প্রোগ্রামার সুবিধার জন্য কম এবং সংকলকগুলির সুবিধার জন্য আরও নির্মিত হয়েছিল।

সুতরাং, এখন, বাস্তবত্বে, আপনার কোনটি নিবন্ধভুক্ত করা উচিত বা কোন নির্দেশাবলী কিছুটা বেশি দক্ষ, সে সম্পর্কে সঠিক সিদ্ধান্ত নেওয়া খুব কঠিন হতে পারে। সংকলকগণ হ'ল হরিস্টিক্স ব্যবহার করতে পারেন তা নির্ধারণ করতে যে কোন ট্রেড অফের সবচেয়ে ভাল বেতন রয়েছে। আমরা সম্ভবত ছোট সমস্যাগুলির মধ্যে দিয়ে চিন্তা করতে পারি এবং স্থানীয় অপ্টিমাইজেশনগুলি সন্ধান করতে পারি যা আমাদের এখনকার সুন্দর পরিশীলিত সংকলকগুলিকে পরাজিত করতে পারে, তবে বৈষম্যগুলি হ'ল গড় ক্ষেত্রে, একটি ভাল সংকলক সম্ভবত কোনও ভাল প্রোগ্রামারের চেয়ে প্রথম চেষ্টাতে আরও ভাল কাজ করবে। অবশেষে, জন হেনরির মতো আমরাও মেশিনটিকে পরাজিত করতে পারি, তবে আমরা সেখানে পৌঁছে গিয়ে মারাত্মকভাবে নিজেকে পোড়াতে পারি।

আমাদের সমস্যাও এখন বেশ আলাদা different 1986 সালে আমি স্ক্রিনে কয়েক শতাধিক পিক্সেল লাগানোর সাথে জড়িত ছোট প্রোগ্রামগুলির থেকে কীভাবে আরও কিছুটা গতি অর্জন করতে পারি তা জানার চেষ্টা করছিলাম; আমি চেয়েছিলাম অ্যানিমেশনটি কম ঝাঁকুনির হোক। সমাবেশ ভাষার ক্ষেত্রে একটি সুক্ষ্ম মামলা fair এখন আমি চুক্তির ভাষা এবং বন্ধকগুলির জন্য সার্ভিসারের নীতির চারপাশে কীভাবে বিমূর্ততা উপস্থাপন করব তা বোঝার চেষ্টা করছি এবং আমি বরং এমন কিছু পড়তে চাই যা ব্যবসায়ের লোকেরা যে ভাষায় কথা বলে to এলআইএসপি ম্যাক্রোগুলির বিপরীতে, অ্যাসেম্বলি ম্যাক্রোগুলি নিয়মের পথে খুব বেশি প্রয়োগ করে না, সুতরাং আপনি কোনও ভাল এস্যাসেব্লারে কোনও ডিএসএল-এর কাছে যুক্তিসঙ্গতভাবে কিছু পেতে সক্ষম হলেও, এটি জিতেছে এমন সব ধরণের বিড়ম্বনার ঝুঁকিতে থাকবে ' আমি যদি রুবি, বু, লিস্প, সি # বা এমনকি এফ # তে একই কোডটি লিখি তবে আমার সমস্যার কারণ হবে না।

আপনার সমস্যাগুলি যদি দক্ষ সমাবেশের ভাষায় প্রকাশ করা সহজ হয় তবে আপনার কাছে আরও শক্তি।


2

অন্যরা যা বলেছে তার বেশিরভাগই।

সি আবিষ্কার করার আগে খুব ভাল দিনগুলিতে, যখন একমাত্র উচ্চ স্তরের ভাষা ছিল কোবল এবং ফোরট্রানের মতো জিনিস, সেখানে অনেকগুলি জিনিস ছিল যা এসেম্বলারের অবলম্বন ছাড়া সম্ভব ছিল না। নমনীয়তার পুরো প্রশস্ততা পাওয়া, সমস্ত ডিভাইস ইত্যাদির অ্যাক্সেস ইত্যাদি সক্ষম করার একমাত্র উপায় ছিল তবে সি-র উদ্ভাবন হয়েছিল, এবং সমাবেশে যা কিছু সম্ভব ছিল তা সি-তে সম্ভব হয়েছিল আমি যেহেতু খুব কম অ্যাসেম্বলি লিখেছি have তারপর।

এটি বলেছিল, আমি মনে করি যে নতুন প্রোগ্রামারদের এসেম্বলারে লিখতে শেখা এটি একটি খুব দরকারী অনুশীলন। তারা আসলে এটি বেশি ব্যবহার করবে বলে নয়, তবে কম্পিউটারের অভ্যন্তরে কী ঘটছে তা আপনি বুঝতে পারেন। আমি প্রোগ্রামারদের প্রচুর প্রোগ্রামিং ত্রুটি এবং অকার্যকর কোড দেখেছি যাদের বিট এবং বাইটস এবং রেজিস্টারগুলির সাথে আসলে কী ঘটছে তা স্পষ্টভাবে কোনও ধারণা নেই।


হ্যাঁ, স্পট অন। কয়েক বছর আগে আইবিএম মেইনফ্রেমে ফোর্টরান ডিস্ক এবং টেপ I / O অকেজো হওয়ার পাশে ছিল, তাই আমরা 370 / এসেমব্লারগুলিতে আমাদের নিজস্ব I / O রুটিনগুলি লিখে ফোর্টান IV কোড থেকে কল করেছি called এবং অ্যাসেম্বলি কোড লেখা আমাকে সত্যই অন্তর্নিহিত আর্কিটেকচার বুঝতে পেরেছিল। আমি বেশ কয়েক বছর ধরে এখন কোনও অ্যাসেমব্লিক কোড লিখিনি এবং আমি যে সমস্ত অল্প বয়স্ক লোকদের সাথে কাজ করি তারা কখনই কোনও লেখা হয় নি - তবে আমি ইচ্ছা করি তারা এগুলি শিক্ষিত হয়।
সাইমন নাইটস

2

আমি প্রায় এক মাস ধরে অ্যাসেমব্লিতে প্রোগ্রামিং করছি। আমি প্রায়শই সি তে একটি টুকরো কোড লিখি এবং তারপরে আমাকে সহায়তা করার জন্য এটি সমাবেশে সংকলন করি। সম্ভবত আমি সি সংকলকটির সম্পূর্ণ অপ্টিমাইজ করার শক্তিটি ব্যবহার করছি না তবে এটি প্রদর্শিত হয় যে আমার সি এসএম উত্স অপ্রয়োজনীয় ক্রিয়াকলাপ সহ অন্তর্ভুক্ত। সুতরাং আমি দেখতে শুরু করি যে একটি ভাল সি সংকলক একটি ভাল অ্যাসেমব্লিং কোডারকে ছাপিয়ে যায় এমন কথাটি সর্বদা সত্য হয় না।

যাইহোক, আমার সমাবেশ প্রোগ্রামগুলি এত দ্রুত। এবং আমি যত বেশি কম সমাবেশটি ব্যবহার করি আমার কোডটি লেখার জন্য আমাকে কম সময় লাগে কারণ এটি সত্যিই এতটা কঠিন নয়। এছাড়াও অ্যাসেম্বলির দুর্বলতাযোগ্যতা সম্পর্কে মন্তব্যটি সত্য নয়। আপনি যদি আপনার প্রোগ্রামগুলিকে সঠিকভাবে লেবেল করেন এবং অতিরিক্ত বর্ধনের প্রয়োজন হয় তখন মন্তব্য করেন আপনার প্রস্তুত হওয়া উচিত। প্রকৃতপক্ষে উপায়ে সমাবেশটি প্রোগ্রামারের কাছে আরও স্পষ্ট কারণ তারা প্রসেসরের স্তরে কী ঘটছে তা দেখছে। আমি অন্যান্য প্রোগ্রামারদের সম্পর্কে জানি না তবে আমার জন্য আমি কী ঘটছে তা জানার পছন্দ করি, জিনিসগুলি একরকম কালো বাক্সে থাকার চেয়ে।

এর সাথে বলেছিল যে সংকলকগুলির আসল সুবিধা হ'ল একটি সংকলক প্যাটার্ন এবং সম্পর্কগুলি বুঝতে পারে এবং তারপরে স্বয়ংক্রিয়ভাবে উত্সের উপযুক্ত স্থানে সেগুলি কোড করতে পারে। একটি জনপ্রিয় উদাহরণ হ'ল সি ++ এ ভার্চুয়াল ফাংশন যার জন্য ফাংশন পয়েন্টারগুলিকে অনুকূলভাবে মানচিত্র করার জন্য সংকলকটির প্রয়োজন। তবে একটি সংকলক সংকলকটির নির্মাতা সংকলককে যা করতে দেয় তা করার মধ্যে সীমাবদ্ধ। এর ফলে প্রোগ্রামাররা কখনও কখনও তাদের কোড সহ উদ্ভট কাজগুলি করার চেষ্টা করে, কোডিংয়ের সময় যোগ করে, যখন তারা সমাবেশের সাথে তুচ্ছভাবে কাজ করতে পারে।

ব্যক্তিগতভাবে আমি মনে করি মার্কেটপ্লেসটি উচ্চ স্তরের ভাষাগুলিকে প্রচুর সমর্থন করে। যদি আজ ভাষা পরিষদের ভাষা অস্তিত্বের একমাত্র ভাষা ছিল তবে তাদের প্রোগ্রামিং প্রায় 70% কম লোক ছিল এবং কে জানে যে আমাদের বিশ্ব কোথায় হবে, সম্ভবত 90 এর দশকে ফিরে এসেছিল। উচ্চ স্তরের ভাষাগুলি বিস্তৃত লোকের কাছে আবেদন করে। এটি আমাদের বিশ্বের প্রয়োজনীয় অবকাঠামো তৈরি করতে প্রোগ্রামারদের একটি উচ্চ সরবরাহ সরবরাহ করে। চীন ও ভারতের মতো উন্নয়নশীল দেশ জাভার মতো ভাষা থেকে প্রচুর উপকৃত হয়। এই দেশগুলি দ্রুত তাদের আইটি অবকাঠামো বিকাশ করবে এবং লোকেরা আরও আন্তঃসংযুক্ত হয়ে উঠবে। সুতরাং আমার বক্তব্যটি হ'ল উচ্চ স্তরের ভাষাগুলি জনপ্রিয় কারণ তারা উচ্চতর কোড তৈরি করে না কারণ তারা বিশ্বের বাজারগুলিতে চাহিদা মেটাতে সহায়তা করে।


ব্ল্যাক বক্স জিনিসটির জন্য +1। হ্যাঁ, আমরা কালো বাক্সগুলি ব্যবহার করছি, এবং সেগুলিতে উঁকি দেওয়ার কোনও উপায় নেই (খুব সহজ)। সি # ফোরচ সত্যিই কীভাবে কাজ করে? কে জানে. মাইক্রোসফ্ট বলেছিল, এটা নিখুঁত। তাহলে তা অবশ্যই হবে।
ern0

এছাড়াও, এটি ভুলে যাবেন না যে 'উচ্চ-স্তরের ভাষা'র সাথে আসল বিশ্বে প্রচুর পরিমাণে অন্যান্য জিনিস আসে। সি স্ট্যান্ডার্ড লাইব্রেরি (গণিত, স্ট্রিং প্রসেসিং, আই / ও ইত্যাদি) নিয়ে আসে এবং তারপরে জাভা এর মতো ভারী ওজন সংযোগ, চিত্র প্রক্রিয়াকরণ, ডেটা প্রসেসিং, ওয়েব দেব ইত্যাদির জন্য অন্যান্য প্যাকেজ এবং লাইব্রেরিগুলির সাথে বোঝা আসে Its এটি একটি প্রশ্ন question আপনার প্ল্যাটফর্মের এক প্ল্যাটফর্মে (এই জাতীয় সংসদ ব্যবহার করে) বিস্তৃত একই সময়ে ব্যয় করার বিপরীতে ন্যূনতম বাগের সাথে একাধিক প্ল্যাটফর্মে আরও বেশি বড় টাস্ক পাওয়ার জন্য আপনার সময়কে ব্যবহার করার ।
jbx

1

আমি এখনই কমপ org এ এসেম্বলি শিখছি, এবং এটি আকর্ষণীয় হলেও, এটি লিখতেও খুব অদক্ষ। জিনিসগুলি কাজ করার জন্য আপনাকে অনেক বেশি বিবরণ আপনার মাথায় রাখতে হবে, এবং একই জিনিসগুলি লেখার জন্য এটি ধীর । উদাহরণস্বরূপ, সি ++ এ লুপের জন্য একটি সাধারণ 6 লাইন 18 লাইন বা তার বেশি সমাবেশের সমান হতে পারে।

ব্যক্তিগতভাবে, হার্ডওয়্যার স্তরে জিনিসগুলি কীভাবে কাজ করে তা শিখার প্রচুর মজাদার বিষয় এবং এটি কীভাবে কম্পিউটিং কাজ করে তার জন্য এটি আমাকে আরও প্রশংসা দেয়।


1

সি একটি ভাল ম্যাক্রো এসেম্বলারের উপর যা রয়েছে তা হ'ল সি সি। টাইপ চেকিং। লুপ নির্মাণ। স্বয়ংক্রিয় স্ট্যাক পরিচালনা (প্রায়) স্বয়ংক্রিয় পরিবর্তনশীল পরিচালনা। এসেম্বলারের গতিশীল মেমরি কৌশলগুলি বাটটিতে প্রচণ্ড ব্যথা। একটি লিঙ্কযুক্ত তালিকাটি সঠিকভাবে করা সি এর তুলনায় ডান ভীতিকর মাত্রায় বা আরও ভাল তালিকা তালিকার foo.insert ()। এবং ডিবাগিং - ভাল, ডিবাগ করা সহজ কোন বিষয়ে কোন প্রতিযোগিতা নেই। এইচএলএলগুলি সেখানে হাত জিতল।

আমি আমার ক্যারিয়ারের প্রায় অর্ধেককে এসেম্বলারের কাছে কোডিং করেছি যা আমার পক্ষে সহজেই অনুগ্রহক হিসাবে ভাবতে সহজ করে তোলে। এটি সি কম্পাইলারটি কী করছে তা দেখতে আমাকে সহায়তা করে যা আমাকে আবার কোড লিখতে সহায়তা করে যা সি সংকলক দক্ষতার সাথে পরিচালনা করতে পারে। সি-তে লেখা একটি সুচিন্তিত রুটিন আউটপুটে লেখা যেতে পারে ঠিক কী কাজ দিয়ে আপনি অ্যাসেমব্লার করতে চান - এবং এটি বহনযোগ্য! ক্রস প্ল্যাটফর্ম কারণে আমাকে ইতোমধ্যে কয়েক পুরানো asm রুটিনগুলি আবার সিটিতে লিখতে হয়েছিল এবং এটি মজাদার নয়।

না, আমি সি এর সাথে লেগে থাকব এবং এইচএলএলের সাথে যে উত্পাদনশীলতা অর্জন করব তার বিপরীতে কর্মক্ষেত্রে মাঝেমধ্যে সামান্য ধীরগতির মোকাবিলা করব।


1

আমি কেবল উত্তর দিতে পারি কেন ব্যক্তিগতভাবে আমি অধিবেশনগুলিতে প্রোগ্রামগুলি প্রায়ই লিখি না, এবং এর মূল কারণ এটি করা আরও ক্লান্তিকর । এছাড়াও, আমি মনে করি যে অবিলম্বে নজরে না রেখে বিষয়গুলি সাবটলি ভুল করা সহজ । উদাহরণস্বরূপ, আপনি একটি নিয়মিত একটি নিবন্ধ ব্যবহার করার উপায় পরিবর্তন করতে পারেন তবে এটি এক জায়গায় পরিবর্তন করতে ভুলে যেতে পারেন। এটি জরিমানা একত্রিত হবে এবং আপনি পরে না খেয়াল করতে পারেন।

এটি বলেছিল, আমি মনে করি সমাবেশের জন্য এখনও বৈধ ব্যবহার রয়েছে। উদাহরণস্বরূপ, প্রচুর পরিমাণে ডেটা প্রক্রিয়াজাতকরণ, সিমডি ব্যবহার করে এবং "প্রতিটি বিট পবিত্র হয়" [উদ্ধৃতি ভি.সটোব] পদ্ধতির জন্য আমার বেশ কয়েকটি অপটিমাইজড অ্যাসেমব্লিউ রুটিন রয়েছে। (তবে মনে রাখবেন যে নিষ্পাপ সমাবেশের প্রয়োগগুলি প্রায়শই আপনার জন্য একটি সংকলক তৈরি করে তার চেয়ে অনেক খারাপ হয়))


1

সি হ'ল ম্যাক্রো এসেম্বেলার! এবং এটি সেরা!

এটি সমাবেশে প্রায় সব কিছু করতে পারে, এটি বহনযোগ্য হতে পারে এবং খুব বিরল ক্ষেত্রে যেখানে এটি এমন কিছু করতে পারে না যেখানে আপনি এখনও এমবেড থাকা সমাবেশ কোড ব্যবহার করতে পারেন। এটি আপনাকে কেবলমাত্র সমাবেশে লিখতে হবে এবং সমাবেশ ব্যতীত আর কিছু নয় এমন প্রোগ্রামগুলির একটি ক্ষুদ্র ভগ্নাংশ ছেড়ে দেয়।

এবং উচ্চ স্তরের বিমূর্ততা এবং বহনযোগ্যতা বেশিরভাগ লোকের জন্য সি তে সিস্টেম সফ্টওয়্যার লেখার পক্ষে আরও সার্থক করে তোলে এবং যদিও আপনি এখন কোনও প্রোগ্রাম লেখার জন্য প্রচুর সময় এবং অর্থ বিনিয়োগ করেন তবে আপনি নিজেকে সীমাবদ্ধ রাখতে চাইবেন না ভবিষ্যতে আপনি এটির জন্য কী ব্যবহার করতে সক্ষম হবেন।


1

লোকেরা মনে হয় ভুলে যায় যে অন্য দিকটিও রয়েছে।

আপনি কেন প্রথম স্থানে এসেমব্লারে লিখছেন? সত্যিকারের নিম্ন স্তরের ভাষায় প্রোগ্রামটি লিখছেন না কেন?

পরিবর্তে

mov eax, 0x123
add eax, 0x456
push eax
call printInt

আপনি ঠিক পাশাপাশি লিখতে পারে

B823010000
0556040000
50 
FF15.....

এর অনেক সুবিধা রয়েছে, আপনি আপনার প্রোগ্রামের সঠিক আকারটি জানেন, আপনি নির্দেশাবলীর মানটিকে অন্য নির্দেশাবলীর জন্য ইনপুট হিসাবে পুনরায় ব্যবহার করতে পারেন এবং এটি লেখার জন্য আপনার এসেম্বলারেরও দরকার নেই, আপনি কোনও পাঠ্য সম্পাদক ব্যবহার করতে পারেন ...

এবং যে কারণে আপনি এখনও এ্যাসেমব্লারকে পছন্দ করেন, অন্য কারণগুলি সি ...


0

কারণ এটি সর্বদা এভাবে থাকে: সময় পাস এবং ভাল জিনিসগুলিও যায় :(

আপনি যখন asm কোড লিখেন তখন আপনি উচ্চ-স্তরের ল্যাংস কোড দেওয়ার চেয়ে সম্পূর্ণ ভিন্ন অনুভূতি হয়, যদিও আপনি জানেন যে এটি অনেক কম উত্পাদনশীল। এটির মতো আপনি একজন চিত্রশিল্পী: আপনার পছন্দ মতো কিছু আঁকতে আপনি নির্দ্বিধায় কোনও বাধা ছাড়াই (ভাল, কেবলমাত্র সিপিইউ বৈশিষ্ট্য দ্বারা) ... এজন্যই আমি এটি পছন্দ করি। দুঃখের বিষয় এই ভাষাটি চলে যায়। তবে কেউ এখনও এটিকে মনে রাখে এবং কোড করে, এটি কখনই মরবে না!


সত্য। অন্যদিকে, যখন ক্যাশিয়ার এবং সুপারমার্কেট আপনার চেক নগদ করতে অস্বীকার করে, তখন আপনি যে অপমানের মুখোমুখি হন, হতাশ হয়ে বলে, "ওহ, আপনি স্বল্প স্তরের ভাষায় প্রোগ্রাম করেন।"
জয়

0

$$$

কোডটি $$$ এ পরিণত করতে সহায়তা করার জন্য একটি সংস্থা একটি বিকাশকারীকে নিয়োগ দেয় $$$ দ্রুত যে দরকারী কোড হতে পারে- যেমন, দ্রুত কোম্পানির মধ্যে $$$ যে কোড চালু করতে পারেন।

উচ্চতর স্তরের ভাষাগুলি দরকারী কোডের বৃহত পরিমাণে মন্থনে সাধারণত ভাল better এটি বলার অপেক্ষা রাখে না যে সমাবেশের তার কোনও স্থান নেই, কারণ এমন সময় এবং জায়গা রয়েছে যেখানে অন্য কিছু করবে না।


0

এইচএলএল এর সুবিধা আরও বেশি হয় যখন আপনি সমাবেশকে সি এর চেয়ে উচ্চ স্তরের ভাষার সাথে তুলনা করেন, যেমন জাভা বা পাইথন বা রুবি। উদাহরণস্বরূপ, এই ভাষাগুলিতে আবর্জনা সংগ্রহ রয়েছে: কখন অল্প পরিমাণ মেমরি মুক্ত করা উচিত তা নিয়ে চিন্তা করার দরকার নেই এবং খুব তাড়াতাড়ি মুক্ত হওয়ার কারণে কোনও মেমরি ফাঁস বা বাগ নেই।


0

অন্যরা যেমন আগে উল্লেখ করেছে যে কোনও সরঞ্জামের অস্তিত্বের কারণ হ'ল এটি কতটা দক্ষতার সাথে কাজ করতে পারে। যেহেতু এইচএলএলগুলি এসএম কোডের অনেকগুলি লাইনের মতো একই কাজ সম্পাদন করতে পারে আমি অনুমান করি যে সমাবেশটি অন্যান্য ভাষায় উড়িয়ে দেওয়া স্বাভাবিক। এবং কাছাকাছি-হার্ডওয়্যার ফিডিংয়ের জন্য - ভাষা অনুযায়ী সি এবং অন্যান্য রূপগুলিতে ইনলাইন এসেম্বলি রয়েছে। ডঃ পল কার্টার পিসি অ্যাসেম্বলি ভাষায় বলেছেন

"... পাস্কালের মতো প্রোগ্রামিং ভাষার তুলনায় কম্পিউটারগুলি কীভাবে নিম্ন স্তরে সত্যিই কাজ করে তার আরও ভাল বোঝার জন্য computers কম্পিউটার কীভাবে কাজ করে তার গভীর উপলব্ধি অর্জনের মাধ্যমে পাঠক প্রায়শই সি এর মতো উচ্চ স্তরের ভাষাগুলিতে আরও বেশি উত্পাদনশীল বিকাশকারী সফ্টওয়্যার হতে পারে এবং সি ++। এসেম্বলি ভাষায় প্রোগ্রাম শেখা এই লক্ষ্য অর্জনের একটি দুর্দান্ত উপায় ""

আমরা আমার কলেজ কোর্সে সমাবেশের সাথে পরিচিতি পেয়েছি। এটি ধারণাগুলি সাফ করতে সহায়তা করবে। তবে আমি সন্দেহ করি যে আমাদের মধ্যে যে কেউ 90% বিধানসভায় কোড লিখবে। গভীরতার সমাবেশ জ্ঞান আজ কতটা প্রাসঙ্গিক?


-2

এই উত্তরগুলি উল্টিয়ে দিয়ে, আমি 9-10 বয়সের সাড়া দিয়েছি যে কোনও প্রতিক্রিয়া সমাবেশে কখনও কাজ করেনি।

এটি একটি বয়সের পুরানো প্রশ্ন যা প্রায়শই প্রায়শই আসে এবং আপনি একই, বেশিরভাগই ভুল তথ্য দেওয়া উত্তর পান। যদি এটি বহনযোগ্যতার জন্য না হয়, তবে আমি নিজেরাই সমাবেশে সমস্ত কিছু করব। তারপরেও আমি সি-তে কোডগুলি প্রায় সমাবেশের মতো করে করি।


1
কোনও asm অভিজ্ঞতা ছাড়াই লোকেদের উল্লেখ করা +1 এবং অন্য "1 টি asm এর মতো সি কোডিংয়ের জন্য" করা উচিত। যখন আমি এম্বেডের জন্য সি ++ (হ্যাঁ, সিপিপি, সি নয়) অ্যাপ্লিকেশন লিখছি তখন আমি এএসএমের মতো কোডিং করছি, যেমন কোনও নতুন / ম্যালোক () ব্যবহার করবেন না।
ern0

সুতরাং আপনি চর বুফের মতো প্রচুর জিনিস ব্যবহার করেন [MAX_PATH] যা তখন কারও কাছে পড়ে যখন MAX_PATH + n আকারের ডেটা থাকে? ;)
পলম

1
@ পলম - আপনার মানে সি ঠিক যেমন করে?
রব

1
আমি নিশ্চিত আশা করি একত্রিত লেখকরা ম্যালোক () ব্যবহার এড়াবেন না। হ্যাঁ, এম্বেড করাতে আপনি স্মৃতি-সীমাবদ্ধ। তবে এটি ইউনিক্স বা অন্য কোনও ডেস্কটপে (বা এমনকি বেশিরভাগ মোবাইল ওএসএস) করুন এবং আপনি কেবল অহেতুক নিজেকে এবং আপনার ব্যবহারকারীদের সীমাবদ্ধ রেখে চলেছেন। এছাড়াও: আপনি যত কম এলওসি লিখবেন, ভুল হওয়ার সম্ভাবনা তত কম, যার অর্থ উচ্চ স্তরের কোডে কমের চেয়ে কম ত্রুটি হওয়ার সম্ভাবনা রয়েছে।
uliwitness

1
হ্যাঁ, কারণ আমি সন্দেহজনক এবং হ্যাঁ, আমি অবশ্যই রেডডিটারগুলিকে বলতে পারি এবং এইচএনার্স এখানে আছেন।
রব
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.