עבור לתוכן
View in the app

A better way to browse. Learn more.

HWzone

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Featured Replies

פורסם

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

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.

 

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

 

נערך על-ידי holyheat

ארכיון

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

דיונים חדשים

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.