نمایش نتایج 1 تا 13 از 13

نام تاپیک: عدد اعشاری در emu8086

  1. #1

    Question عدد اعشاری در emu8086

    سلام
    من چطوری میتومنم از دستورات FPU در emu8086 برای اعداد ریاضی که اعشاری هستند استفاده کنم

  2. #2
    کاربر تازه وارد
    تاریخ عضویت
    آذر 1391
    محل زندگی
    Karaj
    پست
    52

    نقل قول: عدد اعشاری در emu8086

    emu8086 اعداد اعشاری رو ساپورت نمیکنه ( در حقیقت emu فقط دستورات 8086 رو ساپورت میکنه ولی اعداد اعشاری جز دستورات 8087 هستند ) باید از یک اسمبلر دیگه استفاده کنید

  3. #3

    نقل قول: عدد اعشاری در emu8086

    نقل قول نوشته شده توسط topcoder مشاهده تاپیک
    emu8086 اعداد اعشاری رو ساپورت نمیکنه ( در حقیقت emu فقط دستورات 8086 رو ساپورت میکنه ولی اعداد اعشاری جز دستورات 8087 هستند ) باید از یک اسمبلر دیگه استفاده کنید
    کامپایلر NASM چی (نسخه 16 بیت) من فقط باید با همین دوتا کامپایلر استفاده کنم
    یعنی استاد این طوری گفته
    من چطوری میتونم این کار را انجام بدم

  4. #4

    نقل قول: عدد اعشاری در emu8086

    پس این کد Float که در examples های emu8086 هست چی؟ این چکار انجام میده
    و همچنین این و این کد که مربوط به اعشاری هست.البته از هیچ کدام نتونستم استفاده کنم

  5. #5
    کاربر تازه وارد
    تاریخ عضویت
    آذر 1391
    محل زندگی
    Karaj
    پست
    52

    نقل قول: عدد اعشاری در emu8086

    نقل قول نوشته شده توسط Collector مشاهده تاپیک
    کامپایلر NASM چی (نسخه 16 بیت) من فقط باید با همین دوتا کامپایلر استفاده کنم
    یعنی استاد این طوری گفته
    من چطوری میتونم این کار را انجام بدم
    با NASM میشه ( مطمئن نیستم ولی چون با MASM میشه حتما با اینم میشه )
    اینکه گفتم ساپورت نمیکنه اینه که یه دستور خاص برای محاسبه دو عدد اعشاری نداره
    fadd هست تو 8087 که میاد دوتا floating point رو باهم جمع میکنه
    هرجا هم که دیدی عدد اعشاری رو داره روش عملیات انجام میده در emu
    کاری که میکنه اینه که وقتی به دات رسید ( DOT ) اونو ذخیره نمیکنه و ایندکس دات رو یه جا ذخیره میکنه و ادامه عدد رو میگیره بعد عملیاتو روش انجام میده اخرشم میاد اون دات رو جای مناسب قرار میده

    یعنی تو emu چیزی مثل اینو 20.1 , 10.4 رو جمع کنی باهم اول باید بشه 201 , 104 بعد اینارو جمع کنی
    بعدشم بیایی جای مناسب دات رو پیدا کنی

  6. #6

    نقل قول: عدد اعشاری در emu8086

    الان من عدد را بدون اعشار محاسبه کردم و نتیجه را داخل یک متغییر قرار دادم.
    من چطوری میتونم دات را در جای مناسب بذارم
    مثلا برای جمع یا ضرب توجه کنید
    در مورد با کار با رشته که چطوری بین دو تا عدد یک دات بگذارم را نیز راهنمایی بدید

    12.6 + 16.9
    int:295
    float:29.5
    ==============================================
    12.6 * 16.9
    int:21294
    float:212.94
    آخرین ویرایش به وسیله Collector : دوشنبه 13 خرداد 1392 در 08:32 صبح

  7. #7
    کاربر تازه وارد
    تاریخ عضویت
    آذر 1391
    محل زندگی
    Karaj
    پست
    52

    نقل قول: عدد اعشاری در emu8086

    اینکه چجوری دات رو پیدا کنید یه متغییر میزارید جای دات اول و یه متغییر هم میزارید جای دات دوم رو پیدا میکنید ( پیدا کردنش هم یا همون موقع که کاربر رشته رو وارد میکنه یا اینکه پس از اینکه رشته رو وارد کرد میگردید پیداش میکنید ) بعد حالا اخرش بسته به اینکه دارید ضرب یا جمع یا غیره رو انجام میدید میایید جای دات رو پیدا میکنید
    مثلا برای ضرب محل دات میشه : ایندکس دات اول + ایندکس دات دوم که تو مثالی که شما زدین میشه 1 + 1 = 2 از انتها !!!
    این لینک رو ببینید فکر میکنم بهتون کمک کنه هرچند که باگ داره ولی تو مفهوم فکر کنم راه گشا باشه براتون :)

  8. #8

    نقل قول: عدد اعشاری در emu8086

    برای ضرب که روشن شده است من اون لینک را نگاه کردم اما برای + - / هنوز متوجه نشدم که جای دات کجاست
    آخرین ویرایش به وسیله Collector : سه شنبه 14 خرداد 1392 در 08:53 صبح

  9. #9
    کاربر تازه وارد
    تاریخ عضویت
    آذر 1391
    محل زندگی
    Karaj
    پست
    52

    نقل قول: عدد اعشاری در emu8086

    جای مناسبه تو جمع میشه : مکان دات اول و مکان دات دوم رو مقایسه میکنی هرکدوم که بزرگتر بود میشه محل دات در رشته نهایی ( حال اینجا ممکنه بعضی جاها به این بربخوری که طول رشته بعد از ممیز برای هر دو یکسان نباشه یعنی 101.2 رو با 10.21 جمع کنی الگوریتمی که گفتم دیگه جواب نمیده باید عددی که ایندکس دات کوچکتری داره رو ضرب در 10 کنی تا جایی که طول رشته بعد از دات ها باهم برابر بشن یعنی تو مثالی که زدم میشه 10.21 و 101.20 حالا باز مثل قبل دات رو حذف کن جمع رو انجام بده محل دات هم میشه محل دات بزرگتر )
    تفریق و تقسیم هم مشابه همین حالته با یکم تفاوت های جزمی

  10. #10

    نقل قول: عدد اعشاری در emu8086

    در مورد منها که گفتید مشابه جمع هست. ولی الان مشخص نیست که کجا باید دات بزارم
    46.6 = 144.6 - 191.5
    176.9 = 14.6 - 191.5
    و یا در مثال زیر که صحیح و اعشاری آن هیچ ربطی به هم ندارند که بخواهیم از دات استفاده کنیم
    2.41 - 642.7
    int:6186
    float:640.29
    و همچنین در مورد با این ضرب که در مثال زیر تا ضرب در 7 درست کار میکند ولی از آن بیشتر خیر
    87.50 = 7 * 12.5
    100 = 10.00 = 8 * 12.5
    در مورد با تقسیم مثلا 5/2 که میشود 2.5 من چطوری باید قسمت اعشار را بدست آوریم؟
    آخرین ویرایش به وسیله Collector : سه شنبه 14 خرداد 1392 در 20:56 عصر

  11. #11
    کاربر تازه وارد
    تاریخ عضویت
    آذر 1391
    محل زندگی
    Karaj
    پست
    52

    نقل قول: عدد اعشاری در emu8086

    191.5-144.6 ====> 1915-1446 = 469
    حالا محل دات چون تعداد ارقام بعد از اعشار هر دو یکسان است ( برای هر دو یک رقم بعد از اعشار داریم .6 , .5 ) میشه محل محل دات یکی از اونا یعنی 1
    642.7-2.41
    حالا چون تو این یکی تعداد ارقام بعد از اعشار یکی نیست ( 0.41 , .7 ) اون رقمی که تعداد اعشارش کمتره رو صفر به انتهاش اضافه میکنی یعنی .7 رو صفر به انتهاش اضافه میکنی میشه .70 حالا باز مثل قبل دات ها رو حذف میکنی و نتیجه رو حساب میکنی
    642.70-2.41 ====> 64029= 64270 - 241 =====> چون دو رقم بعد از اعشار داریم میشه 640.29
    در مورد ضرب هم کاملا درسته :|
    12.5 * 8 ==> 125*8 ==> 1000 چون رقم اول اعشار نداره و رقم دومت یک رقم اعشار داره پس میشه یک 1+0 یعنی یک رقم اعشار که نتیجه میشه 100.0


    درتقسیم هم نتیجه باقیمانده تو ah یا dx ذخیره میشه دیگه
    پس ah یا dx ( بسته به نوع پیاده سازی ) در 10 ضربش میکنی و یک شمارشگر هم میزاری ببینی چند بار در 10 ضرب میکنی عددتو و تعداد رقم های اعشارت میشه تعداد ضرب هایی که در 10 انجام دادی
    مثلا 5/2
    باقیمانده در ah ذخیره میشه 1 هست
    یکبار در 10 ضرب میکنی میشه 10
    حالا 10 رو تقسیم بر 2 میکنی چون ah برابر صفر میشه ( یعنی باقیمانده برابر صفر میشه ) دیگه عملیات تموم میشه و چون یکبار در 10 ضرب شده پس میشه یک رقم اعشار

  12. #12

    Question نقل قول: عدد اعشاری در emu8086

    مشکل تقسیم حل شد
    الان یک سوال داشتم برای عملیات روی اعداد منفی
    اگر خروجی منفی شد میتونم تشخیص و نمایش بدم ولی نمیدونم چطوری عملیات روی دو تا عدد منفی انجام بدم
    یعنی اگر اولین کاراکتر منفی بود چی چیزی را باید تغییر بدم
    آخرین ویرایش به وسیله Collector : پنج شنبه 16 خرداد 1392 در 16:13 عصر

  13. #13
    کاربر تازه وارد
    تاریخ عضویت
    آذر 1391
    محل زندگی
    Karaj
    پست
    52

    نقل قول: عدد اعشاری در emu8086

    برای اینکار دوتا متغییر اضافی باید تعریف کنی یکی xSign یکی ySign که یکیش واسه علامت x یکیش برای علامت y هست
    حالا درصورتی که عددی که داری وارد میکنی با - منفی شروع شد xSign رو 1 قرار میدی ( درحالت پیش فرض صفر میزاری که یعنی مثبته )
    خوب حالا 4تا حالت رو چک میکنی
    اولی مثبت دومی مثبت
    اولی مثبت دومی منفی
    اولی منفی دومی مثبت
    اولی منفی دومی منفی
    حالا عملیاتتو با توجه به اینا بدون در نظر گرفتن علامت انجام میدی و در اخر علامت رو تاثیر میدی

تاپیک های مشابه

  1. معکوس عدد اعشاری در زبان C
    نوشته شده توسط minaaaa در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 4
    آخرین پست: شنبه 24 فروردین 1387, 11:59 صبح
  2. تبدیل عدد اعشاری به پیکسل برای رسم اشکال
    نوشته شده توسط alireza_dpn در بخش برنامه نویسی در Delphi
    پاسخ: 4
    آخرین پست: جمعه 13 آبان 1384, 01:46 صبح
  3. برعکس کردن یک عدد اعشاری!
    نوشته شده توسط navid_R در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 3
    آخرین پست: سه شنبه 17 خرداد 1384, 19:52 عصر
  4. جذر عدد اعشاری در زبانc
    نوشته شده توسط minaaaa در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 0
    آخرین پست: پنج شنبه 05 آذر 1383, 11:04 صبح
  5. گرد کردن یک عدد اعشاری
    نوشته شده توسط Microsoft در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 3
    آخرین پست: جمعه 24 مرداد 1382, 15:09 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •