نحوه جابه جایی رجیستر ها در یک Dword

سوالات مربوط به برنامه نویسی محصولات PLC را در این بخش مطرح کنید
ارسال پست
keeia
کاربر تازه وارد
کاربر تازه وارد
پست: 15
تاریخ عضویت: 20 می 2023, 17:09
محل اقامت: مشهد

نحوه جابه جایی رجیستر ها در یک Dword

پست توسط keeia »

با سلام و احترام
با توجه به اینکه دستور swap باعث جابه جایی همزمان رجیستر ها و همچنین بایت ها می‌شود، اگر لازم باشد که فقط رجیستر ها را جابه جا کنیم پیشنهاد شما چیست.
مثلا 4abc23de پس از دستور swap برابر با de23bc4a می‌شود
که بنده باید فقط رجیسترها را جابه جا کنم که 23de4abc بشود
بنده از طریق تقسیم بر 65536 و همچنین دستور mod مانده گیری بر 65535 به نتیجه رسیدم که راه حلی طولانی هست
لطفا اگه راه حل بهتری هست پیشنها دهید

با تشکر
آواتار کاربر
mahdi.faani
مدیر انجمن
مدیر انجمن
پست: 99
تاریخ عضویت: 14 می 2023, 14:39
محل اقامت: Tehran
تماس:

Re: نحوه جابه جایی رجیستر ها در یک Dword

پست توسط mahdi.faani »

عرض ادب و احترام
در اینگونه مواقع بهتر هست یک 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) 46 مرتبه دانلود شده
Capture.PNG
(5.74 KiB) هنوز دانلود نشده
Capture.PNG
(26.24 KiB) هنوز دانلود نشده
Capture.PNG
(9.05 KiB) هنوز دانلود نشده
Capture.PNG
(26.83 KiB) هنوز دانلود نشده
آموزش ارسال پست در انجمن : viewtopic.php?t=31
قوانین انجمن : viewtopic.php?t=23
ارسال پست