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

הבדלים בין אסמבלי 64 ביט ל- 32 ביט


Aviv C

Recommended Posts

התחלתי ללמוד אסמבלי באוניברסיטה, ובקרוב אני צריך לכתוב תוכניות.

החשש היחיד שלי הוא מזה שאנחנו לומדים על אסמבלי והכל על מעבדי 32 ביט, ואילו אצלי בבית אני עובד על מעבד 64 ביט.

ליתר דיוק מה שיש לי בבית הוא מחשב נייד עם מעבד Intel i3 עם מערכת הפעלה 10.04 וקומפיילר gcc.

רציתי לדעת אם יש הבדלים בין כתיבת אסמבלי 32 ביט לכתיבת אסמבלי 64 ביט (דברים כמו גודל רג'יסטרים, גודל כתובות)?

הדגש העיקרי בשאלה שלי הוא על האם תוכנית שאני אכתוב כאילו כמו למעבד 32 ביט תעבוד רגיל במעבד ה- 64 ביט שלי?

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

אוקיי, אבל ניסיתי לקמפל תוכנית Hello World (בלי שום דגלים של ה- gcc):

	#This is a simple "Hello World!" program
.section .rodata #read only data section
str: .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 function
main: # 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.

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

אוקיי, אבל כשאני משתמש בדגל m32 זה רושם לי:

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64--gnu/4.4.3/libgcc.a when searching for -lgcc

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64--gnu/4.4.3/libgcc.a when searching for -lgcc

/usr/bin/ld: cannot find -lgcc

collect2: ld returned 1 exit status

מה אני עושה עכשיו?

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

אתה בלינוקס או באובונטו?

נראה לי באובונטו, אם כן אז תנסה להתקין את החבילה gcc-4.3-multilib (אם היא לא מותקנת)

ותנסה אולי את המתג -L/usr/lib32 המינוס כמובן בהתחלה.

אם אתה בלינוקס, אז תביא הפצה וגירסא.

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

ארכיון

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

×
  • צור חדש...