אסמבלי ---> X בשלישית

אסמבלי ---> X בשלישית

כתוב תת שגרה המקבלת בAL משתנה X ומחזירה בAX את הערך X בשלישית. הנח כי המספרים בX בשלישית לא יגיעו ל0FFFFH. על פניו התוכנית נראת פשוטה , מה יש לשים לב בפתרון שכזה??? צריך פשוט לעשות 3 פעמים MUL , הלא כן?
 

EETB

New member
יש לשם לב

אין מה לשים לב... אבל אם אתה עושה MUL לAL אז רק פעמים כי בפעם הראשונה אתה בעצם עושה AL*AL.. או שאפשר:
mov bl,al mov al,1 mul bl mul bl mul bl mov ax,bx​
כמובן אפשר לולאה אבל זה מספר קבוע אז זה לא משנה...
 

EETB

New member
צודק

לכן תעביר את המספר לעוד אוגר.. באופן עקרוני המספר המקסימלי שאתה יכול לקבל הוא 40 (שורש שלישי של 2בחזקת16). אז אחרי המכפלה הראשונה אתה צריך להכפיל באוגר אחר אז פשוט תעשה: mov bl,al mov bh,0 mul bl mul bx והנה נתפרה הבעיה
 

EETB

New member
כן

מספר מקסימלי יכול להיות 40 40*40 זה אוגר שלם אם המספר המקסימלי היה נמוך יותר והריבוע שלו היה נמוך מ-FF (256 אז לא היה צריך לדאוג.
 

EETB

New member
כן

40 בדצימיל 40*40*40-->64000 שזה הכי קרוב לFFFF שיכול להיות... כי אין לFFFF=65536 שורש שלישי.
 
למעלה