פורסם 2006 בדצמבר 1818 שנים נתונה התוכנית הבאה:NUM: MOV SI , 10HMOV DI , 16HMOV CX , 6HON: MOV AL , [sI]AND AL , 0FHMOV [DI] , ALINC SIINC DILOOP ONRETמישהו יכול לומר לי מה עושה התוכנית בבקשה ?...... תודה !
פורסם 2006 בדצמבר 1818 שנים קודם כל, נתחיל בזה שזה לא פסיקה בכלל, אלא רק לולאה שרצה מספר מסוים (6) של פעמים.התוכנית לוקחת מספר שנמצא בתא מסויים, מבודדת את הסיפרה הימינית שלה (למשל, B8 יחזיר 08), ומכניסה ערך זה לתא שנמצא במיקום השישי שאחריו.הפקודה AND מכניסה לתוך הערך AL (שקיבל את הערך שנמצא בתא מסויים, SI) את המכפלה הלוגית של אותו מספר (1*1=1, וכל מכפלה אחרת שווה 0), ולאחר מכן מכניסה מספר זה לתא שנמצא במיקום השישי שאחריו (DI).הלולאה הזאת רצה 6H פעמים (שזה בעצם 6), כאשר הפעולה LOOP מורידה את הערך של CX באחד, ובודקת שאם CX שונה מ-0, היא תעשה JMP לתווית ON.נ.ב. היא לא משווה באמת את הערך של CX ב-0, אלא רק בודקת עם אוגר הדגלים אם הערך שווה 0 (הפקודה DEC מקפיצה את ZF)
פורסם 2006 בדצמבר 2318 שנים מחבר תודה בנאדם...אבל מה עושה הפקודה AND AL , 0FH ולשם מה שמו אותה? כלומר מה ההיגיון בה ?
פורסם 2006 בדצמבר 2318 שנים ככה בוחרים את ארבעת הביטים.הפקודה and אומרת למעבד לבצע "וגם"(פעולה לוגית) בין 2 ערכים. בפועל יש לך:רצף כלשהו של 8 ביטים(al). לדוגמא:01001011ועוד רצף של 8 ביטים(0Fh):00001111כאשר אתה מבצע ביניהם וגם, אתה מקבל:00001011את התוצאה שמים ב- al.
פורסם 2006 בדצמבר 2318 שנים מחבר הבנתי.. תודה.עכשיו... הפקודה TEST הבנתי שעושה אותו הדבר אבל ללא שינוי אוגר היעד (ההוא שנשמרת בו התוצאה).אז איך לפי הפקודה TEST אני אמור לדעת מה ערכו אם אינו משנה אותו, או לפחות מה השתנה בו כדי לדעת תוצאות הפקודה ?
פורסם 2006 בדצמבר 2318 שנים הפקודה TEST אמנם לא משנה את הערך שיש באופרנד הראשון, אבל כן מפעילה את אוגר הדגלים. הפקודה JZ, שהיא במילים פשוטות Jump If Zero, הולכת לפי אוגר הדגלים.כאשר התוצאה של הפקודה האחרונה שהופעלה, במקרה זה TEST, הינה 0, אוגר הדגלים מורם ו JZ יעבוד.
פורסם 2006 בדצמבר 2318 שנים התוכנתי היא אכן פסיקה.המילה RET בסוף התוכנית היא מילת סוף פסיקה שאומרת למעבד לשלוף חזרה את האוגרים IP CS ע"מ לחזור לתוכנית הראשית מאיפה שהיא הפסיקה.בכל מקרה, התוכנית רצה על 6 תאים בזיכרון שמוצבעים ע"י SI ובסך הכל ממסכת את הארבע סיביות ה MSB של הנתון, ואת התוצאה היא שומרת בכתובת ש DI מצביע עליו. DI ו SI רצים ביחד ככה שהשמירה נעשית בצורה יחסית. פשוט וקל.אם אץה צריך עוד עזרה שלח לי בפרטי.
פורסם 2006 בדצמבר 2318 שנים עבר קצת זמן, אבל נדמה לי שבאופן נורמלי בשביל לחזור מפסיקה צריך IRET ולא RET רגיל.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.