ورود

View Full Version : سوال: ضرب 2مقدار 4بایتی ذر هم



mehkar
چهارشنبه 09 آذر 1390, 20:14 عصر
با عرض سلام خدمت اساتید محترم

استادمون پروژه ای داده خزاهش میکنم کمکم کنید . متن سوال پروژه به شرح زیر است:

برنامه ای بنویسید که یک مقدار 4 بایتی را در یک مقدار 4بایتی دیگر ضرب کند ونتیجه را ذر متغیر دیگر ذخیره کند؟
(بدون استفاده از حلقه)


تو رو خدا جوابم رو بدین.
باتشکر بی پایان

xman_1365_x
سه شنبه 15 آذر 1390, 08:51 صبح
برنامشو نوشتم ساده هست،راهنمایی میکنم
نیاز دارین به ضرب های 16*16 که حاصل میشه 32 بعد باید جمع کنید با حاصل و اگر کری دارین تاثیر دادن کری در کلمه بعد(البته نه به همین سادگی، نکته داره که بنویسید به مشکل خوردین با فکر کردن حل میشه ، جمع ها چیزی شبیه به ضرب روی کاغذ میشه!)
بعد حاصل چون دارین 32*32 رو انجام میدیم به 64 بیت نیاز داریم برای نگهداری حاصل
همین برنامه رو میشه بست داد نوع داده ای مثل big integer در C#‎4 نوشت!
البته برای نمایش حاصل به صورت باینری و هگز مشکلی نیست اما برای کاراکتر تقسیم به 10 کردن باید روی همه 64 بیت تاثیر بزاره! که خودش میشه یک پروسیجر دیگه
موفق باشی

majid1605
چهارشنبه 16 آذر 1390, 17:45 عصر
من این برنامه رو دیدم کنجکاو شدم حلش کنم ولی خب ما تازه کاریم و نیاز به کمک فراوان:لبخند:


a DD 23ff10
B DD 0012

mov AX,WORD PTR a
mov BX,WORD PTR b
mul BX

mov AX,WORD PTR a+2
mul BX

mov AX,WORD PTR a
mov BX,WORD PTR b+2
mul BX

mov AX,WORD PTR a+2
mul BX

من اول اومدم دوبایت اول رو ضرب در دوبایت عدد دوم کردم بعد هم دوبایت دوم عدد اول رو در دوبایت اول عدد دوم

بعد اومدم دوبایت دوم عدد دوم رو در عدد اول ضرب کردم
نمیدونم چقدرش درسته فقط چندتا سوال برام پیش اومده البته اگه تا جایی که اومدم درست باشه:لبخند:
mov AX,WORD PTR a
mov BX,WORD PTR b
mul BX
بعد از انجام این عملیات مقدار ضرب میره توی DX AX درسته ؟
همینطور بعد از این عملیات

mov AX,WORD PTR a+2
mul BX

به نظرم باید اولی رو قبلش یه جایی ذخیره کنم ولی نمیدونم کجا و چطور کلاً جوری که من رفتم 128 بیت می خوام؟:متعجب:

xman_1365_x
چهارشنبه 16 آذر 1390, 19:34 عصر
من این برنامه رو دیدم کنجکاو شدم
من هم به همین دلیل نوشتمش،اما تقسیم به 10 نتیجه هم جالبه،که بخوای تبدیل به اسکی کنی نمایش بدی،بعدش روی اون فکر کن!

نمیدونم چقدرش درسته فقط چندتا سوال برام پیش اومده البته اگه تا جایی که اومدم درست باشه
ضرب هاتون درسته، آفرین!

بعد از انجام این عملیات مقدار ضرب میره توی DX AX درسته ؟
بله! اما برای اینکه بدونید چرا باید دستورالعمل ضرب رو مطالعه کنید،کتاب زبان ماشین نیکمهر رو دانلود کنید

به نظرم باید اولی رو قبلش یه جایی ذخیره کنم ولی نمیدونم کجا و چطور کلاً جوری که من رفتم 128 بیت می خوام؟
بله دیگه بعد از هر ضرب باید در نتیجه حاصل قرار بدین نتیجه رو، همونطور که توی پست اول نوشتم جمع کردنش نیاز به کمی فکر داره که راهنمایی کردم مثل ضرب روی کاغذ که بعد از هر ضرب صفر میزاریم بعد جمع میکنیم!
نتیجه ضرب دو عدد 32*32 عددی 64 بیتی میشه، جمع دو عدد 32*32 هم 33 بیتی میشه، دستورالعمل جمع هم توی کتاب مذکور آموزش داده ، تعریف آدرس در حافظه برای نگهداری نتیجه هم 64 بیت در نظر بگیر براش(در جمعش باید حواستون به کری و طریقه جمع کلمه ها باشه)
موفق باشی