ABA


"בעיית אזהרה על ''אי החזרת ערך מפונקציה'' ב-C..."
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #7960 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 7960
Dudenland

   17:50   15.02.04   
אל הפורום  
  בעיית אזהרה על ''אי החזרת ערך מפונקציה'' ב-C...  
 
   ב-C, הערך המוחזר מפונקציה מסויימת, נשמר בד"כ ברגיסטר AX, לפחות לגבי סוגי הערכים הרגילים (16 Bit). לדוגמה:

הפונקציה הזאת:


int func(void)
{
int a = 3;

return (a + 5);
}

לאחר קומפילציה, תתהווה ל:


_func:
mov word ptr , 3
add word ptr , 5
mov ax,
ret

אם אני ארצה לכתוב את הפונקציה הזאת באסמבלי, אני ארצה לכתוב:


int func(void)
{
int a;

asm mov byte ptr , 3;
asm add byte ptr , 5;
asm mov ax, ;
asm ret;
}

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

השאלה שלי היא איך לבצע את הנ"ל מבלי לקבל הודעת אזהרה, ומבלי להחזיר ערך משתנה כלשהו בדרך המקובלת (כמו return a)... אם אפשר, שיהיה לפי ANSI-C...

כמו-כן, איך אני יכול לצרף קוד אסמבלי לקוד C (באמצעות קישור) ?



                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  הממ hll 15.02.04 18:18 1
     מצטער על הבלאגן: ניסוח מחודש... Dudenland 15.02.04 18:52 2
         הנה Vidi 15.02.04 19:13 3
             ... Dudenland 15.02.04 21:15 4
                 הסורק שלי הרוס :\ מצטער Vidi 15.02.04 22:47 5

       
hll

   18:18   15.02.04   
אל הפורום  
  1. הממ  
בתגובה להודעה מספר 0
 
   מה לגבי ככה:

int a;
...
...
asm mov a, ax;
return(a);

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Dudenland

   18:52   15.02.04   
אל הפורום  
  2. מצטער על הבלאגן: ניסוח מחודש...  
בתגובה להודעה מספר 1
 
   ב-C, הערך המוחזר מפונקציה מסויימת, נשמר בד"כ ברגיסטר AX, לפחות לגבי סוגי הערכים הרגילים (16 Bit). לדוגמה:
הפונקציה הזאת:
int func(void)
{
int a = 3;

return (a + 5);
}

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

_func:
mov word ptr [a] , 3
add word ptr [a], 5
mov ax, [a]
ret

אם ארצה לכתוב את פונקציה זו באסמבלי, אך תחת קומפילר C, אכתוב משהו כמו:

int func(void)
{
int a;

asm mov byte ptr [a], 3;
asm add byte ptr [a], 5;
asm mov ax, [a];

return;
}

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

השאלה שלי היא איך לבצע את הנ"ל מבלי לקבל הודעת אזהרה, ומבלי להחזיר ערך משתנה כלשהו בדרך המקובלת (כמו return a), מכיוון שזה סתם פעולות ללא תועלת (גם ככה אני מחזיר את AX, וכאשר אני יעביר את התוכנית שמחזירה את a קומפילתיה, אני אקבל קוד באסמבלי שמעתיק את a ל-AX, ואז מחזיר את הפונקציה ע"י ret)... אם אפשר, שיהיה לפי ANSI-C...

כמו-כן, איך אני יכול לצרף קוד אסמבלי לקוד C (באמצעות קישור) ?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Vidi
חבר מתאריך 1.10.17
591 הודעות
   19:13   15.02.04   
אל הפורום  
  3. הנה  
בתגובה להודעה מספר 2
 
"כמו-כן, איך אני יכול לצרף קוד אסמבלי לקוד C (באמצעות קישור) ?"
כן תקרא עוד על זה בספר שפת אסמבלי למחשב האישי.
בקשר לאזהרה, למה להתייחס? זה רק אזהרה, חלק מהקומפילרים יאמרו משהו וחלק לא, מה אכפת לך מאזהרות? זה רק למי שלא בטוח במה שהוא עושה אז מזהירים, אבל ברגע שאתה מגיע למצב אתה רוצה למחוק אזהרות, אני לא מבין למה בכלל להתייחס אליהם!


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Dudenland

   21:15   15.02.04   
אל הפורום  
  4. ...  
בתגובה להודעה מספר 3
 
   מכיוון שאם אני רוצה ליצור ממשק כלשהו, ונניח שאני רוצה להפיץ אותו (לא שזה מה שאני רוצה, אבל נניח)... אני לפחות לא הייתי רוצה לקבל אזהרות על שימוש בפונקציה printf למשל...

בקשר לאסמבלי... אין לי שום ספר לאסמבלי... תוכל להראות לי איך עושים את זה (קישור)... ?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Vidi
חבר מתאריך 1.10.17
591 הודעות
   22:47   15.02.04   
אל הפורום  
  5. הסורק שלי הרוס :\ מצטער  
בתגובה להודעה מספר 4
 
אבל תקשיב חייב להיות את זה בספרייה,
או אפילו לך לסטימצקי ורק תסתכל שם ואז תבין...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net