ইন ইন্টেল সারগ্রন্থ এর x86-64 'ট্যুর , আমি পড়তে
সম্ভবত সবচেয়ে অবাক করা তথ্য হ'ল কোনও নির্দেশ যেমন
MOV EAX, EBX
স্বয়ংক্রিয়ভাবেRAX
নিবন্ধের উপরের 32 বিটগুলিকে শূন্য করে ।
একই উত্সে উদ্ধৃত ইনটেল ডকুমেন্টেশন (৩.৪.১.১ ম্যানুয়াল বেসিক আর্কিটেকচারে -৪-বিট মোডে সাধারণ-উদ্দেশ্য রেজিস্টারস) আমাদের বলে:
- গন্তব্য সাধারণ-উদ্দেশ্য রেজিস্ট্রারে destination৪-বিট অপারেশনগুলি একটি -৪-বিটের ফলাফল উত্পন্ন করে।
- 32-বিট অপারেশনগুলি 32-বিট ফলাফল উত্পন্ন করে, গন্তব্য সাধারণ-উদ্দেশ্য রেজিস্ট্রারে শূন্য-প্রসারিত 64৪-বিটের ফলাফল পর্যন্ত।
- 8-বিট এবং 16-বিট অপারেশনগুলি একটি 8-বিট বা 16-বিট ফলাফল উত্পন্ন করে। গন্তব্য সাধারণ-উদ্দেশ্য নিবন্ধের উপরের 56 বিট বা 48 বিট (যথাক্রমে) অপারেশন দ্বারা পরিবর্তন করা হয় না। যদি 8-বিট বা 16-বিটের ক্রিয়াকলাপের ফলাফলটি 64-বিট ঠিকানা গণনার জন্য উদ্দিষ্ট হয় তবে স্পষ্টভাবে সম্পূর্ণ 64-বিটগুলিতে নিবন্ধকে সাইন ইন-প্রসারিত করুন।
X86-32 এবং x86-64 সমাবেশে, 16 বিট নির্দেশাবলী
mov ax, bx
এই ধরণের "অদ্ভুত" আচরণটি প্রদর্শন করবেন না যে ইক্সের উপরের শব্দটি শূন্য।
এইভাবে: এই আচরণটি চালু হওয়ার কারণ কী? প্রথম নজরে এটি অযৌক্তিক বলে মনে হচ্ছে (তবে কারণটি হতে পারে যে আমি x86-32 সমাবেশের স্ফূরণে অভ্যস্ত)।
r32
মার্জ হওয়ার পরিবর্তে উচ্চমাত্রায় 32-এর শূন্য করে। উদাহরণস্বরূপ, কিছু এসেমব্লাররা একটি আরএক্স সংরক্ষণ করে এর pmovmskb r64, xmm
সাথে প্রতিস্থাপন করবে pmovmskb r32, xmm
, কারণ 64 বিট গন্তব্য সংস্করণটি একই রকম আচরণ করে। যদিও ম্যানুয়ালটির অপারেশন বিভাগটি 32/64 বিট গন্তব্য এবং 64/128/256 বি উত্সের 6 টি সংমিশ্রণ পৃথকভাবে তালিকাবদ্ধ করে, r32 ফর্মের অন্তর্নিহিত শূন্য-এক্সটেনশানটি r64 ফর্মের সুস্পষ্ট শূন্য-বর্ধনের নকল করে। আমি এইচডাব্লু বাস্তবায়ন সম্পর্কে কৌতূহলী ...
xor eax,eax
বা xor r8d,r8d
শূন্য র্যাক্স বা আর 8 (রাক্সের জন্য একটি রেক্স উপসর্গ সংরক্ষণ করা, এবং সিলভারমন্টে 64৪-বিট এক্সওর এমনকি বিশেষভাবে পরিচালনা করা যায় না) সেরা উপায় way সম্পর্কিত: হাসওয়েল / স্কাইলেকে আংশিক নিবন্ধগুলি কীভাবে সম্পাদন করে? AL- কে রাকসের উপর মিথ্যা নির্ভরতা রয়েছে বলে মনে হয় এবং এএইচ অসঙ্গত