PDA

View Full Version : نگهداری اعداد بزرگ در Assembly



Amir Oveisi
سه شنبه 21 آذر 1385, 14:29 عصر
سلام من میخواستم بدونم که چجوری میشه تو اسمب با اعداد بزرگ کار کرد؟
مثلا یه عدد چهار رقمی به توان یه عدد 4 رقمی دیگه برسه
ممنون میشم منو راهنمایی کنین

oVERfLOW
چهارشنبه 22 آذر 1385, 09:37 صبح
این جور محاسبات توسط پردازشگر و در نتیجه اسمبلی قابل انجام نیست
شما خودتون باید با کمک امکانات موجود اعداد رو توی حافظه نگهداری کنید و با کمک همون دستورات 32 یا 64 بیتی موجود خودتون اعمال لازم رو انجام بدید

یعنی باید یک نوع داده‌ی جدید ایجاد کنید و با دستوراتی (توابعی) که خودتون می‌نویسید محاسبات دلخواه رو روی اونا انجام بدید

مسلمه که سرعت کار چندین برابر پایین میاد
به همین دلیله که سعی می‌شه تمام محاسبات در مبنای قابل محاسبه برای پردازنده باشه.

Best Programmer
پنج شنبه 30 آذر 1385, 09:53 صبح
شما برای چه نوع پردازشگری می خواهید بنویسید؟ اگر از AMD64 یا EM64T پشتیبانی می کند می توانید از register های 64 بیتی استفاده کنید و اگر عدد شما بسیار بزرگ باشد بهتر هست از register های SSE استفاده کنید.

mahani
چهارشنبه 06 دی 1385, 22:46 عصر
استفاده از اسمبلرها و cpuهای جدیدتر مرهمی برای اینگونه مشکلات هست ولی راه حل کلی نیست.
به نظر من باید ببینی عدد بزرگت چجوری تولید میشه,اگر عدد بزرگت مثلا توسط کاربر و با گرفتن از keyboard تولید میشه خب کافیه با الگوریتمهای موجود عدد را در یک متغیر نگهداری کنی و بعدا از آن استفاده کنی
ولی در این مثال شما که توان است(چند ضرب متوالی) ممکن است عددی که بعد از چند ضرب بدست می آید آنقدر بزرگ شود که در یک word جا نگیرد و نتوان ضرب بعدی را در آن انجام داد پس باید در اینجا از الگوریتم ضرب دستی استفاده کنی یعنی مثلا اگر بخواهی عدد 4بایتی را در عدد 2بایتی ضرب کنی باید این کار را word به word و با استفاده از 2 عمل ضرب(MUL) انجام دهی

Amir Oveisi
جمعه 08 دی 1385, 01:45 صبح
خوب من تو پیاده کردن الگوریتم RSA نیاز دارم اینکارو بکنم
از کدوم الگوریتم ضرب استفاده کنم به نظر شما؟

mahani
یک شنبه 10 دی 1385, 18:41 عصر
برای اعداد Binary: باید عددت را که ممکن است چندین word باشد word به word ضرب کنی
مثلا: مقدار پرارزش عدد در DI و مقدار کم ارزش عدد در SI است و میخواهی عددت در مقداری که در رجیستر BP قرار دارد ضرب کنی


mov ax,si
mul bp
mov bx,ax
mov cx,dx
mov ax,di
mul bp
add ax,cx
adc dx,0


جواب نهایی در سه رجیستر (کم ارزش)DX,AX,BX(پر ارزش) میرود