עבור לתוכן

עזרה בכתיבת תוכנית (אסמבלי) עריכה! הצלחתי בואו תראו אם התוכנית טובה

Featured Replies

פורסם

אז ככה, צריך לכתוב תוכנית המסדרת בלוק מספרים מהגדול לקטן

כתובת תחילת הבלוק 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

פורסם

תבצע bubble sort או selectoin sort. ב-selection לדוגמא, אתה רץ על כל הבלוק, מוצא את הערך הכי גבוה ושם אותו בראש הבלוק. לאחר מכן אתה סורק החל מהכתובת השניה בבלוק, מוצא את הערך הכי גדול ושם אותו במקום השני. וכן הלאה. ב-bubble, אתה עובר על הבלוק ככה: משווה בין האיבר הראשון לשני. אם השני גדול יותר, מחליף בינהם, ואז משווה בין השני לשלישי, אם השלישי גדול יותר, מחליף בינהם, וכך הלאה עד הסוף. בשלב זה אתה יודע שהאיבר הכי קטן נמצא בכתובת האחרונה. לאחר מכן אתה חוזר על הפעולה עד לכתובת האחת לפני אחרונה, כך שאחריכן האיבר השני הכי קטן נמצא בכתובת האחת לפני אחרונה, וכן הלאה עד שתסיים. לגביי המימוש, לא אמורה להיות בעיה. יש אלגוריתמים יעילים יותר כמו merge-sort, אבל נראה לי שזה מסובך מדי בשבילך. אם יש משהו ספציפי, שאל פה.

פורסם
  • מחבר

הצלחתי לבנות תוכנית שבודקת מה המספר הכי גדול ב-10 תאים אבל אני לא יודע איך לעשות שאחרי שהיא בודקת 10 שתבדוק 9 וכן הלאה:


mov SI, 1000H
mov DI, 1010H
mov cx, 10H
mov al, 00

again:
cmp [SI], al
JC xx
mov al, [SI]

xx:
Inc SI
loop again
mov [DI], al

RET

פורסם

מדובר פה על לולאה מכוננת

אתה צריך לעבור על המערך 10 * 10 פעמים ^^כאילו^^

גם אם אתה לא עושה שזה יבדוק אחד פחות כל פעם, בפעם שאחרי זה גם יפעל

עושים את זה לצורכי יעילות

אתה צריך לעשות שם שאני קפיצות

מכיוון שתה לא יכול לעשות שני LOOP

אז אתה צריך משתנה אחר

ולעשות CMP אחרי שחלפת לפי המקום המתאים

ולעבור להבא ב DI ולחפש את SI

וחוזר חלילה

פורסם
  • מחבר

לא הבנתי אותך אתה יכול להדגים?

תודה..

עריכה: מה אתה אומר על זה:


mov SI, 1000H
mov DI, 1010H
mov cx, 10H
mov al, 00

again:
cmp [SI], al
JC xx
mov al, [SI]

xx:
Inc SI
loop again
mov [DI], al

mov al, 00
dec di
mov bx, 10H
dec bx
JNZ again
RET

פורסם

זה לא ממש מה שרציתי לעשות, להכין לך את שיעורי הבית :nono:

ועוד כשזה מיון פשוט!

אבל לאור הקשיים שאתה מפגין פה

יצאתי מעקרונותי

	mov SI, 1001H
mov DI, 1000H
mov cx, 10H
mov ax, 1000H;max

again:
cmp [SI], [ax]
JC xx
mov ax, SI
xx: Inc SI
loop again

mov bx, [DI]
mov [DI], [ax]
mov [ax], [DI]

inc di
mov al, di
cmp di,1010h
JNZ again
RET

לא בטוח שזה נכון זה היה על רגל אחת

אז לפחות תעשה טובה תריץ את זה ותעבור שלב שלב תראה אם ואיך זה פועל

פורסם
  • מחבר

תודה רבה אך זה לא שיעורי ביית זה התכוננת למבחן..

לא הבנתי מה זה ה- max הזה שרשמת.. ואיך שמת סוגריים מרובעים על ax הוא לא מצביע בכלל (לפי מה שאני למדתי).

שוב תודה תום

פורסם
  • מחבר

חברה מצטער על ההקפצה אבל אני ממש חייב שתעזרו לי המבחן שלי מחר..

תודה.

פורסם

שים לב ש-"max" זו רק הערה, שמציינת ש-ax שומר כתובת של ערך מקסימלי. וכן, אפשר להשתמש גם ב-ax כאינדקס. הקוד הזה מממש selection sort שפועל כפי שהסברתי קודם, אם כי אני לא מבין עד הסוף מה הולך שם (האסמבלר שלי החליד). נסה להריץ ולראות איך זה עובד.

פורסם
  • מחבר

מה הכוונה ב-"שומר כתובת של ערך מקסימלי"?

תודה, תום.

פורסם

יש לך מספר ערכים ברצף בזיכרון. אתה צריך לשמור את המיקום בזיכרון של הכי קטן(או גדול, תלוי איזה מיון) כדי לדעת להשוות אותו עם השאר ולהחליף אותו עם האחרון כל פעם.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים