נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
פורום מחשבים כללי
RSS UnderWarrior Forums : RSS פורום מחשבים כללי
נושא

נושא: גדלים בשפת סי ואסמבלי

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
mikebb
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 29 April 2011
משתמש: מנותק/ת
הודעות: 11
נשלח בתאריך: 25 September 2011 בשעה 10:24 | IP רשוּם
ציטוט mikebb

שלום,

רציתי לשאול למה כאשר אני בודק גודל כתובות בסי נוצר מצב ש-int הוא 4 בתים וכתובת היא גם 4 בתים (הבדיקה נעשית באמצעות sizeof) וכאשר אני שולח ערכים דרך פונקציה external ל-8086 אסמבלי דרך מחסנית הכתובת תופסת מקום של 2 כנ''ל גם ערך של int?

 

חזרה לתחילת העמוד הצג את כרטיס החבר של mikebb חפש הודעות אחרות של mikebb
 
inHaze
משתמש פעיל
משתמש פעיל
סמל אישי

הצטרף / הצטרפה: 23 November 2006
מדינה: Israel
משתמש: מנותק/ת
הודעות: 119
נשלח בתאריך: 25 September 2011 בשעה 12:08 | IP רשוּם
ציטוט inHaze

8086 זהו מעבד שעובד בתצורה של 16bit, לכן integer תופס 2
בתים. במעבדים הנפוצים כיום integer תופס:
32bit - ארבעה בתים.
64bit - שמונה בתים.

__________________
הבלוג שלי
חזרה לתחילת העמוד הצג את כרטיס החבר של inHaze חפש הודעות אחרות של inHaze
 
mikebb
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 29 April 2011
משתמש: מנותק/ת
הודעות: 11
נשלח בתאריך: 25 September 2011 בשעה 15:58 | IP רשוּם
ציטוט mikebb

כן אבל השאלה מה קורה לשני הבתים הנוספים שעוברים, אין מידע שהולך לאיבוד?

ואיך זה שב-c זה 4 ואז שזה עובר לאסמבלי פתאום זה 2? זה מוזר

חזרה לתחילת העמוד הצג את כרטיס החבר של mikebb חפש הודעות אחרות של mikebb
 
mikebb
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 29 April 2011
משתמש: מנותק/ת
הודעות: 11
נשלח בתאריך: 25 September 2011 בשעה 16:17 | IP רשוּם
ציטוט mikebb

ואני חייב לציין שאני משתמש ב-amd athlon 64

חזרה לתחילת העמוד הצג את כרטיס החבר של mikebb חפש הודעות אחרות של mikebb
 
inHaze
משתמש פעיל
משתמש פעיל
סמל אישי

הצטרף / הצטרפה: 23 November 2006
מדינה: Israel
משתמש: מנותק/ת
הודעות: 119
נשלח בתאריך: 25 September 2011 בשעה 16:55 | IP רשוּם
ציטוט inHaze

לגבי השאלה השניה שלך, הסיבה שב-c זה 4 ואז באסמבלי 2 היא
שכאשר אתה משתמש באסמבלי 8086 אתה בעצם עובד עם אימולטור
למעבד 16 ביט (אתה לא באמת עובד על מעבד 16 ביט), בעצם
האימולטור עצמו יודע לעשות את ההמרה הזאת.
איך הוא עושה את ההמרה? זאת שאלה טובה


__________________
הבלוג שלי
חזרה לתחילת העמוד הצג את כרטיס החבר של inHaze חפש הודעות אחרות של inHaze
 
mikebb
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 29 April 2011
משתמש: מנותק/ת
הודעות: 11
נשלח בתאריך: 25 September 2011 בשעה 17:16 | IP רשוּם
ציטוט mikebb

רגע זה קשור לעובדה שהמעבד שלי הוא 64 ביט עם התקן של x86? הכוונה האם זה קשור לעובדה שיכול להיות שבמעבד שלי יש רכיב שהוא x86?
חזרה לתחילת העמוד הצג את כרטיס החבר של mikebb חפש הודעות אחרות של mikebb
 
inHaze
משתמש פעיל
משתמש פעיל
סמל אישי

הצטרף / הצטרפה: 23 November 2006
מדינה: Israel
משתמש: מנותק/ת
הודעות: 119
נשלח בתאריך: 25 September 2011 בשעה 18:03 | IP רשוּם
ציטוט inHaze

אני לא חושב, יכול להיות שזה קשור לתמיכה של הסביבת פיתוח שלך
ב- 64 ביט.

__________________
הבלוג שלי
חזרה לתחילת העמוד הצג את כרטיס החבר של inHaze חפש הודעות אחרות של inHaze
 
mikebb
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 29 April 2011
משתמש: מנותק/ת
הודעות: 11
נשלח בתאריך: 25 September 2011 בשעה 22:08 | IP רשוּם
ציטוט mikebb

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

 

חזרה לתחילת העמוד הצג את כרטיס החבר של mikebb חפש הודעות אחרות של mikebb
 
11010010110
פורומיסט על
פורומיסט על
סמל אישי

הצטרף / הצטרפה: 23 April 2006
משתמש: מנותק/ת
הודעות: 2621
נשלח בתאריך: 17 November 2011 בשעה 19:29 | IP רשוּם
ציטוט 11010010110

מבחינת המעבד עצמו הגודל של int הוא 32 ביט או 64 ביט בהתאמה

המערכת הפעלה, קומפיילר, אסמבלר, לינק וכדומה בנויים למעבד כלשהוא (שיכול להיות נמוך יותר) וינצלו את היכולות שלו בלבד מתוך המעבד שיש לך

למשל : כתבת תוכנה שבה יש int שבשלב כלשהוא מגיע ליותר מ 2^16

אם הקומפיילר, לינק, מערכת הפעלה וכו כולם עובדים ב 32 ביט, התוכנה תעבוד תקין

אם אחד מהם מוגבל ל 16 ביט, יקרה איבוד מידע (כל מה שמעבר ל 16 ביט יהיה 0, יתכן שיהיה או לא יהיה carry) ותקרה שגיאה בזמן ריצת התוכנה כשהיא תגיע למקום הזה - יתכן שלא תגלה אותה לעולם, תקבל נתונים לא נכונים בתוכנה ותגלה את זה בעתיד, תקבל קריסה מיידית, פעולה לא רצויה, לולאה אינסופית או כל תקלת תוכנה אחרת

הקומפיילר יכול אוליי להתערב בקוד של התוכנה ולתקן אותו בלי שתדע : למשל להחליף int ל long כשהוא רואה מקום מועד לבעיה תוך כדיי שהוא מקמפל, ואז התוכנה אוליי כן תעבוד גם ב "תנאים של 16 ביט" ואוליי לא
חזרה לתחילת העמוד הצג את כרטיס החבר של 11010010110 חפש הודעות אחרות של 11010010110
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

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