ফ্রেম পয়েন্টার ব্যাখ্যা


28

ইন সমাবেশ MIPS , সেখানে স্ট্যাকের পয়েন্টার একটি খাতা, এবং ফ্রেম পয়েন্টার জন্য আরেকটি রেজিস্টার কর হয়। ফ্রেম পয়েন্টার কী এবং এর উদ্দেশ্য কী? এটি স্ট্যাক পয়েন্টার থেকে কীভাবে আলাদা?


1
আপনি ইতিমধ্যে কোন গবেষণা করেছেন - এবং শর্তগুলির সাথে আপনার পরিচিতি কী? এটি কোন সিস্টেমের জন্য (বিভিন্ন সিস্টেমে বিভিন্ন পরিভাষা রয়েছে)?

আমি কেবল ফ্রেম পয়েন্টার (মিপস অ্যাসেমব্লী) এর সাথে পরিচিত হতে চাই। আমি বুঝতে পারি না এটি কীভাবে সাহায্য করে, কেন আমাদের এটি দরকার? অনেক ধন্যবাদ
qwaserdftyghuijkiii

উত্তর:


44

এমআইপিএস সমাবেশে, স্ট্যাক পয়েন্টারটি স্ট্যাকের শীর্ষে নির্দেশ করে। আপনি যখন স্ট্যাকের জন্য স্থান বরাদ্দ করেন, স্ট্যাক পয়েন্টার ($ স্প) ফ্রি মেমরিটিতে নির্দেশ করে।

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

যখন পদ্ধতিটি শুরু হয়, তখন কোনও পরামিতি অফসেটে থাকতে পারে 16($sp)। তবে, ভেরিয়েবলগুলি স্ট্যাকের উপর স্থাপন করা হওয়ায়, স্ট্যাক পয়েন্টারটি সরানো হয় এবং একই পরামিতিটি এখন 24($sp)পরিবর্তে অবস্থিত হতে পারে । এটি কোডটিকে কিছুটা বিভ্রান্ত করতে পারে।

ফ্রেম পয়েন্টার ($ fp) স্ট্যাক ফ্রেমের শুরুতে নির্দেশ করে এবং সাব্রোটাইন কলের সময়কালের জন্য সরানো হয় না। এটি স্ট্যাক ফ্রেমের গোড়ায় নির্দেশ করে এবং সাব্রোটিনে যে পরামিতিগুলি প্রবেশ করা হয় তা ফ্রেম পয়েন্টারটির সাথে সম্পর্কিত স্থির স্থানে থাকে।

বুঝতে পারুন যে ফ্রেম পয়েন্টারটি সাব্রোটিন কলগুলি সংশোধন করে পুনরায় সংরক্ষণ করতে হবে।

আরও পড়া:


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

1
@ জোনাথন এমআইপিএস এই 32 টি রেজিস্টারের মধ্যে $ 0 ছিল 0% reserved সংরক্ষিত ছিল, $ v0 এবং $ v1 ফাংশন কলগুলির রিটার্ন মানের জন্য ছিল, $ a0 - 3 a3 ফাংশন প্যারামিটার ছিল, $ t0 - $ t9 অস্থায়ী ছিল (কলার সংরক্ষণ করা) , $ s0 - 7 s7 সংরক্ষণ করা হয়েছিল, এবং $ gp, $ sp, $ fp, এবং $ ra সিস্টেম নিজেই ব্যবহার করেছে। সব মিলিয়ে, কেবলমাত্র 24 টি সাধারণ উদ্দেশ্য রেজিস্টার এবং যদি আপনি ব্যবহার করতে চান তবে ওভারহেড ব্যয়কারীদের মধ্যে কিছু ছিল। আপনি সাধারণত $ টি নিবন্ধগুলি (10) ব্যবহার করেন। এটি ইটানিয়ামের সাথে তুলনা করুন যার 128 টি রেজিস্টার রয়েছে। এমআইপিএসে 35 টি প্যারামিটার সহ একটি ফাংশন কল করা, আপনি সম্ভবত সেগুলি সমস্ত স্ট্যাকের উপরে রাখবেন।

@ জোনাথন আমি এই মন্তব্যটির দিকেও ইঙ্গিত করব : "এএমডি বুলডোজার: 96 ফিজিক্যাল জিপিআর, ইনটেল স্যান্ডি ব্রিজ: 160 ফিজিক্যাল জিপিআর, ইন্টেল হাসওয়েল: 168 ফিজিক্যাল জিপিআর"। একাধিক কোর মেশিনের সাথে জিনিসগুলি মজার হয়। স্পার্কে 160 টি রেজিস্ট্রার ছিল । আমি আপনাকে উইন্ডোটি রেজিস্ট্রেশন করতেও নির্দেশ করব যা এমআইপিএসের ডিজাইন দর্শনের কিছুতে গিয়েছিল যার সমকালীনদের অর্ধেক নিবন্ধ রয়েছে।

তাহলে, %ebpx86 কলিং-কনভেনশনে 'বেস পয়েন্টার' রেজিস্ট্রারের প্রচলিত ব্যবহারের মতোই এটি একই জিনিস ? (আমি এই সমস্ত কিছুর জন্য নতুন, তবে এটি MOV 8(%ebp), %eax
স্টাথ

লাইনটি এর Realize that the frame pointer will need to be stored and restored with subroutine calls that modify it.অর্থ কী তা পুরোপুরি পরিষ্কার নয়
যাদানে ২
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.