מדריך לכתיבת תכנית ב Assembly

מטרת המדריך

מטרת מדריך זה להשלים את הפער בין החומר התאורטי הנלמד בכתה או מספר לימוד, לבין העבודה המעשית על המערכת.

למי מיועד המדריך

המדריך מיועד לתלמידים המתחילים את הלימוד התאורטי של שפת Assembly, וזקוקים להדרכה כיצד לכתוב ולהדר את התכניות הראשונות שלהם במערכת GNU/Linux.

על איזו מערכת נבנה המדריך

המדריך נבנה על מערכת Ubuntu GNU/Linux אך כל מערכת לינוקס תתאים. הוראות ההתקנה המדוייקות ספציפיות למערכת מבוססת Debian GNU/Linux, אך ינתנו הסברים כלליים גם עבור מערכות אחרות.

דברים שצריך לאסוף לפני תחילת העבודה

  • - מהדר ל Assembly וספריות בסיסיות, מאוחר יותר אפשר להוסיף עוד סיפריות וכלי פיתוח נוספים.

במערכות Ubuntu הפקודות הבאות יתקינו את כל התכנות להן זקוקים בכתיבת תכנית Assembly בסיסית, ישנן שתי שיטות תחביר עיקריות לכתיבת Assembly, שיטת Intel ושיטת AT&T . מדריך זה יציג שני מהדרים, אחד התואם לכל שיטה, על התלמיד לבחור אחד מהמהדרים:

nasm מהדר Assembly התואם לשיטת Intel

  sudo apt-get install nasm

gas מהדר Assembly התואם לשיטת AT&T

  sudo apt-get install binutils

במערכות אחרות צריך להקפיד כי במערכת יהיה מותקן מהדר מסוג nasm או gas בהתאמה (gas - ארוז בד”כ בחבילה בשם binutils)

  • - ספר לימוד ל Assembly

אם אתם תלמידים המחברת שלכם תספיק בהחלט, ספר לימוד טוב לא יזיק. כדאי לזכור כי לשפת Assembly מדריכים רבים ברשת.

קישור למדריך ברשת

שפת סף

Assembly היא שפת סף. בשונה משפות עיליות, שפת Assmebly קרובה יותר לשפת המכונה. מאחר ושפת המכונה שונה ממכונה למכונה גם שפת הסף (Assembly) שונה ממכונה למכונה. שפת Assmenly למעבד 80386 שונה משפת Assembly ל mips r10000 ששונה משפת Assembly למעבד ממשפחת Arm. המדריך הזה יביא דוגמה לשימוש ב Assembler המתאים למעבד ממשפחת x86. מהדר Assembly gas מסוגל להבין ולהדר מספר רב של שפות Assembly המיועדות למעבדים שונים.

כדי לפתח בשפת Assembly צריך ידע על המעבד, רצוי גם לדעת על הרכיבים האלקטרוניים המחוברים אליו וצורת החיבור שלהם אל המעבד. מידע על סט הפקודות ואוסף האוגרים של מעבד ניתן לקבל מיצרן המעבד. בהמשך מובאים קישורים למדריך ברשת המפרט את סט הפקודות והאוגרים של מעבד 8086. כדאי לחפש ברשת נתונים על המעבד הספצפי עליו אותם הולכים לתכנת, מעבדים ממשפחת x86 שומרים את סט הפקודות והאוגרים של מעבדים ישנים יותר מאותה משפחה ומוסיפים להם פקודות ואוגרים חדשים.

אוגרים במעבד 8086
סט הפקודות של מעבד 8086

מהלך העבודה

כתיבת התכנית

את התכנית ניתן לכתוב בכל עורך טקסט. אנו נשתמש בדוגמה זו בעורך הטקסט של Gnome.

כתוב תכנית פשוטה בעורך הטקסט,

קוד עבור gas לפי שיטת AT&T

#code

.text					# section declaration

			# we must export the entry point to the ELF linker or
    .global _start	# loader. They conventionally recognize _start as their
			# entry point. Use ld -e foo to override the default.

_start:

# write our string to stdout

	movl	$len,%edx	# third argument: message length
	movl	$msg,%ecx	# second argument: pointer to message to write
	movl	$1,%ebx		# first argument: file handle (stdout)
	movl	$4,%eax		# system call number (sys_write)
	int	$0x80		# call kernel

# and exit

	movl	$0,%ebx		# first argument: exit code
	movl	$1,%eax		# system call number (sys_exit)
	int	$0x80		# call kernel

.data					# section declaration

msg:
	.ascii	"Hello, world!\n"	# our dear string
	len = . - msg			# length of our dear string

#code

קוד עבור nasm לפי שיטת Intel

;code

section .text				;section declaration

			;we must export the entry point to the ELF linker or
    global _start	;loader. They conventionally recognize _start as their
			;entry point. Use ld -e foo to override the default.

_start:

;write our string to stdout

        mov     edx,len ;third argument: message length
        mov     ecx,msg ;second argument: pointer to message to write
        mov     ebx,1   ;first argument: file handle (stdout)
        mov     eax,4   ;system call number (sys_write)
        int     0x80	;call kernel

;and exit

	mov	ebx,0	;first syscall argument: exit code
        mov     eax,1   ;system call number (sys_exit)
        int     0x80	;call kernel

section .data				;section declaration

msg     db      "Hello, world!",0xa	;our dear string
len     equ     $ - msg                 ;length of our dear string


;code
הידור התכנית

אנו נהדר את התכנית בעזרת מהדר Assembly, מתוך המסוף (ראה תמונת מסך בסוף המדריך)

הידור בעדרת gas

 as hello.s -o hello.o

הידור בעזרת nasm

  nasm -f elf hello.asm

קישור עבור שני המהדרים

  ld -s -o hello hello.o
הרצת התכנית

קוד:

  hello/.
תמונת מסך

כך צריכה להראות התכנית בעורך הטקסט ובמסוף בו אתם מבצעים את ההידור וההרצה.

עבור gas

gas1.jpg

(לחץ על התמונה כדי לקבל תמונה מוגדלת)

עבור nasm

nasm1.jpg

(לחץ על התמונה כדי לקבל תמונה מוגדלת)

איך להמשיך

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

מדריכי תכנות

מדריכי תכנות - אוסף מדריכי התכנות בפנגווין.

מדריכים/כתיבת_תכנית_ב_assembly.txt · שונה לאחרונה ב: 2008/06/19 18:34 (עריכה חיצונית)
chimeric.de = chi`s home Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0