פורסם 2006 בנובמבר 719 שנים אז ככה, צריך לכתוב תוכנית המסדרת בלוק מספרים מהגדול לקטןכתובת תחילת הבלוק 1000H אורך הבלוק 10Hתודה מראש mov cx, 10h start1: mov bx, 1000h mov di, 1001h mov dx, 10h start2: mov al, [bx] mov ah, [di] cmp ah, al jnc xx mov [di], al mov [bx], ah xx: inc bx inc di dec dx jnz start2 loop start1 RET
פורסם 2006 בנובמבר 719 שנים תבצע bubble sort או selectoin sort. ב-selection לדוגמא, אתה רץ על כל הבלוק, מוצא את הערך הכי גבוה ושם אותו בראש הבלוק. לאחר מכן אתה סורק החל מהכתובת השניה בבלוק, מוצא את הערך הכי גדול ושם אותו במקום השני. וכן הלאה. ב-bubble, אתה עובר על הבלוק ככה: משווה בין האיבר הראשון לשני. אם השני גדול יותר, מחליף בינהם, ואז משווה בין השני לשלישי, אם השלישי גדול יותר, מחליף בינהם, וכך הלאה עד הסוף. בשלב זה אתה יודע שהאיבר הכי קטן נמצא בכתובת האחרונה. לאחר מכן אתה חוזר על הפעולה עד לכתובת האחת לפני אחרונה, כך שאחריכן האיבר השני הכי קטן נמצא בכתובת האחת לפני אחרונה, וכן הלאה עד שתסיים. לגביי המימוש, לא אמורה להיות בעיה. יש אלגוריתמים יעילים יותר כמו merge-sort, אבל נראה לי שזה מסובך מדי בשבילך. אם יש משהו ספציפי, שאל פה.
פורסם 2006 בנובמבר 719 שנים מחבר הצלחתי לבנות תוכנית שבודקת מה המספר הכי גדול ב-10 תאים אבל אני לא יודע איך לעשות שאחרי שהיא בודקת 10 שתבדוק 9 וכן הלאה:mov SI, 1000Hmov DI, 1010Hmov cx, 10Hmov al, 00again:cmp [SI], alJC xxmov al, [SI]xx:Inc SIloop againmov [DI], alRET
פורסם 2006 בנובמבר 719 שנים מדובר פה על לולאה מכוננתאתה צריך לעבור על המערך 10 * 10 פעמים ^^כאילו^^גם אם אתה לא עושה שזה יבדוק אחד פחות כל פעם, בפעם שאחרי זה גם יפעלעושים את זה לצורכי יעילותאתה צריך לעשות שם שאני קפיצותמכיוון שתה לא יכול לעשות שני LOOPאז אתה צריך משתנה אחר ולעשות CMP אחרי שחלפת לפי המקום המתאיםולעבור להבא ב DI ולחפש את SI וחוזר חלילה
פורסם 2006 בנובמבר 719 שנים מחבר לא הבנתי אותך אתה יכול להדגים?תודה..עריכה: מה אתה אומר על זה:mov SI, 1000Hmov DI, 1010Hmov cx, 10Hmov al, 00again:cmp [SI], alJC xxmov al, [SI]xx:Inc SIloop againmov [DI], almov al, 00dec dimov bx, 10Hdec bxJNZ againRET
פורסם 2006 בנובמבר 719 שנים זה לא ממש מה שרציתי לעשות, להכין לך את שיעורי הבית ועוד כשזה מיון פשוט! אבל לאור הקשיים שאתה מפגין פה יצאתי מעקרונותי mov SI, 1001H mov DI, 1000H mov cx, 10H mov ax, 1000H;maxagain: cmp [SI], [ax] JC xx mov ax, SIxx: Inc SI loop again mov bx, [DI] mov [DI], [ax] mov [ax], [DI] inc di mov al, di cmp di,1010h JNZ againRET לא בטוח שזה נכון זה היה על רגל אחת אז לפחות תעשה טובה תריץ את זה ותעבור שלב שלב תראה אם ואיך זה פועל
פורסם 2006 בנובמבר 819 שנים מחבר תודה רבה אך זה לא שיעורי ביית זה התכוננת למבחן..לא הבנתי מה זה ה- max הזה שרשמת.. ואיך שמת סוגריים מרובעים על ax הוא לא מצביע בכלל (לפי מה שאני למדתי).שוב תודה תום
פורסם 2006 בנובמבר 1219 שנים מחבר חברה מצטער על ההקפצה אבל אני ממש חייב שתעזרו לי המבחן שלי מחר..תודה.
פורסם 2006 בנובמבר 1219 שנים שים לב ש-"max" זו רק הערה, שמציינת ש-ax שומר כתובת של ערך מקסימלי. וכן, אפשר להשתמש גם ב-ax כאינדקס. הקוד הזה מממש selection sort שפועל כפי שהסברתי קודם, אם כי אני לא מבין עד הסוף מה הולך שם (האסמבלר שלי החליד). נסה להריץ ולראות איך זה עובד.
פורסם 2006 בנובמבר 1319 שנים יש לך מספר ערכים ברצף בזיכרון. אתה צריך לשמור את המיקום בזיכרון של הכי קטן(או גדול, תלוי איזה מיון) כדי לדעת להשוות אותו עם השאר ולהחליף אותו עם האחרון כל פעם.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.