Professional Documents
Culture Documents
Z1
Z1
ر ر
(عمل)
ي محاضات يف لغة التجميع
لطالب المستوى ر
الثان علوم حاسوب
ي
قسم البيانات (data section):يستخدم هذا القسم لتعريف البيانات المبدئية أو الثوابت .هذه •
الينامج .يمكنك تعريف قيم ثابتة مختلفة ،أو أسماء ملفات ،أو أحجام
تتغي أثناء تشغيل ر
البيانات ال ر
ه:
مخازن ،إلخ يف هذا القسم .صيغة تعريف قسم البيانات ي
section .data
تتغي أثناء
المتغيات ر
ر متغيات .هذه
المتغيات (bss section):يستخدم هذا القسم لتعريف ال ر
ر قسم •
ه:
المتغيات ي
ر الينامج .صيغة تعريف قسم
تشغيل ر
section .bss
الفعل .يجب أن يبدأ هذا القسم قسم النص (text section):يستخدم هذا القسم لوضع الكود •
ي
الينامج .صيغة تعريف قسم النص ي
ه: بتعريف ، global mainوالذي يحدد نقطة بدء تنفيذ ر
section .text
global main
main:
التعليقات(comments):
تبدأ التعليقات بلغة التجميع بعالمة الفاصلة المنقوطة (;). •
يمكن أن تحتوي التعليقات عل أي حرف قابل للطباعة بما يف ذلك المسافة. •
يمكن أن تظهر ف سطر مستقل .مثل; This program displays a message on screen : •
ي
ويمكن أن تظهر ف نفس السطر اىل جوار تعليمة ما مثلadd eax ,ebx ; adds ebx to eax :
ي
2
Lecture 2 Assembly By:Amjed Abdullah
تعليمات لغة التجميع تتكون برامج لغة التجميع من ثالثة أنواع من التعليمات:
يجب القيام به .تتكون كل تعليمة من رمز العملية (opcode).وتولد كل تعليمة قابلة للتنفيذ
تعليمة واحدة بلغة اآللة.
•
الماكروهات( :)Macrosي
ه آلية تستخدم لتعريف تعليمات مخصصة تستبدل بتعليمات
أخرى أو سالسل نصية قبل عملية التجميع الفعلية.
تحتوي التعليمة األساسية عل جزآين ،األول هو اسم التعليمة (أو االختصار) الذي يجب تنفيذه، •
والثان هو العمليات أو المعامالت لألمر.
ي
)mov eax, 10 ; Mnemonic and operands (Move the value 10 to the register eax
)add ebx, ecx ; Operand (Add the value of register ecx to register ebx
3
Lecture 2 Assembly By:Amjed Abdullah
section .text
global main ;must be declared for linker (ld)
main: ;tells linker entry point
mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
msg db 'Hello, world!', 0xa ;our dear string
len equ $ - msg ;length of our dear string
:رشح الكود
section .text
. حيث يتم كتابة التعليمات التي سيتم تنفيذها،هذا يُعلن عن بداية قسم الكود
global main
وهو البرنامج الذي يجمع األكواد المختلفة لينتج، (linker) متاحة للرابطmain هذا يجعل الدالة
ً برنام ًجا
.قابًل للتنفيذ
main:
. وهي نقطة الدخول للبرنامج حيث يبدأ التنفيذ،main هذا يُعلن عن بداية تعريف الدالة
يستخدم عادة ً لتخزين edx السجلedx. إلى السجل، وهي طول الرسالة،len هذه التعليمة تنقل قيمة
.اإلخراج/الطول في عمليات اإلدخال
يستخدم عادة ً لتخزين العناوين فيecx السجلecx. إلى السجلmsg هذه التعليمة تنقل عنوان الرسالة
.اإلخراج/عمليات اإلدخال
4
Lecture 2 Assembly By:Amjed Abdullah
هذه التعليمة تنقل الرقم 1إلى السجل ،ebxوالذي يمثل معرف الملف لإلخراج القياسي(stdout).
هذه التعليمة تنقل رقم نداء النظام للكتابة ) (sys_writeإلى السجل eax.ا لسجل eaxيستخدم لتحديد
نداء النظام الذي سيتم تنفيذه.
int 0x80
هذه التعليمة تستدعي النواة لتنفيذ النداء النظامي المحدد في ،eaxوفي هذه الحالة ،هو نداء الكتابة إلى
اإلخراج القياسي.
هذه التعليمة تنقل رقم نداء النظام للخروج ) (sys_exitإلى السجل eax.
int 0x80
section .data
هذا يُعلن عن بداية قسم البيانات ،حيث يتم تخزين البيانات الثابتة مثل النصوص واألرقام.
بهذه الطريقة ،يقوم البرنامج بطباعة الرسالة ”! “Hello, worldعلى الشاشة ومن ثم ينهي التنفيذ.
5
Lecture 2 Assembly By:Amjed Abdullah
أقسام الذاكرة:
ر
والت يتم
يقوم نموذج الذاكرة المجزأة بتقسيم ذاكرة النظام إىل مجموعات من األقسام المستقلة ،ي
مؤشات موجودة يف سجالت األقسامُ .يستخدم كل قسم الحتواء نوع محدد اإلشارة إليها بواسطة ر
من البياناتُ .يستخدم قسم واحد الحتواء أوامر التعليمات ،ويحتوي قسم آخر عل عنارص البيانات،
التاىل:
نامج ،يمكننا تحديد مختلف أقسام الذاكرة عل النحو ي
الي ر ي
ويحتفظ القسم الثالث بالمكدس ر
ُ
• يستخدم قسم data.لتعريف منطقة الذاكرة حيث يتم تخزين عنارص البيانات ر
للينامج.وال
الينامج. ر ً
يمكن توسيع هذا القسم بعد تعريف عنارص البيانات ،ويظل ثابتا طوال فية تشغيل ر
ر ً ً ً ُ
• ويعد قسم bss.أيضا قسما ثابتا للذاكرة يحتوي عل مساحات للبيانات ي
الت سيتم تعريفها
ً
الينامج .تكون هذه الذاكرة المؤقتة مملوءة بالصفر.
الحقا يف ر
قسم الكودُ :يمثل (بقسم ُ (.text.يحدد هذا القسم منطقة يف الذاكرة تخزن فيها أوامر التعليمات .هذا
ً
القسم أيضا ثابت.
ر
قسم المكدس:يحتوي هذا القسم عل قيم البيانات ي
الت يتم تمريرها إىل الدوال واإلجراءات داخل
الينامج.
ر
مسجالت التجميع): (Assembly Registers
تجهي البيانات .يمكن تخزين هذه البيانات يف الذاكرة والوصول
ر تتضمن عمليات المعالجة بالمعالج
إليها من هناك .ومع ذلك ،فإن قراءة البيانات من الذاكرة وتخزين البيانات فيها يؤدي إىل بطء عمل
المعالج ،حيث يحتوي ذلك عل عمليات معقدة إلرسال طلب البيانات إىل وحدة تخزين الذاكرة
والحصول عل البيانات من خالل نفس القناة.
ر ُ
والت تسىم
ي لترسي ع عمليات المعالجة ،يتضمن المعالج بعض مواقع التخزين الداخلية للبيانات،
مسجالت.
تخزن المسجالت عنارص البيانات للمعالجة دون الحاجة إىل الوصول إىل الذاكرة .حيث يتم بناء عدد
محدود من المسجالت يف رقاقة المعالج.
6
Lecture 2 Assembly By:Amjed Abdullah
section .text
global main ;must be declared for linker (ld)
main: ;tells linker entry point
mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
section .data
'Displaying 9 stars',0xa ;a message
len equ $ - msg ;length of message
s2 times 9 db '*'
:رشح الكود
section .text:
ر
.الت سيتم تنفيذها ُ
حيث يتم كتابة التعليمات ي،يعلن عن بداية قسم الكود
global main:
ً وهو الينامج الذي يجمع األكواد المختلفة لينتج بر، (linker) متاحة للرابطmain يجعل الدالة
نامجا ر ا
.قابًل للتنفيذ
main:
7
Lecture 2 Assembly By:Amjed Abdullah
ا
وه طول الرسالة ،إىل السجل edx.السجل edxيستخدم عادة لتخزين الطول يفينقل قيمة ،lenي
عمليات اإلدخال/اإلخراج.
القياس(stdout).
ي ينقل الرقم 1إىل السجل ،ebxوالذي يمثل معرف الملف لإلخراج
ينقل رقم نداء النظام للكتابة ) (sys_writeإىل السجل eax.السجل eaxيستخدم لتحديد نداء النظام
الذي سيتم تنفيذه.
int 0x80:
ينقل مرة أخرى رقم نداء النظام للكتابة ) (sys_writeإىل السجل eax.
int 0x80:
النظام.
ي يستدع النواة مرة أخرى لتنفيذ النداء
ي
mov eax, 1:
8
Lecture 2 Assembly By:Amjed Abdullah
int 0x80:
الينامج.
يستدع النواة مرة أخرى لتنفيذ الخروج من ر
ي
section .data:
ُيعلن عن بداية قسم البيانات ،حيث يتم تخزين البيانات الثابتة مثل النصوص واألرقام.
9