آیا Mov٪ esi ،٪ esi ممنوع است یا در x86-64 وجود ندارد؟

من در اظهار نظر در یکی از پرونده های هدر هسته لینوکس ، کمی گیج شده ام /x86/include/asm/nops.huesit1186109]. این بیان می کند که

<...> دستورالعمل های زیر در حالت 64 بیتی نیست ، برای حالت 64 بیتی به جای nop K8 یا P6 استفاده کنید
Movl٪ esi ،٪ esi
leal 0x00 (٪ esi) ،٪ esi
<...>

من حدس می زنم كه نویسنده به جای دستورالعمل های مونتاژ ، دستورالعمل های دستگاه (به ترتیب '89 F6' و '8D 76 00') را در آنجا ضمنی قرار داده باشد. از شرح LEA در دفترچه راهنمای Intel Software Developer Vol 2A چنین بر می آید که دستورالعمل دوم ( lea 0x00 (٪ rsi) ،٪ esi ) همان کار قبلی را انجام می دهد ، mov٪ esi،٪ esi .

بنابراین این س reducesال کاهش می یابد که آیا mov٪ esi،٪ esi در واقع ممنوعیت x86-64 است.

mov پرچم ها را تغییر نمی دهد. این نوع mov حافظه را نیز تغییر نمی دهد. به نظر می رسد ، اگر چیزی علاوه بر ٪ rip تغییر دهد ، باید ثبت های عمومی باشد. اما من هیچ سرنخی ندارم که چگونه می تواند محتوای ٪ rsi یا هر چیز دیگری را تغییر دهد. اگر نیمه پایینی یک ثبت نام عمومی را دستکاری کنید ، نیمه بالایی نباید تغییر کند؟

8
задан Eugene 11 July 2011 в 17:38
поделиться