Logo

רד-בורד: ארכיון

ראשי > תיכנות > אסמבלי, בעיה קטנה

09/09/2006 22:12:50 devil kide
מה המצב?תקשיבו, אני כותב בשביל הבית ספר פרוייקט באסמבלי, ואני כותב מחשבון כיס.
אחת מהפונקציות שצריכות להיות במחשבון היא "חילוק",וכאן נתקעתי בבעיה.

כתבתי פונקציה שתעשה את העבודה, הבעיה היא שהתוכנה מתאימה רק למספרים שלמים,ואני רוצה לדעת איך אפשר לעשות את זה שהתוכנה תוכל לעשות את זה למספרים שהתוצאה שלהם מכילה שארית, סגנון
קוד:4\3
התוכנית אמורה לרוץ בסביבת easycpu , והקלט כבר קיים באוגרים dh וdl .
בבקשה תעשו את זה בצורה כזו,למשל(ההסבר, כדי שאני אבין. קשה להבין קוד אסמבלי):
קוד:
in 2,al
mov bl,al
cmp bl,3
je bla
;מכניס לאוגר BL ערך דרך DL ומשווה אותו ל3.


שאלה שנייה:
אני מנסה לכתוב פונקציה שתעשה אחוזים,ונתקעתי בכמה בעיות,מישהו יכול לכתוב כזאת פונקציה(לא חייב, אני אנסה עכשיו גם,שוב).
09/09/2006 22:59:31 ziv
אתה יכול להציג את השבר שנשאר בעזרת מודולו.
כלומר להראות 5/3 = 1 + 2/3
או משהו בסגנון הזה(איך שתרצה לעצב את זה).
כי השבר שנשאר הוא סך הכל המודולו חלקי המחלק.[ההודעה נערכה על-ידי ziv ב-09/09/2006 23:02:14]
09/09/2006 23:02:03 devil kide
מודולו (imul שמכניס את הערך לax , נכון?!) לא מתאים לבעיה שלי, הפקודה הזו לא מתאימה לפרוייקט, אני עזרתי במונה ,וב JMP, שמחסיר כל פעם מ cl ,את ch עד שcl שווה-קטן מאפס.

עכשיו אם יש שבר זה עושה בעיות, יענו לא יודע איך אפשר להציג אותו.
09/09/2006 23:03:43 ziv
אני לא יודע איך לעשות שברים עשרונים בעזרת פקודות רגילות אבל אתה יכול להציג את המספר עם שברים לא עשרוניים(... שכחתי את השם)
09/09/2006 23:06:12 devil kide
איך?
תן פונקציה לדוגמא, בבקשה.
09/09/2006 23:13:13 ziv
אין לי כוח לכתוב באסמבלי אז אני רק אכתוב את הרעיון:
אתה מחלק a ב b ומקבל מספר שלם.
אתה מקבל את השבר שנשאר בעזרת מודולו ואז חילוק במכנה... כלומר תציג את התשובה בפורמט הזה:

קוד:
a / b = a/b + a mod b / b


הכוונה היא ש a/b בתוצאה הוא מספר שלם והחלק השני הוא הדגמה של השבר הנשאר.
אל תחלק באמת את המודולו במכנה... רק תראה את שני המספרים אחד חלקי השני...
קאפיש?[ההודעה נערכה על-ידי ziv ב-09/09/2006 23:14:24]
09/09/2006 23:16:47 devil kide
אני אנסה.

חשבתי על עוד משהו, אולי אם יש חילוק ויש שארית אז זה משפיע על אחד הדגלים? אם כן זה יכול מאוד לעזור לי (דגל C,נכון):).[ההודעה נערכה על-ידי devil kide ב-09/09/2006 23:17:10]
10/09/2006 08:10:50 devil kide
עוד משהו, אני רוצה לכתוב פונקציה שתעשה את הפעולה שורש,למישהו יש רעיון איך לבצע את זה?אם למישהו יש דוגמאת קוד בשפה עילית גם טוב, ננסה להבין אותה.תודה.
10/09/2006 10:15:18 coolz
מבחינה מתמטית אין כזה דבר פעולת שורש, פעולת שורש היא ההפך של פעולת חזקה. על מנת למצוא שורש אתה מחשב מספר של מה בריבוע יתן לי את המספר הזה.
לכן הדרך היחידה לחפש שורש היא לעשות ריצה של כל המספרים בריבוע
[למי שלא הבין, שאומרים שורש 16 תחשבו מה אתם עושים בראש, איזה מספר בריבוע יתן לי 16? האם זה 1? האם זה 2?... זה 4!...]
ולכן אתה נתקל בבעיה עם שורש, [מספרים לא שלמים...]
10/09/2006 17:46:03 SlimShady
אז כדי לחשב שורש צריך לעשות לולאה שתתחיל באפס, וכל פעם תגדיל את המספר באיזה 0.000000001 ותכפיל את המספר בעצמו, עד שמגיעים עד שמגיעים למספר שרוצים??
אני עובד ב-C וגם רציתי לדעת איך עושים את זה
11/09/2006 12:28:22 devil kide
coolz ,זה יכול להיות אפשרי, אבל כמו שאמרתי זה בעיה עם מספרים לא שלמים-5 ,למשל.

SlimShady, תחשוב אם הלולאה מתחילה ב0.000000001 ,ואני מחפש את השורש של המספר 1000 זה יקח יותר מדי זמן.
15/09/2006 13:58:16 devil kide
סיימתי את המחשבון, אבל ירדתי מהרעיון להגיש אותו.
אבל בגלל שחבר שלי גם כתב מחשבון, המורה אמר שהבוחן יכול לא לאהוב ת’רעיון ושאל אם אני מוכן לכתוב משהו אחר-הסכמתי. אני רוצה לראות הוא לא יעלה לי ציון. בקיצור, למישהו יש רעיון לפרוייקט חדש?


אם תרצו ת’קוד של המחשבון אני אציג כאן.
15/09/2006 15:20:11 ziv
תעשה סנייק :)
15/09/2006 16:14:13 devil kide
ציטוט:תעשה סנייק :)
בלתי אפשרי ב easycpu , הפלט\קלט שלו עובד דרך מערך מפסקים ונורות,לא פלט רגיל.
06/10/2006 21:54:25 TheShadow
לא מכיר את השפה ולא קראתי את מה שכתוב פה אבל אך שהוא תעשה כך שנגיד 10 אחוז מ X
זה 0.1 כפול X הבנתה?
עמודים: 1