פורסם 2010 בנובמבר 1414 שנים התחלתי ללמוד אסמבלי באוניברסיטה, ובקרוב אני צריך לכתוב תוכניות.החשש היחיד שלי הוא מזה שאנחנו לומדים על אסמבלי והכל על מעבדי 32 ביט, ואילו אצלי בבית אני עובד על מעבד 64 ביט.ליתר דיוק מה שיש לי בבית הוא מחשב נייד עם מעבד Intel Core i3 עם מערכת הפעלה ubuntu 10.04 וקומפיילר gcc.רציתי לדעת אם יש הבדלים בין כתיבת אסמבלי 32 ביט לכתיבת אסמבלי 64 ביט (דברים כמו גודל רג'יסטרים, גודל כתובות)?הדגש העיקרי בשאלה שלי הוא על האם תוכנית שאני אכתוב כאילו כמו למעבד 32 ביט תעבוד רגיל במעבד ה- 64 ביט שלי?
פורסם 2010 בנובמבר 1414 שנים מחבר אוקיי, אבל ניסיתי לקמפל תוכנית Hello World (בלי שום דגלים של ה- gcc): #This is a simple "Hello World!" program .section .rodata #read only data sectionstr: .string "Hello World!\n" ######## .text #the beginnig of the code.globl main #the label "main" is used to state the initial point of this program .type main, @function # the label "main" representing the beginning of a functionmain: # the main function: pushl %ebp #save the old frame pointer movl %esp, %ebp #create the new frame pointer pushl $str #the string is the only paramter passed to the printf function. call printf #calling to printf AFTER we put its parameters in the stack. #return from printf: movl $0, %eax #return value is zero (just like in c - we tell the OS that this program finished seccessfully) movl %ebp, %esp #restore the old stack pointer - release all used memory. popl %ebp #restore old frame pointer (the caller function frame) ret #return to caller function (OS)ואני מקבל הודעות שגיאה כאלה:Error: suffix or operands invalid for 'push'מה אני צריך לעשות?דרך אגב, מה שאנחנו לומדים בכיתה זה על IA32.
פורסם 2010 בנובמבר 1514 שנים מחבר אוקיי, אבל כשאני משתמש בדגל m32 זה רושם לי:/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.3/libgcc.a when searching for -lgcc/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.3/libgcc.a when searching for -lgcc/usr/bin/ld: cannot find -lgcccollect2: ld returned 1 exit statusמה אני עושה עכשיו?
פורסם 2010 בנובמבר 1514 שנים אתה בלינוקס או באובונטו?נראה לי באובונטו, אם כן אז תנסה להתקין את החבילה gcc-4.3-multilib (אם היא לא מותקנת)ותנסה אולי את המתג -L/usr/lib32 המינוס כמובן בהתחלה.אם אתה בלינוקס, אז תביא הפצה וגירסא.
פורסם 2010 בנובמבר 1514 שנים מחבר תודה רבה, הורדתי את ה- multilib ואז זה עובד.דרך אגב, רשמתי בהודעה הראשונה שאני משתמש באובונטו אבל זה כנראה לא היה כל כך ברור.שוב תודה.
פורסם 2010 בנובמבר 1514 שנים לא קראתי שוב את ההודעה הראשונה כשעניתי לך.אבל ניחשתי אובונטו, כי זאת תקלה ידועה שהתלויות לא מותקנות שם כמו שצריך.
פורסם 2010 בנובמבר 1614 שנים מחבר תחפש ב- package manager את המילה multilib ותסמן את הדבר הראשון שאתה מקבל (זה יתקין עוד כמה דברים, פשוט תאשר את זה).
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.