ইন ইন্টেল সারগ্রন্থ এর 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- কে রাকসের উপর মিথ্যা নির্ভরতা রয়েছে বলে মনে হয় এবং এএইচ অসঙ্গত