עבור לתוכן

תוכנית ממבחן טכנאי במחשבים (אסמבלי)

Featured Replies

פורסם

נתונה התוכנית:

NUM: MOV SI,10H

MOV DI,16H

MOV CX,6H

ON: MOV AL,[sI]

AND AL,0FH

MOV [DI],AL

INC SI

INC DI

LOOP ON

RET

מישהו יכול לומר לי מהו התנאי (ואיך הגעת למסקנה) בו מסתיימת הלולאה ?

ומה התוכנית עושה ?

תודה אנשים !

פורסם

הלולאה תעבוד 6 פעמים... והתנאי הוא שCX יהיה שווה 0...

מסקנה? LOOP

וזאת גם לא כל התכנית אני מניח שהשתמשו ב LEA או OFFSET בהתחלה

פורסם
  • מחבר

האם התוכנית מוציאה את הנתונים החל מתא 10H ועד תא 15H, כאשר כל נתון נגזרת ממנו סיפרת האחדות

שלו ע"י פעולת ה- AND שבשורה 5, ולאחר מכן מסדרת אותם החל מתא 16H ועד תא 1BH ??

ומה קורה לנתונים אשר היו בתאים 16H ועד 1BH ?? האם הנתונים פשוט נדרסים ונהייה שם רק אותה ספרת אחדות רלוונטית

או שנשאר הספרת עשרות שהיתה בתאים 16H ועד 1BH ופשוט לידה תתקבל ספרת האחדות החדשה ?????

פורסם

אממ לפי מה שהבנתי התכנית לוקחת את הנתונים שבתאים 10-15H,מאפסת להם את ספרת העשרות,ומציבה את הנתונים החדשים מתא 16-1BH בהתאמה.

כל הנתונים הקודמים שהיו בתאים נמחקים.

עריכה: שיתקנו אותי אם אני טועה אבל במידה והיו רוצים שהנתונים שבתאים 16-1BH ישארו היו כותבים בשורה 6:

ADD [DI],AL

פורסם
  • מחבר

וכאשר אתה אומר מאפסת להם את ספרת העשרות הכוונה שהיא לוקחת רק את האחדות ומציבה בתאים המתאימים ?

פורסם

אני אשמח אם מישהו יסביר לי למה אתם אומרים שהיא מאפסת את העשרות?

מה שאני רואה פה שמתבצעת הפעולה AND עם 1 לכל סיבית בAL

לי זה נראה שזה בודק אם כל הסיביות דולקות.. אבל זה רק נראה לי.. אני לא אוהב אסמבלי :)

פורסם
  • מחבר

כאשר אתה מכפיל ב- 1 כל סיבית באחדות אתה שומר על הסיבית שם.

כי 1 כפול 0 שומר על ה-0.

1 כפול 1 ישמור לך על ה-1.

אבל כאשר אתה שם 0FH אתה מכפיל את AH ב-0 כלומר מאפס את כל הסיביות של AH יענו העשרות, הבנת ?

האם התוכנית מוציאה את הנתונים החל מתא 10H ועד תא 15H, כאשר כל נתון נגזרת ממנו סיפרת האחדות

שלו ע"י פעולת ה- AND שבשורה 5, ולאחר מכן מסדרת אותם החל מתא 16H ועד תא 1BH ??

ומה קורה לנתונים אשר היו בתאים 16H ועד 1BH ?? האם הנתונים פשוט נדרסים ונהייה שם רק אותה ספרת אחדות רלוונטית

או שנשאר הספרת עשרות שהיתה בתאים 16H ועד 1BH ופשוט לידה תתקבל ספרת האחדות החדשה Huh??

פורסם

עד כמה שזכור לי משיעורי אסמבלי (אני גם לומד לטכנאי..) כאשר מסמנים 0FH זה מתייחס רק לF...

לפני הF צריך להוסיף סימון 0... אם רצית שזה יהיה 0F אני חושב שהיה צריך לכתוב 00FH.. אבל אני ממש לא בטוח בקשר לזה.. תבדוק..

וגם לא נראה לי הגיוני שאתה מפעיל פעולת AND הפועלת בגודל של מילה על אופרנד בגודל byte, תבדוק גם את זה, אולי זה אפשרי אבל אני לא סגור על זה.

עריכה: נראה לי אני סתם מבלבל בשכל.. אל תקשיב לי יותר מדי... אבל אני גם אשמח ללמוד מה התשובה הנכונה :)

בקיצור אני לא יודע אסמבלי.. נכשלים בבחינה החיצונית חודש הבא :)

פורסם
  • מחבר

כל מה שרשמת מקודם לא נכון...

כדאי לך ללמוד טוב כי אחרת באמת תיכשל.

אני נבחן בבחינה כי אין לי ברירה אני רוצה לשפר ציון שם... היה לי 67 אני צריך 86 בערך..

ומישהו מוכן לענות על השאלה שלי ממקודם ??? אחרת הת'רד הזה ידרדר למקומות לא נאותים.

פורסם

למה אתה מדבר על ספרת האחדות וספרת העשרות? נתון לך שתוכן התאים הוא ב-BCD? או שאתה מתייחס ל-hex?

פורסם

כאשר אתה מכפיל ב- 1 כל סיבית באחדות אתה שומר על הסיבית שם.

כי 1 כפול 0 שומר על ה-0.

1 כפול 1 ישמור לך על ה-1.

אבל כאשר אתה שם 0FH אתה מכפיל את AH ב-0 כלומר מאפס את כל הסיביות של AH יענו העשרות, הבנת ?

האם התוכנית מוציאה את הנתונים החל מתא 10H ועד תא 15H, כאשר כל נתון נגזרת ממנו סיפרת האחדות

שלו ע"י פעולת ה- AND שבשורה 5, ולאחר מכן מסדרת אותם החל מתא 16H ועד תא 1BH ??

ומה קורה לנתונים אשר היו בתאים 16H ועד 1BH ?? האם הנתונים פשוט נדרסים ונהייה שם רק אותה ספרת אחדות רלוונטית

או שנשאר הספרת עשרות שהיתה בתאים 16H ועד 1BH ופשוט לידה תתקבל ספרת האחדות החדשה Huh??

על איזה AH אתה מדבר?

נגיד ובAL יש 28H אז לאחר שורה 5 הוא יהיה 08H.

כבר כתבתי לך מה עושה התוכנית.

כן הנתונים שהיו נמחקים והנתונים החדשים מוצבים במקומם.

אם היה בתא 10H נתון 56 אז לאחר התוכנית בתא 16H יהיה 06.

אני אשמח אם מישהו יסביר לי למה אתם אומרים שהיא מאפסת את העשרות?

מה שאני רואה פה שמתבצעת הפעולה AND עם 1 לכל סיבית בAL

לי זה נראה שזה בודק אם כל הסיביות דולקות.. אבל זה רק נראה לי.. אני לא אוהב אסמבלי :)

נגיד שבתא 10H יש את הנתון 81H,הנתון מועבר למעבד לאוגר AL שם מתבצעת פעולת AND בין הנתון ל0FH כך:

0FH=00001111B

81H=10000001B

קל להבין שארבע הסיביות הימניות נשארות ללא שינוי והארבע השמאליות מתאפסות כך שיצא:

00000001B שזה 01H.

הנתון החדש מוצב בתא 16H.

ארכיון

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

דיונים חדשים