ورود

View Full Version : تقسيم يه عدد 32 بيتي بر عدد 10==> l (dx:ax)/10



mah.yar
شنبه 25 خرداد 1387, 07:54 صبح
وقتي دو عدد 16بيتي رو با هم ضرب ميكنم باالطبع جواب حاصل كه يه عدد 32 بيتي ميشه در ثباتهاي DX:AX قرار ميگيره. اما براي چاپ اين عدد 32 بيتي بايد از بالينري تبديل به كد اسكي بشه و... اما وقتي اين عدد 32 بيتي DX:AX تقسيم بر عددCX=10 ميشه به خاطر اينكه خارج قسمت هم يه عدد 32 بيتي ميشه و تو AX جا نميشه برنامه پيام Divide overflow ميده.





آيا نكته يا روش خاصي براي اينكار وجود داره؟


با تشكر

hoax3r
شنبه 25 خرداد 1387, 17:32 عصر
سلام

وقتی مقسوم علیه برابر یک کلمه هست یعنی CX = 10. مقدارش باید بزرگتر از DX یعنی کلمه سمت چپ مقسوم باشد.
برای همین برنامه شما اون اررور رو میده

خوب تو این مواقع که محدودیت تقسیم هست باید خودتون الگوریتمی بسازید که عمل تقسیم رو انجام بده
البته اگه شما فقط بخواین عدد رو به کد اسکی تبدیل کنید بجز تقسیم احتمالا راههای دیگه میتونید پیدا کنید.

اگه برنامه شما قرار بصورت فایل EXE باشه دیگه نیازی به استفاده از دستور ORG نیست. این دستور فقط برای فایل COM. هست

شاد باشید

mah.yar
شنبه 25 خرداد 1387, 20:11 عصر
با اين تفاسير بايد به دنبال راه حل يا همون الگوريتمي باشم كه بتونم بدون عمل تقسيم بر 10، رقم هاي يكان و دهگان و ... عدد 32 بيتي رو بدست بيارم.

hoax3r
شنبه 25 خرداد 1387, 23:26 عصر
یه راهایی پیدا کردم
با تقسیم : کل رشته رو تو یه متغییر بریزی بعد از اون متغییر بایت به بایت بریزی تو یک ثبات و اینجوری چون یک بایت
داریم میتونی یا با تقسیم یا راهای دیگه رقمها رو جدا کنی و ...

بدون تقسیم : میتوینی عدد رو از نظر باینری مورد برسی قرار بدی
به این شکل که عددی مثل 6AE9BC بیای موقعیت اولین بیت از سمت چپ رو برسی کنی
اگه یک بود طبق جدول زیر مقدارشو حساب کنی ( توانها رو با دستور shl میتونی محاسبه کنی)



1 = 2 ^ 0 = 1
10 = 2 ^ 1 = 2
100 = 2 ^ 2 = 4
1000 = 2 ^ 3 = 8
10000 = 2 ^ 4 = 16
...
...

مثلا 5^2 اینجوری میشه، 5 به عنوان توان هست،اون ثباتی که مقدار توش قرار میگیره رو 1 باید قرار بدی



mov eax, 1
shl eax, 5


برای تمام بیتهایی که یک هستن اینکارو میکنی بعد همرو جمع میزی، از دستور BSR هم میتونی استفاده کنی ،
اگه محدودیت استفاده از ثباتهای 32 بیتی نداری این روش میتونه مفید باشه

بخاطر انعطاف زیاد اسمبلی احتمالا راه های بیشتری میشه پیدا کرد. فعلا همینا به ذهنم میرسه اگه نخوایم خودمون رو دگیر الگوریتم تقسیم کنیم

شاد باشید

mah.yar
یک شنبه 26 خرداد 1387, 08:51 صبح
ممنون
ولي هضم اين الگوريتم و پياده كردنش سخته