প্রোগ্রামিংয়ে এসেম্বলি এইড কীভাবে শেখা যায়? [বন্ধ]


132

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

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


2
আপনি যদি সত্যই আপনার কোডের নীচে কী চান তা জানতে চান, ইন্টেল প্রসেসরের ম্যানুয়ালটি (কেবলমাত্র পরিচিতি অংশ) দেখুন: download.intel.com/products/processor/manual/325462.pdf । আপনি এটি চেয়েছিলেন এটি কিছুটা গভীর হতে পারে তবে এটি দরকারী বলে মনে করি।
সুপারমোহাল

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

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

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

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

উত্তর:


188

কারণ আপনি বুঝতে পারবেন কিভাবে এটা সত্যিই কাজ করে।

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

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

আমরা এমন ভাষা রচনাগুলি সম্পর্কে ভাবতে পারি যা দেখতে খুব সুন্দর লাগে তবে এটি কোনও কাজ করার নিম্ন স্তরের পদ্ধতিতে খুব ভাল অনুবাদ করে না। এটি কীভাবে কাজ করে তা জেনে আপনি কীভাবে জিনিসগুলি কেন কাজ করে তা আপনি আরও ভাল করে বুঝতে পারবেন।


12
"আপনি উচ্চতর স্তরের প্রোগ্রামিং ভাষাগুলিতে আরও বেশি নির্মাণের প্রশংসা করবেন" এর জন্য +1। দুর্দান্ত উত্তর।
দেবসোলো

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

19
@ ড্যান: সময়ের সাথে সাথে এই পদগুলি কীভাবে পরিবর্তিত হয় তা মজার বিষয়। 20 বছর আগে, যখন আমি প্রোগ্রামিং শুরু করছিলাম, আপনি যদি কাউকে জিজ্ঞাসা করেছিলেন যে তারা বলবে "অবশ্যই সি একটি উচ্চ-স্তরের ভাষা!" এটি সুস্পষ্ট হওয়া উচিত ; এটি একটি মানসম্পন্ন গাদা এবং মেমরি অ্যাক্সেস মডেল সরবরাহ করে। এবং এটি হার্ডওয়্যার থেকে দূরে কিছু মারাত্মক বিমূর্ততা; একটি নিম্ন-স্তরের ভাষায়, আপনাকে সমস্ত মেমরি ঠিকানার ঠিকানাগুলি নিজের হাতে রাখতে হবে, বা আপনি যদি সত্যিই অভিনব কিছু করছেন , আপনি নিজের গাদা বরাদ্দকারী লিখুন! তাই আমাকে ভাবতে হবে, এমন মানদণ্ড যা আজকে কিছু উচ্চ-স্তরের বা নিম্ন-স্তরের করে তোলে?
ম্যাসন হুইলারের

9
উচ্চ-স্তরের / নিম্ন-স্তর কোনও বাইনারি নয়। তার কর্মজীবনে অ্যাসেম্বলি এবং পাইথন উভয়ই লিখেছেন এমন একটি ভাল বৃত্তাকার প্রোগ্রামার সি বা সি ++ একটি মাঝারি স্তরের ভাষা বিবেচনা করতে পারে।
রাসেল বোরোগোভ

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

33

এটি আপনাকে "হুডের নীচে কী ঘটছে" এবং পয়েন্টারগুলি কীভাবে কাজ করে এবং সাধারণভাবে রেজিস্টার ভেরিয়েবল এবং আর্কিটেকচার (মেমরি বরাদ্দ এবং পরিচালনা, প্যারামিটার পাসিং (মান / রেফারেন্স দ্বারা) ইত্যাদি) এর আরও ভাল ধারণা দেয়।

সি দিয়ে দ্রুত উঁকি দেওয়ার জন্য এটি কেমন?

#include <stdio.h>

main()
{
  puts("Hello World.");
  return(0);
}

সংকলন gcc -S so.cএবং এর মধ্যে সমাবেশ আউটপুট এক নজরে দেখুন so.s:

 $ cat so.s

    .file   "so.c"
    .section    .rodata
.LC0:
    .string "Hello World."
    .text
.globl main
    .type   main, @function
main:
    pushl   %ebp
    movl    %esp, %ebp
    andl    $-16, %esp
    subl    $16, %esp
    movl    $.LC0, (%esp)
    call    puts
    movl    $0, %eax
    leave
    ret
    .size   main, .-main
    .ident  "GCC: (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3"
    .section    .note.GNU-stack,"",@progbits

2
+1: ভাল টিপ! সি সংকলকটি কী করে তা দেখে আপনি অনেক কিছু শিখতে পারেন।
জর্জিও

8
... এসওএস ইচ্ছাকৃত ছিল? (সহায়তার জন্য কল, ইত্যাদি)
ইজকাটা

1
@ ইজকাটা হা হা .. ভাল, আমি তা খেয়ালও করিনি। আমি একটি প্রমিত আছে so.cStackoverflow প্রশ্নের জন্য ফাইল (মত আমি so.py, so.awkইত্যাদি) আউট জিনিস দ্রুত পরীক্ষা করা হবে। So.S .. :)
লেভন

9
আপনি যদি সংকলন করেন gcc -O -c -g -Wa,-ahl=so.s so.cআপনি সি কোডের প্রতিটি লাইনের জন্য সমাবেশ আউটপুট দেখতে পারেন। এটি কী চলছে তা বুঝতে কিছুটা সহজ করে তোলে।
ম্যাকি মেসার

1
হ্যাঁ, আউটপুট দীর্ঘ। 5:so.c5 নং লাইনের কোড খুঁজতে আপনি সন্ধান করতে পারেন so.c
ম্যাকি মেসার

30

আমি মনে করি আপনি যে উত্তরটি চেয়েছেন তা এখানে: http://www.codeproject.com/Articles/89460/ কেন- শিখুন- অসাধারণ- ভাষা

নিবন্ধ থেকে একটি উদ্ধৃতি:

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

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

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

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

অতিরিক্ত হিসাবে, আমি এই বইটি সুপারিশ করতাম কারণ এতে কম্পিউটার আর্কিটেকচারের একটি সহজ সংস্করণ রয়েছে: কম্পিউটিং সিস্টেমগুলির পরিচিতি: বিটস এবং গেটস থেকে সি এবং বায়ন্ডে, 2 / e ইয়েল এন পাট, টেক্সাস বিশ্ববিদ্যালয় অস্টিনে সঞ্জয় জে প্যাটেল, আরবানা / চ্যাম্পেইনে ইলিনয় বিশ্ববিদ্যালয়


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

+1 @ নোটকিলরোয়, লিঙ্কটির জন্য ধন্যবাদ এবং বিশেষত বইয়ের সুপারিশ
অ্যান্টনি

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

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

2
আমি বেশ একমত। একটি স্বয়ংক্রিয় অপ্টিমাইজার প্রায়শই দ্রুত সমাবেশ তৈরি করতে কোনও মানব প্রোগ্রামারকে পরাজিত করতে পারে।
ডেডএমজি

22

আমার নম্র মতামত, এটি খুব একটা সাহায্য করে না।

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

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

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

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


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

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

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

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

21

আপনি যে সিস্টেমে কাজ করছেন তার এক স্তরের 'গভীর' সাথে আপনার পরিচিত হওয়া উচিত। একসাথে খুব বেশি নিচে লাফালাফি করা খারাপ নয়, তবে এটি যেমন ইচ্ছা তেমন সহায়ক হতে পারে না।

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

জাভা প্রোগ্রামারটির জন্য, কিছু সি শিখতে আপনাকে মেমরি পরিচালনা, আর্গুমেন্টগুলি পাস করতে সহায়তা করবে। সি-তে কিছু বিস্তৃত জাভা গ্রন্থাগার লিখলে বোঝার উপায় হবে কখন সেটটির কোন প্রয়োগকরণ ব্যবহার করবেন (আপনি কি একটি হ্যাশ? বা গাছ চান?)। থ্রেডযুক্ত পরিবেশে চর * নিয়ে কাজ করা স্ট্রিংটি কেন অপরিবর্তনীয় তা বুঝতে সহায়তা করবে।

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


1
এক স্তর গভীর থেকে ডান। আমি একটি দম্পতির জন্য যেতে ঝোঁক, তবে ধরে নিচ্ছি যে একটি সি # প্রোগ্রামারের জন্য এমএসআইএল অধ্যয়নের তুলনায় x86 অ্যাসেমব্লিক জ্ঞানটি বিনিয়োগের পক্ষে মূল্যবান বলে মনে করছেন too ইউনিতে অ্যাসেম্বলি এবং সলিড স্টেট ফিজিক্স অধ্যয়নকারী কেউ হিসাবে, আমি মনে করি না যে গেট ডিজাইনের পদার্থবিজ্ঞানগুলি আমাকে ইলেক্ট্রনিক্সের একটি ডিগ্রি সহ স্নাতক পাশ করার পাশাপাশি কিছুটা সহায়তা করেছে।
মুহাম্মদ আলকারৌরী

@ মুহাম্মাদ আলকারৌরি আমি বর্তমান ফুটো, রানের দৈর্ঘ্য, প্রতিরোধ এবং সিস্টেমের উপর তাপের প্রভাব বোঝার পংক্তি ধরেই ভাবছিলাম। অন্তর্নিহিত 'কেন' ন্যূনতম ট্রেস বিচ্ছেদ এবং অপারেটিং সহনশীলতার নিয়মের চেয়ে বেশি সিদ্ধান্ত গ্রহণে সহায়তা করে তা বোঝা।

5

যেহেতু আপনি যে ভাষাগুলি জানেন সেগুলিতে আপনি সি বা সি ++ উল্লেখ করেন নি। আমি সমাবেশ সম্পর্কে চিন্তাভাবনা করার আগে তাদের দৃ well়ভাবে তাদের ভালভাবে শেখার পরামর্শ দেব recommend সি বা সি ++ পরিচালিত ভাষাগুলিতে সম্পূর্ণ স্বচ্ছ এমন সমস্ত মৌলিক ধারণা দেবে এবং আপনি এই পৃষ্ঠায় উল্লিখিত বেশিরভাগ ধারণাগুলি বুঝতে পারবেন যে আপনি বাস্তব বিশ্বের প্রকল্পগুলিতে ব্যবহার করতে পারেন এমন একটি গুরুত্বপূর্ণ ভাষা নিয়ে। এটি আপনার প্রোগ্রামিং দক্ষতায় একটি আসল যুক্ত মূল্য। দয়া করে সচেতন হন যে সমাবেশটি খুব নির্দিষ্ট ক্ষেত্রগুলিতে ব্যবহৃত হয় এবং এটি সি বা সি ++ এর মতো প্রায় কার্যকর নয়।

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

আপনি আরও নিচে যেতে চান, আপনি সমাবেশ শিখতে হবে। আপনি কীভাবে ভাষার প্রতিটি এবং প্রতিটি নির্মাণ নির্মিত তা জানতে চান। এটি তথ্যবহুল তবে এটি সম্পূর্ণ বিভিন্ন স্তরের জটিলতা।


5

যদি আপনি কোনও ভাষা ভালভাবে জানেন তবে আপনার কাছে প্রযুক্তি সম্পর্কে কমপক্ষে প্রাথমিক জ্ঞান থাকা উচিত বিমূর্তির এক স্তর কম।

কেন? যখন জিনিসগুলি ভুল হয়ে যায়, অন্তর্নিহিত যান্ত্রিকগুলির জ্ঞান অদ্ভুত সমস্যাগুলি ডিবাগ করা এবং স্বাভাবিকভাবেই আরও কার্যকর কোড লিখতে সহজ করে তোলে

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

এই ক্ষেত্রে আপনার প্রশ্নের উত্তর দেওয়ার জন্য, সমাবেশের জ্ঞানটি অভিজ্ঞ পাইথন বিকাশকারীকে সত্যই সহায়তা করতে পারে না (এটি বিমূর্তিতে অনেক পদক্ষেপ নেমে আসে - পাইথনে যা কিছু ঘটেছিল তার ফলে অনেকগুলি সমাবেশ নির্দেশাবলীর ফলাফল হয়)

.. তবে, আপনি যদি সি এর সাথে অভিজ্ঞ হন, তবে "পরবর্তী স্তর নীচে" (সমাবেশ) জেনে রাখা অবশ্যই কার্যকর হবে।

একইভাবে, আপনি যদি কফস্প্রিপ্ট ব্যবহার করছেন তবে জাভাস্ক্রিপ্টটি জানার জন্য এটি (খুব) কার্যকর। আপনি যদি ক্লোজার ব্যবহার করছেন তবে জাভা / জেভিএম জ্ঞান দরকারী।

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


3

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

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

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


3

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

উচ্চ-স্তরের ভাষার প্রতি ঝুঁকির এই মূল্যটি এখানে দেওয়া হ'ল: http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html


2

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

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


1

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

মতে এই জেফ অ্যাটউড ব্লগ পোস্টে , একটি গবেষণা রেফারেন্স যা, নিয়োগ বুঝতে প্রোগ্রামিং বুঝতে একটি গুরুত্বপূর্ণ বিষয়। লার্নার প্রোগ্রামাররা হয় বুঝতে পারে যে স্বরলিপিটি কেবল কম্পিউটার অনুসরণ করে এমন পদক্ষেপ এবং পদক্ষেপগুলির কারণগুলির দ্বারা প্রতিনিধিত্ব করে অথবা অন্যথায় গাণিতিক সমীকরণ ইত্যাদির বিভ্রান্তিকর উপমা ইত্যাদির দ্বারা চিরতরে বিভ্রান্ত হয় etc.

ঠিক আছে, যদি আপনি 6502 এসেম্বারার থেকে নিম্নলিখিতগুলি বোঝেন ...

LDA variable
CLC
ADC #1
STA variable

সত্যিই এটি কেবল পদক্ষেপ। তারপরে আপনি যখন কোনও এসাইনমেন্ট স্টেটমেন্টে এটি অনুবাদ করতে শিখবেন ...

variable = variable + 1;

গাণিতিক সমীকরণের জন্য আপনার বিভ্রান্তিমূলক উপমা প্রয়োজন নেই - এটির মানচিত্র তৈরি করার জন্য আপনার ইতিমধ্যে একটি সঠিক মানসিক মডেল রয়েছে।

সম্পাদনা করুন - অবশ্যই আপনি যে ব্যাখ্যাটি পেয়েছেন তা যদি LDA variableমূলত হয় ACCUMULATOR = variableযা আপনি কিছু টিউটোরিয়াল এবং রেফারেন্স থেকে পেয়ে যাচ্ছেন তবে আপনি যেখানে শুরু করেছিলেন সেখানে ফিরে এসেছেন এবং এটি কোনওরকমই কোনও সহায়তা নয়।

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

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


0

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

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

" এসএসইয়ের জন্য অনুকূলকরণ: একটি কেস স্টাডি " নিবন্ধটি দেখায় যে আপনি সমাবেশে গেলে কী করা সম্ভব। লেখক 100 টি চক্র / ভেক্টর থেকে 17 চক্র / ভেক্টর পর্যন্ত অ্যালগরিদমকে অনুকূলিত করে তোলেন।


1
লেখক সি ++ সংস্করণে কোনও ভেক্টর নির্দেশাবলী বা অভ্যন্তরীণতা ব্যবহার করেন নি। এসএসই কোড লেখার জন্য আপনার এসেম্বলারের দরকার নেই।
gnasher729

@ gnasher729 হ্যাঁ, আপনার দরকার নেই। তবে সমাবেশ সহ, প্রোগ্রামটি আরও দ্রুত চলতে পারে। একজন মানুষ সর্বোপরি স্মার্ট হয়ে সংকলক হতে পারে (বিরল ক্ষেত্রে)।
BЈовић

0

অ্যাসেমব্লিতে লেখা আপনার গতির যাদু বৃদ্ধি দেয় না কারণ বিশদ পরিমাণ (নিবন্ধকরণ বরাদ্দ ইত্যাদি) কারণে আপনি সম্ভবত সবচেয়ে তুচ্ছ অ্যালগরিদম লিখবেন।

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

প্রসেসর কেন বুঝবেন? এটি আপনাকে কী হতে চলেছে তা আরও অনেক বেশি বোঝার সুযোগ দিতে পারে। ধরা যাক আপনি ম্যাট্রিক্স গুণকে নিরীহ উপায়ে লিখুন:

for i from 0 to N
    for j from 0 to N
        for k from 0 to N
            A[i][j] += B[i][k] + C[k][j]

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

তবে আপনি কিছু লাইন উল্টাতে পারেন এবং যাদুতে কার্য সম্পাদন করতে পারেন (কেন? কেন আমি এটিকে 'হোম ওয়ার্ক' হিসাবে রেখেছি) - আইআইআরসি বড় ম্যাট্রিকের জন্য বিভিন্ন কারণের উপর নির্ভর করে এটি এমনকি 10x হতে পারে।

for i from 0 to N
    for k from 0 to N
        for j from 0 to N
            A[i][j] += B[i][k] + C[k][j]

এটি বলেছিল - কম্পাইলাররা এটি করতে সক্ষম হয়ে কাজ করছে ( জিসিসির জন্য গ্রাফাইট এবং এলএলভিএম ব্যবহার করে যে কোনও কিছুতে পলি )। এমনকি তারা এটিকে রূপান্তর করতেও সক্ষম (দুঃখিত - আমি স্মৃতি থেকে ব্লক লিখছি):

for i from 0 to N
    for K from 0 to N/n
        for J from 0 to N/n
            for kk from 0 to n
                for jj from 0 to n
                    k = K*n + kk
                    j = J*n + jj
                    A[i][j] += B[i][k] + C[k][j]

সংক্ষিপ্তসার হিসাবে - কোনও অ্যাসেমব্লির বেসিকগুলি জানার ফলে আপনি প্রসেসরের ডিজাইন থেকে বিভিন্ন 'বিশদ' খনন করতে পারবেন যা আপনাকে দ্রুত প্রোগ্রাম লেখার অনুমতি দেয়। RISC / CISC বা VLIW / ভেক্টর প্রসেসর / সিমডি / ... আর্কিটেকচারের মধ্যে পার্থক্য জানা ভাল হতে পারে know তবে আমি x86 দিয়ে শুরু করব না কারণ এগুলি বেশ জটিল হতে পারে (সম্ভবত এআরএমও খুব বেশি) - একটি রেজিস্টার কী তা জেনে রাখা ইত্যাদি আইএমএইচও শুরু করার পক্ষে যথেষ্ট।


আমি এটি আকর্ষণীয় মনে করি যে আপনি বেশ কয়েকটি কোডের নমুনা সরবরাহ করেছেন তবে সেগুলির কোনওটিও সমাবেশের ভাষায় নেই in
রবার্ট হার্ভে

-1

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


-2

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

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

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


-3

আমি অ্যালগরিদম শেখার পরামর্শ দেব: বাছাই, লিঙ্কযুক্ত তালিকাগুলি, বাইনারি গাছ, হ্যাশিং ইত্যাদি

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

অবশেষে যদি আপনাকে এসেম্বলার শিখতে হয় তবে এটিএম এর মতো সহজ একটি শিখতে হবে (এটি x86 এর চেয়ে প্রায় 4 গুণ বেশি ডিভাইসে ব্যবহৃত হয়)।


-8

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

ভাষার নকশা সিপিইউ যেভাবে কাজ করে তা থেকেই উদ্ভূত। নিম্ন স্তরের প্রোগ্রামগুলিতে বেশি, উচ্চ স্তরের প্রোগ্রামগুলিতে কম।

আমি এ কথাটি বলে শেষ করব যে এটি কেবল আপনাকে সামান্য এসেম্বলারই নয়, সিপিইউ আর্কিটেকচার সম্পর্কেও জানতে হবে যা আপনি এসেম্বলার শিখার মাধ্যমে শিখেন।

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

String a = "X";
String b = "X";
if(a==b)  
    return true;

আপনি যদি সামান্য এসেম্বলারকে জানতেন তবে আপনি সর্বদা জানতেন যে এটি কোনও পয়েন্টার ভেরিয়েবলের সংখ্যা বনাম কোনও স্মৃতি অবস্থানের বিষয়বস্তু নয় that অবস্থানটিতে "পয়েন্ট" করে।

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

যদি আপনি এখন এটির স্পষ্টত কী ঘটছে তা একত্রিত করেন, তবে এটি ব্যাখ্যা করা এত জটিল না যে বেশিরভাগ লেখক কেবল আপনাকে একটি ধার্মিক মিথ্যা দেয়।

অবশ্যই এগুলির সূত্রগুলি সূক্ষ্ম তবে পরে আপনাকে সত্যিকারের সমস্যায় ফেলতে পারে। যদি আপনি অ্যাসেম্বলারকে জানেন তবে এটি একটি নন-ইস্যু, যদি না হয় তবে আপনি দীর্ঘক্ষণ ডিবাগিংয়ের জন্য রয়েছেন।


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

6
জাভা সম্পর্কে আপনি যে একক জিনিস দাবি করেন তাও ভুল। String a = "X"; String b = "X"; if( a==b) return true;যা দিয়ে শুরু করা আসলে সংকলকটি == trueবলে String interningএমন কোনও কারণে ঘটে does অন্যান্য সমস্ত জাভা বিবৃতিও ভুল। জাভা পয়েন্টার আছে না, এটি রেফারেন্স যা রয়েছে না একই জিনিস। এবং এর কোনওটিরই কোনও ফ্যাশনে এসেম্বলারের সাথে কোনও সম্পর্ক নেই। জাভা আদিম মানের পাশাপাশি মান অনুসারে রেফারেন্স দেয়। জাভাতে পয়েন্টার নেই তাই এটি কোনও কিছু দিয়ে তাদের পাস করতে পারে না। আবার এএসএম জানার ক্ষেত্রে সমস্ত অপ্রাসঙ্গিক।

আমি সবসময় ভেবেছিলাম উচ্চ-স্তরের ভাষাগুলি অবজেক্ট (মেশিন কোড) বা সিউডো-কোডে সংকলিত হয়েছে, এএসএম-তে নয়।
ফ্রাঙ্ক আর

@ ফ্র্যাঙ্ক কম্পিউটারটি সঠিক, তবে মেশিন কোডটি ম্যাপ 1: 1 কে অ্যাসেমব্লিং নির্দেশাবলীতে বাইট করে, তাই আপনি খুব সহজেই কোনও কোড অবজেক্ট এবং এএসএম (
পচন

2
@ ফ্র্যাঙ্ক কম্পিউটারটি শেষ বার যখন দেখলাম জিসিসিটি সি / সি ++ / ফোর্টরান / জাভা / অ্যাডা / ইত্যাদি সংকলিত অভ্যন্তরীণ বাইট কোড এবং সংস্থাপকের অভ্যন্তরীণ বাইট কোডে সংকলিত হয়েছে। এরপরে এটি মেশিন কোডে রূপান্তর করতে এই এসেম্বলার কোডটি একটি এসেম্বলারের কাছে প্রেরণ করে।
ctrl-alt-delor 21
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.