الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تعلم لغة الأسمبلي بطريقة سهلة وعملية

مغلق
بدأه عبدالله بن شهاب في 13 مارس 2005 · 21 رد · 15,304 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

أخواني مشرفي وأعضاء المنتدى الكرام أقدم لكم طريقة جديدة لتعلم اللغة وهي طريقة عملية وسهلة من خلالها إن شاء الله سنتعلم أغلب أموامر اللغة وهي بوضع أكواد برامج جاهزة مع شرحها ومناقشتها وتطبيقها ومن ثم نترك مجالا للسؤال فيها أتمنى من المشرفي والأعضاء التفاعل والمناقشة .. واعتقد أن هذه الطريقة تغرس فينا التعاون والتكاتف وتغرس فينا مفهو الteem هدفنا الإفادة والإستفادة والعمل إلى مافية صالح الامة نسأل الله أن يوفقنا لما يحبه ويرضاه.

وسنبداء بالبرامج البسيطة ومن ثم سنتدرج شيئاً فشيئا.

سأضع بينكم هذا البرنامج البسيط وهو لإدخال حرف واحد من الكيبورد وطباعته في نفس السطر

طريقة تنفيذ البرنامج وكتابته على الجهاز:

1- عليك بفتح أي محرر لكتابة الرنامج .

2- أحفظ الملف على إمتداد asm مثال:kk.asm

3- انقل الملف الى مجلد cpp\bin يختلف المسار في كل جهاز ضع الملف مجلد الbin وهذا النقل لتفادي مشاكل ال path ولإننا لسا في البداية.

4- افتح نافذة الدوس وأدخل على مجلد ال bin

5- أكتب الأمر التالي c:\cpp\bin\tasm kk.asm

6- ستظهر لك رسالة الأخطاء والتحذيرات إذاكان هناك خطا سيعطيك رقم اليطر الموجد فيه الخطاء

7- من ثم اذا لم يكن اخطاء اكتب الأمر التالي: c:\cpp\bin\tlink kk.obj

8- أخر خطوة ماعليك سوى كتابة اسم الملف فقط kk .

.model small   ;  SMALL من نوع MODEL       أولا: نحدد ال 
.stack 100h     ; 100H في الذاكرة وليكن   STACK ثانيا : نحجز ال   
.data
msg db "Enter any charcter :$" ;   DB  من  نوع   MSG نعرف المتغيرات 
.code
main proc

mov ax,@data   ; AX حق المتغيرات ونحفضه في ال  ADRESSنأخذ ال 
mov ds,ax

mov ah,1h              ; 1لإدخال حرف واحد من الكيبوردH  الدالة
int 21h

mov ah,9h              ;وذلك لعرض المسج  STRING 9مخصصة لطباعة H  الدالة  
mov dx,offset ms
int 21h

mov dl,al           ;DL نحطه في ال  AL الحرف الذي سوف تدخله سيختزن في الريجستر 
mov ah,2h         ;  2لطباعة حرف واحد في الشاشة وهو الحرف الذي قمت بإدخالهH الدالة 
int 21h

mov ah,4ch        ;4CH  لإنهاء البرنامج والعودة الى الدوس
int 21h

main endp         ;proc لانهاء ال 
end main

إليكم إخواني مقدمة ميسرة وبسيطة عن لغة الاسمبلي فيها بعض المفاهيم ومبادي اللغة واسماء الريجسترات وكيفية كتابة البرنامج في الdebug وغيرها

في المرفقات

_____________________.doc

introduction_to_assemply.doc

تم تعديل هذه المشاركة بواسطة عبدالله بن شهاب في 13 مارس 2005 في 21:02

#2

درس جيد بالتوفيق يا اخى وشكرا على الدرس

تصميم كافة انواع المواقع البرامج بافضل الاسعار

aaasamy7@hotmail.com

الاسكندريه -مصر

ت:5749981

#3

شرح جيد ولكن من أين أحصل على مترجم اللغة الموجود في المجلد cpp

أخي سوف تبكي عليك العيون * * * وتـسـأل عـنك دمـوع المـئـين

فإن جف دمعي سيبكي الغمام * * * يـرصـع قـبرك بــالـياسـمـيـن

أخـي مـا يـأسـنـا ولـن نيـأسـا * * * وما طال في القلب لبث الأسى

ومـا حـل أفــئــدة الــمــــؤمـن * * * سـوى أمـل في الـجنـان رسـى

أخي فانتظر ولتعش في غـد * * * سـيـنـبـثـق الأمـل الـسـرمـد

فـإن مـزقـتـنـا سني الــحـيـاة * * * فإنـا مع الـنصـر فـي مـوعــد

#4

السلام عليكم شكرا لكم إخواني على تواصلكم أود أن أخبركم بأن الملفات المرفقة متشابهه حمل أي واحد منها

ثانياً : في الكود بإمكاننا كتابة مانود كتابته من تعليقاتcomments ولكن بشرط أن نكتب قبل الcomment

علامة السي مي كولن ; في كل سطر مثال:

mov ah,9h              ;9hالدالة     
             ;وذلك لطباعة المسج string  وضيفتها طباعة 
mov dx,offset ms
int 21h

mov dl,al          ;الحرف الذي سوف تدخله سيختزن في الريجستر 
                        ;DL نحطه في ال  AL 
mov ah,2h        ; 2hالدالة
                        ;وضيفتها طباعة حرف واحد على الشاشة

أخي msvs شكرا على حضورك

في مجلد ال cpp عادة يكون هناك ملفين واحد اسمه tasm والاخر اسمه tlink

الملفين يقومان بالترجمة اذا لم يكن موجود نزل في جهازك tourbo assemler

أتمنى من الكل المشاركة وكل واحد يطرح ماعنده من أفكار ,تعديلات ,أكواد ,وغيره

لتتم الفائده

تم تعديل هذه المشاركة بواسطة عبدالله بن شهاب في 14 مارس 2005 في 17:08

#5

ارجوا الاستمرار في الدروس

فانا مبيتدى في هذه اللغه

وحاب اتعلم هذه اللغة واحترفها لو امكن

ولقد اعجبني الشرح وفهمته جيدا ..

فارجوك الاستمرار ارجوك

#6

الكود الثاني :

إليكم الكود الثاني وهو نفس الأول مع بعض التعديلات عليه فقط مع شرح بعض الأمور.

سنقوم في هذا البرنامج البسيط إدخال حرف من الكيبورد وطباعته في سطر جديد , لطباعة الحرف في سطر جديد نكتب فقط 0ah سواء عرفتها أم لا والأن سنأتي إلى شرح البرنامج بتفصيل أكثر من الكود الأول :

.MODEL SMALL

مباشرة الأسمبلر يعرف نوع الذاكرة المستخدمة في البرنامج على سبيل المثال عرفناها هنا من . وهناك أنواع اخرى سنتعرض لها في المستقبل.small نوع

.STACK 100H

مباشرة الأسمبلر يحجز فراغ في الذاكرة قدره (حددناه هنا بـ 100) للأوامر المستخدمة في البرنامج ويحجزها في ستاك وتختلف المساحة المحجوزة.

.DATA

هنا إذا عندي متغيرات اعرفها تحت هذا الأمر واذا لم يكن عندي أي متغير مافي داعي لكتابته عليك بمراجعة الملف المرفق وضحنا فيه أنواع المتغيرات مع الأمثلة وشرحها بالتفصيل

.CODE

هنا أبدا بكتابة الكود والأوامر

MAIN PROC

mov ax,@data

mov ds,ax

هذه الخطوة أحتاجها فقط إذا كان عندي هناك متغيرات عرفتها ضمن الداتا وإذا لم أعرف شي فلا داعي لكتابتها ووضيفتها حفظ الأدرس للداتا

mov ah,9h

mov dx,offset msg

int 21h

هنا أبداء بكتابة خطوات البرنامج العملية الدالة 9 كما شرحناها وضيفتها طباعة مجموعة أحرف

لتحويل العبارة المراد طباعتهاoffset msg هذا الامرah ودائما تحول الدوال إلى

LEDوقد تستبدل بـ

mov ah,1h

int 21h

لإدخال حرف واحد من الكيبورد

mov ah,2h

mov dl,0dh

int 21h

الدالة 2 لطباعة حرف واحد فقط نحول الدالة 2 إلى الريجستر- آية أتش- الـ -آية أتش- ينظر إلى الريجستر –دي إل- ويطبع محتوياته وهنا سينتقل إلى سطر جديد بوجود – الزيرو دي إل -.

ومن ثم نطبع الحرف الذي أدخلناه من قبل وبهذا كنا قد شرحنا أغلب أوامر البرامج وباقي الاشياء ستظهر من أسئلتكم الرجاء تطبيق البرنامج والسؤال عن أي غامض او غير مفهوم والرد يكون مني أو من أي واحد من الأعضاء ذوا الخبرة في هذا المجال من أجل نستفيد وإذا كنت قد غفلت عن أي شي ممكن إضافتها من قبلكم فالموضوع مفتوح للكل للفائدة

الرجاء تحميل الملف المرفق وهو تكملة للملف الماضي ومشينا فيه خطوة بخطوة الرجاء قراءته وفهمه من أجل أن تكون قادر على المتابعة معنا ولاتنسونا من صالح دعواتكم.

تحياتي أخوكم : عبدالله بن شهاب

model small
.stack 100h
.data
msg db "Enter any charcter :$"
.code
main proc

mov ax,@data
mov ds,ax

mov ah,9h
mov dx,offset msg
int 21h

mov ah,1h
int 21h

mov bl,al   ;حفظنا الحرف المدخل في – البي إل - 

mov ah,2h
mov dl,0ah
int 21h

mov ah,2h
mov dl,bl
int 21h

mov ah,4ch
int 21h
main endp
end main

programing_data_statement.doc

#7

الكود الثالث :

نتابع معك في هذا الكود سنتعرف على تعريف الثوابت constant وأيضاً طباعة الــstring وبعض الأوامر البسيطة:

أي متغير نريد أن نعرفه في البرنامج كثابت constant نعرفه من نوع EQU كما في المثال الأتي :

CR EQU 0dh

LF EQU oah

ولو كان عندنا هناك رسالة أو عبارة نريد أن نطبعها نكتبها كالتالي

Msg1 db 'ENTER THE LAWER CASE : $'

نختار اسم للمسج مثلا MSG1 ونعرفها من نوع DB ونكتب الرسالة بين "" أو ' ' ولابد أن تنتهي الرسالة بعلامة الــ $ فالبرنامج يبداء بطباعة المسج من أولها إلى أن يصل الى هذه العلامة

وهذا الكود وضيفته يحول الحروف الإنجليزية من SMALL الى CAPITAL

وهو بسيط للغاية فقط ماعلينا سوى طباعة المسج 'ENTER THE LAWER CASE وسيدخل المستخدم أي حرف سيختزن الحرف في الــ AL ونتذكر أن القيمة التي تكون في الريجسترات دئما تكون آسكي كود وأرقام بالـHEXADICIMAL عندما يدخل المستخدم مثلا A تكون القيمة المخزونة في al 41h لانه 41 الآسكي كود حق الــ a وعندنا معلوم أن الـ a حقه الآسكي كود 61H فالعلاقة مابينهما أن الحرف الصغير يزيد عن الكبير بـ30h هنا نطرح من الـal الذي يحمل الحرف الذي أدخلناه 30h هذا كل ماعلينا عمله

عليكم بتطبيقة وإذا كان لديكم أي أسئلة وضعها في الموضوع

.MODEL  SMALL
.STACK  100H
.DATA
  CR   EQU   0dh
  LF   EQU   oah
  Msg1  db   0dh,0ah,'ENTER THE LAWER CASE : $'
  Msg2	db   0dh,0ah,'THE UPPER CASE IT IS : '
  Char  db   ?,'$'       
.CODE
main PROC
;initliaze DS
 MOV   AX,@DATA
 MOV   DS,AX
;print  user prompt message
 LEA	DX,MSG1
 MOV	AH,9;DISPLAY string function
 INT	21H
;input a character and convert to upper case
 MOV	AH,1       ;cin>>ah
 INT	21H
 SUB	AL,20H       ;al=al-20h
 MOV	CHAR,AL        ;char=al
;display on the next line
 LEA	DX,MSG2  ;load address of msg2 into dx
 MOV	AH,9     ;display function ==>printf("%s")
 INT	21H
;DOS exit
 MOV  AH,4CH    
 INT	21H
main	ENDP
END	main

Constant_datatype.doc

#8

أظن ان الفكرة ماهي بعاجبتكم

بدليل لاتوجد هناك ردود ولامناقشة

حول الأكواد

ولكن رغم هذا انا ساستمر

#9

بالعكس أخي عبدالله كلنا متابعين للموضوع

ودائما فإن الأعضاء بعد قرائتهم للموضوع وبعد التجارب (تأخذ وقت )

يبدأ بعد ذلك طرح الأسئلة ,, وسترى ذلك بنفسك

اقتباس
ولكن رغم هذا انا ساستمر

أحيي فيك هذة الإرادة

-

http://www.jaascois.com

*************************************************

مجموعة مواضيع - إحتراف البرمجة -

ّ~~~~~~~~~~~~~~~~~~~~~~

البرمجة المتقدمة & الهندسة العكسية & برمجة وأمن الأنظمة

/index.php?showtopic=45002

آخر المواضيع :

+- تحليل جرائم الكمبيوتر -+

أنظمة اليونكس(Solaris,HP, AIX,SCO)وانواع المعالجات

ثغرة SMS لأجهزة الجوال Siemens 3568i !

أخطاء وثغرات البرامج العربية !!!

سلسلة مواضيع - أمن وحماية مواقع الويب -

E البرمجة المتقدمة X للملفات التنفيذية E

سلسلة مواضيع ثغرات الأنظمة وإختراق الأجهزة

**************************************************

<span style='font-size:14pt;line-height:100%'>الإرادة تحـــقق السيـــادة</span>

**************************************************

#10

السلام عليكم ورحمة الله وبركاته

الف شكر لمشرفنا على التفاعل

إن شاء الله تكون تمت الاستفادة

من الدروس والاكواد

في المرفقات مجلد يحتوي على

مجموعة من الاكواد الجاهزة

لبرامج بسيطه تطيبيقات على

الدروس الماضية ارجوا تطبيقها

بعد هذه الدروس إن شاء الله ننتقل

واياكم في الدرس المقبل الى ال

flags وال loop

ارجوا تطبيق وفهم الدروس الماضيه

حتى تكونو قادرين على المتابعه

Exercis.zip

#11

السلام عليكم

أنا معاكم بالدروس ممكن؟

#12

السلام عليكم

جزاك الله خير على هذه الدروس و ان شاء الله سوف أكون من المستمرين معكم

لكن لدي سؤال أنا أعرف ان كوود انزال سطر جديد يكون كالاتي

mov ah,2h
mov dl,0dh;enter new lin
int 21h
mov dl,0ah; يبدأ من بداية السطر الجديد
int 21h
mov dl,al; هنا يكون مخزن الاسكي للقيمة المدخلة من المستخدم و توضع في المسجل الخاص بالاظهار

لكن انتم كاتبين

;display on the next line
LEA DX,MSG2 ;load address of msg2 into dx
MOV AH,9    ;display function ==>printf("%s")
INT 21H

هل هذا الامر LEA

عندما يأخذ الجملة يبدأ من بداية سطر جديد أم ماذا؟

و شكرا لكم و أتمنى أن يكون السؤال واضح

#13

معليش ممكن تقولي أيش الكتب اللي بتعطينا الدروس منها :)

يعني ما هو مرجعك لهذه اللغة

و شكرا

#14

شكرا اخوي عبدالله والله ماقصرت في اشياء كثير الحين فهمتها

تحياتي

تم تعديل هذه المشاركة بواسطة امل مقتول في 30 مارس 2005 في 01:10

#15

الف شكر لك اخي على التفاعل كل ماقلته هو صحيح وهو مطابق لما قلناه

LEA

هي لتحميل الأدرس حق الجمله المراد طباعتها

والنيو لاين 0dh

إن شاء الله نواصل معاكم باقي الدروس

#16

في هذا الدرس ننتقل وإياكم للوب وjump

هذا الكود يطبع كل الاسي كود لكافة لوحة التحكم

.model small
.stack 100h
.code
main proc
	mov ah,2
	mov cx,256
	mov dl,0
print_loop:
int 21h
inc dl
dec cx
jnz	print_loop
;dos exit 
	mov ah,4ch
	int 21h
main endp
end main
#17

السلام عليكم ورحمة الله وبركاته

اقدم اليكم اخواني الاعزاء هذا الـ comailaer حق الاسمبلي

وهو يسهل عليكم تعلم هذه اللغة حيث يبين حالة الريجسترات بعد

كل خطوة وفيه من المميزات العديده ارجوا ان تجربوه

الملف في المرفقات

Emu8086-Setup-Microprocessor-Emulator-310.zip

#18

لقد حملت الملف لكن عند فتحة تظهر رساله خطا

لقد حملته اكثر من مرة

#19
اقتباس
عبدالله بن شهاب

 

إن شاء الله نواصل معاكم باقي الدروس

أستاذ نتمى ان تكون الدروس متواصلة (بشكل غير مقطع لفترات طويله) :)

و ننتظر منك المزيد

وشكرا

#20

أخي عبد الله بن شهاب

كلامك جميل

وياريت اتكمل في الشرح

على العموم أنا حملت الكومبايلر بس ما اشتغل يا ريت اتنزله كمان مرة

اللهم انفعنا بما علمتنا وعلمنا ما ينفعنا

محب الجافا

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#21

انا كان عندي استفسار

بس مش عارف سلسلة الدروس انتهت ولا لسى مستمرة؟

على كل حال شكرا جزيلا للاخ ابن شهاب

#22

لمن لا يستطيع تحميل البرنامج يتوجه الى موقعه: www.emu8086.com

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

هذا الموضوع مغلق.

مواضيع مشابهة