با سلام و احترام
با توجه به اینکه دستور swap باعث جابه جایی همزمان رجیستر ها و همچنین بایت ها میشود، اگر لازم باشد که فقط رجیستر ها را جابه جا کنیم پیشنهاد شما چیست.
مثلا 4abc23de پس از دستور swap برابر با de23bc4a میشود
که بنده باید فقط رجیسترها را جابه جا کنم که 23de4abc بشود
بنده از طریق تقسیم بر 65536 و همچنین دستور mod مانده گیری بر 65535 به نتیجه رسیدم که راه حلی طولانی هست
لطفا اگه راه حل بهتری هست پیشنها دهید
با تشکر
نحوه جابه جایی رجیستر ها در یک Dword
- mahdi.faani
- مدیر انجمن
- پست: 99
- تاریخ عضویت: 14 می 2023, 14:39
- محل اقامت: Tehran
- تماس:
Re: نحوه جابه جایی رجیستر ها در یک Dword
عرض ادب و احترام
در اینگونه مواقع بهتر هست یک FUNCTION یا همان FC را برای کاربرد های خودتان بنویسید و در طول برنامه از آن FC استفاده کنید.
راه حل اول:
یک فانکشن به نام SWAP_DW (Swap DWORD) نوشتم که داخل این فانکشن عدد ورودی 16 بیت به چپ و 16 بیت به راست شیفت داده می شود و سپس مقادیر حاصل از شیفت ورودی با هم OR شده و در خروجی قرار میگیرند. در این حالت مقدار تگ ورودی پس از اجرای فانکشن ثابت می ماند و نتیجه در یک تگ جدید قرار میگیرد.
کد برنامه:
![تصویر](https://intelart.ir/forum/download/file.php?mode=view&id=71)
برای استفاده از فانکشن ساخته شده به این شکل عمل کنید:
![تصویر](https://intelart.ir/forum/download/file.php?mode=view&id=72)
همانطور که مشاهده میکنید در هر نقطه ای از برنامه به سادگی با فراخوانی فانکشن SWAP_DW میتوانید عمل جابجایی WORD را انجام دهید.
راه حل دوم:
یک فانکشن به نام SWAP_IP (Swap In Place) نوشتم که داخل این فانکشن عدد ورودی 16 بیت به چپ و 16 بیت به راست شیفت داده می شود و سپس مقادیر حاصل از شیفت ورودی با هم OR شده اما اینبار نتیجه روی همان تگ ورودی نوشته میشود. در این حالت مقدار تگ ورودی پس از اجرای فانکشن تغییر میکند.
کد برنامه:
![تصویر](https://intelart.ir/forum/download/file.php?mode=view&id=73)
برای استفاده از فانکشن ساخته شده به این شکل عمل کنید:
![تصویر](https://intelart.ir/forum/download/file.php?mode=view&id=74)
همانطور که مشاهده میفرمایید در برنامه دوم به جای تعریف کردن یک تگ INPUT و یک تگ OUTPUT از یک تگ INOUT استفاده شده. تگ های INOUT به صورت Pass by Reference صدا زده می شوند، بنابراین طی برنامه امکان خواندن و نوشتن آن را به صورت همزمان به شما میدهند. دقت داشته باشید در این حالت مقدار تگ Data پس از فراخوانی فانکشن تغییر میکند.
فانکشن های نوشته شده در بالا در پیوست این پست با نام Functions.zip قرار دارند. پس از دانلود میتوانید آن ها را در برنامه خودتون Import و استفاده کنید.
در اینگونه مواقع بهتر هست یک FUNCTION یا همان FC را برای کاربرد های خودتان بنویسید و در طول برنامه از آن FC استفاده کنید.
راه حل اول:
یک فانکشن به نام SWAP_DW (Swap DWORD) نوشتم که داخل این فانکشن عدد ورودی 16 بیت به چپ و 16 بیت به راست شیفت داده می شود و سپس مقادیر حاصل از شیفت ورودی با هم OR شده و در خروجی قرار میگیرند. در این حالت مقدار تگ ورودی پس از اجرای فانکشن ثابت می ماند و نتیجه در یک تگ جدید قرار میگیرد.
کد برنامه:
برای استفاده از فانکشن ساخته شده به این شکل عمل کنید:
همانطور که مشاهده میکنید در هر نقطه ای از برنامه به سادگی با فراخوانی فانکشن SWAP_DW میتوانید عمل جابجایی WORD را انجام دهید.
راه حل دوم:
یک فانکشن به نام SWAP_IP (Swap In Place) نوشتم که داخل این فانکشن عدد ورودی 16 بیت به چپ و 16 بیت به راست شیفت داده می شود و سپس مقادیر حاصل از شیفت ورودی با هم OR شده اما اینبار نتیجه روی همان تگ ورودی نوشته میشود. در این حالت مقدار تگ ورودی پس از اجرای فانکشن تغییر میکند.
کد برنامه:
برای استفاده از فانکشن ساخته شده به این شکل عمل کنید:
همانطور که مشاهده میفرمایید در برنامه دوم به جای تعریف کردن یک تگ INPUT و یک تگ OUTPUT از یک تگ INOUT استفاده شده. تگ های INOUT به صورت Pass by Reference صدا زده می شوند، بنابراین طی برنامه امکان خواندن و نوشتن آن را به صورت همزمان به شما میدهند. دقت داشته باشید در این حالت مقدار تگ Data پس از فراخوانی فانکشن تغییر میکند.
فانکشن های نوشته شده در بالا در پیوست این پست با نام Functions.zip قرار دارند. پس از دانلود میتوانید آن ها را در برنامه خودتون Import و استفاده کنید.
- پیوستها
-
- Functions.zip
- (101.66 KiB) 32 مرتبه دانلود شده
-
- Capture.PNG
- (5.74 KiB) هنوز دانلود نشده
-
- Capture.PNG
- (26.24 KiB) هنوز دانلود نشده
-
- Capture.PNG
- (9.05 KiB) هنوز دانلود نشده
-
- Capture.PNG
- (26.83 KiB) هنوز دانلود نشده