התלבטות בקשר לפקודה חוקית או לא חוקית - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

התלבטות בקשר לפקודה חוקית או לא חוקית


bdoron

Recommended Posts

יש לי למשל את הפקודה:

sub A2[bx+si],al

וידוע שA2 הוא word לפי מה שלמדתי שהם לא אותו הגודל הפקודה לא חוקית, על A2 ו al, להיות שווים בגודלם, אבל נתקלתי במישהו סטודנט שאמר לי משהו שונה

אם bx+si מגיע לקטע שהוא מוגדר כbyte אז התשובה חוקית

האם זה נכון? זאת אומרת שלמרות שA2 מוגדר כווארד אבל בגלל שA2+bx+si מביא אותנו למקטע מסוג byte הפקודה כן תהיה חוקית..

אשמח לעזרה

קישור לתוכן
שתף באתרים אחרים

  • 1 שנה מאוחר יותר...

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

כאשר אתה מקצה למשתנה מקום בזכרון, אתה מציין כמה בתים אתה רוצה שהוא יתפוס (במקרה של 8086 - בית או מילה).

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

עכשיו, אם אתה מנסה לגשת למקום כלשהוא בזכרון בלי שציינת לאיזה טיפוס הוא מצביע (לדוגמא MOV [SI], AX) תקבל שגיאת קומפילציה כי לכתובת בזכרון (הפויינטר [SI]) אין טיפוס. מה אם SI היה מצביע על משתנה מטיפוס בית אבל הוספת לו מילה כמו בדוגמא הנ"ל? קילקלת וגלשת למשתנה אחר או איבר שלא קשור למקום שרצית לשים את AX.

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

בדוגמא שלך, הוא ידע להגיע להיסט כלשהוא [bx+si] אבל לאותו מקום בזיכרון הוא יתייחס כמילה וינסה לשים בה בית (=לא חוקי).

 

דוגמא להמחשה:

סגמנט הנתונים:

 

  a 	dw 		1111h
  b 	dw		2222h
  d 	db 		33h

כרגע בזכרון זה נראה כך:

a - היסטים 0-1

b - היסטים 2-3

d - היסט 4

 

לאחר ביצוע הפקודה add     a[1], 3333h

אתה תוסיף 33h להיסט 1, שהוא הבית השני במשתנה a, ועוד 33h להיסט 2 שהוא כבר הבית הראשון במשתנה b.

 

*רק עכשיו קלטתי מתי השאלה פורסמה, מסתבר שזה כבר ממש לא רלוונטי.

 

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...